【发布时间】:2021-07-11 06:12:26
【问题描述】:
我为处理单精度浮点计算 SIMD 内部函数编写了一些优化。
有时pd 双精度指令比任何ps 单精度指令更容易完成我想要的操作。
示例 1:
我有指针 float prt* 指向浮动块: f0 f1 f2 f3 等
我想用 [ f0, f1, f0, f1, f0, f1, f0, f1 ] 加载 __m256 值。我没有找到 __m256 数据类型的 64 位广播。我可以在浮点数上使用_mm256_broadcast_sd 吗?
float* ptr = ...; // pointer to some memory chunk aligned to 4 bytes
__m256 vat = _mm256_castpd_ps( _mm256_broadcast_sd( ( double* )ptr ) );
示例 2:
我有 __m256 值 [f0, f1, f2, f3, f4, f5, f6, f7]。 我可以使用像 _mm256_srl_epi32 这样的移位指令,它以 __m256i 值作为参数来使用我的 __m256 值进行操作吗?
我在实践中检查它并且它有效,但是使用不同类型的指令是正确的方法吗?
【问题讨论】:
标签: c sse simd intrinsics avx