Intel MIC向量化优化笔记
条评论Intel Xeon Phi系列又称为MIC(Many integrated core),是Intel提供的高性能众核加速方案,拥有60左右的核心,具有高并发的特点,使用SIMD设备能够提供强大的性能。MIC加速卡的性能计算公式中使用的性能完全是其向量处理器VPU带来的性能,对于一个MIC上的应用,性能好坏也主要看代码向量化的程度,因此MIC的向量化技术是一个非常重要的问题。当然最重要的参考还是intel编译器的官方手册。
数据结构
MIC向量化指令使用__m512系列变量(两个下划线)。在MIC的向量化指令函数中使用的__mm512变量被定义成了下表的这几种格式,每一个向量化变量,他的长度都是512bit。目前支持的变量有32位和64位的float,以及32位的int。
- __m512 单精度浮点向量(float32 vector)
- __m512i 整型向量(int32 vector)
- __m512d 双精度浮点向量(float64 vector)
另外还有一种格式:__mmask16
,实质上是一个unsigned short
类型,使用这种变量来表示一些mask操作(掩码操作)。
内存中的变量需要先进行对齐才能被存取成向量化变量,使用declspec align(64)
来进行对齐,或者使用_mm_malloc()
函数申请对齐的数组。
指令结构
MIC一代产品的向量化指令并不全,不支持完整的shuffle等操作,下一代MIC的向量化产品会很好的解决这些问题。MIC向量化操作支持mask操作,也就是掩码操作,能够通过使用掩码实现条件写入,进位,借位,结果比较等操作。其指令函数名大致可以分为4个部分,使用”_“来隔开,这4个部分的含义如下:
- 第一个部分是_mm512(1个下划线)。表示使用的是MIC的512位向量指令。
- 第二个部分为是否使用掩码,如果使用掩码这部分是mask,不使用掩码这部分为空。
- 第三部分为操作函数名称,如add,fmadd,这里的定义有很多,有时候会不止一个单词,但大致可归为是操作名称。
- 第四部分是操作的数据结构。ps表示操作向量是单精度浮点,pd表示操作向量是双精度浮点数,epi32表示操作向量是32位有符号整型,epu32表示操作向量是32位无符号整型。
四个部分组合起来就形成了一个向量操作函数,如不带mask的_mm512_add_ps
,带mask的_mm512_mask_add_ps
。
指令的第三部分非常众多,组成了丰富的向量指令集。使用的时候查阅官方手册找intrinsics部分,找适合自己算法的指令来进行优化,这里就不详细介绍了。
本文标题:Intel MIC向量化优化笔记
文章作者:throneclay
发布时间:2015-12-31
最后更新:2022-08-03
原始链接:http://blog.throneclay.top/2015/12/31/micsimd/
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!