- 并行编程方法与优化实践
- 刘文志
- 339字
- 2025-02-21 21:55:47
1.1.4 加载和存储
SSE内置函数支持的加载和存储操作及其数据类型如表1-4所示。不但支持正向设置、逆向设置、清零、全部设置为某值,还支持不经过缓存的加载和存储,以及对应的存储和加载。
表1-4 SSE加载和存储
其中extract操作单精度浮点数据的定义如下:
int _mm_extract_ps(__m128 a, const int id); r = a[id];
在SSE指令中,extract是非常耗时的操作,故不建议使用。
insert按照掩码的对应比特值决定对应位量元素乘积是否相加,并将结果写入掩码指定位置,如下所示:
__m128 _mm_insert_ps(__m128 a, __m128 b, const int id); int bid = value of bit 6-7 for id int bv = b[bid]; bid = value of bit 4-5 for id r[0] = (bid == 0) ? bv : a[0]; r[1] = (bid == 1) ? bv : a[1]; r[2] = (bid == 2) ? bv : a[2]; r[3] = (bid == 3) ? bv : a[3]; r[0] = (0x1 & id == 1) ? 0.0 : r[0]; r[1] = (0x2 & id == 1) ? 0.0 : r[1]; r[2] = (0x4 & id == 1) ? 0.0 : r[2]; r[3] = (0x8 & id == 1) ? 0.0 : r[3];
掩码的第6、7位决定了取b的哪个元素取代a中元素,而第4、5位决定了a的哪个元素被取代。