我正在尝试使用 SSE(在 Visual Studio 上)加快我的方法。我是该地区的新手。我在我的方法中使用的主要数据类型是大小为 32 的位集,我主要使用的逻辑运算是 AND 运算(很少使用 _BitScanForward)。我想知道是否可以使用 SSE 指令来加快我的程序。
这就是我现在正在做的事情(我已经完全完成了,无法直接比较结果):
我使用 _mm_set_ps 加载操作数(位集)。我在位集上使用 to_ulong() 将它们转换为无符号长整数:
__m128 v1 = _mm_set_ps(b1.to_ulong(),b2.to_ulong(),b3.to_ulong(),b4.to_ulong());
__m128 v2 = _mm_set1_ps(b.to_ulong())
接下来是实际的 AND 操作:
__m128 v3 = _mm_and_ps(v1,v2);
在这一点上,我有两个问题:
我这样做的方式(使用 to_ulong() 将位集转换为无符号长整数)是一种好方法吗?我怀疑有很大的开销可能会扼杀我使用 SSE 可能获得的潜在性能改进。
以 4 个位集的形式将 v3 存储回内存的最佳方法是什么?我打算使用 _mm_storeu_ps 内在函数。