我的问题是关于在基于内在函数的代码中定义__m128
/编译时间常数的最有效位置。__m128i
考虑两种选择:
选项 A
__m128i Foo::DoMasking(const __m128i value) const
{
//defined in method
const __m128i mask = _mm_set1_epi32(0x00FF0000);
return _mm_and_si128(value, mask);
}
选项 B
//Foo.h
const __m128i mask = _mm_set1_epi32(0x00FF0000);
//Foo.cpp
__m128i Foo::DoMasking(const __m128i value) const
{
return _mm_and_si128(value, mask);
}
- 选项 A 会导致性能损失,还是会被优化到与选项 B 相当的水平?
- 有更好的选择 C吗?
- 答案是否会根据方法是否内联而改变?
_mm_set1_epi32
/是__mm_set_epi32
加载常量的最佳方式吗?我已经看到了一些int[4]
生成 an 并将其转换为__m128i
.
我知道所有这些问题的正确答案是“检查拆卸!” ,但我在生成它和解释它方面都没有经验。
我正在以最大优化的方式在 MSVC 上进行编译。