2

我正在尝试对一些代码进行超级优化,我想加快速度的地方如下。

我想得到一个 _m128 的点积运算 (_mm_dp_ps) 的答案,并将答案直接保存到寄存器中。但是,使用 _mm_store,这意味着我必须将完整的 128 位写入一个数组,然后加载该数组的第一个条目。

调用我的 _m128 变量“向量”。

我可以做 float ans = *(((float *)&vector) 吗?

如果这有效,那么它是否有帮助的问题仍然存在。将 ans 加载到寄存器中,还是无论如何我都必须从 L1 加载它?

谢谢!!!

4

2 回答 2

3

结果实际上已经在注册中;您只需要告诉编译器将其解释为标量而不是向量。您正在寻找_mm_cvtss_f32内在的:

float result = _mm_cvtss_f32(vector_result);
于 2013-11-03T23:28:09.383 回答
0

值得指出的是,如果您只使用单个值,则应该在可用的情况下替换 ss 内在函数而不是 ps ;在这种情况下,_mm_store_ss对于将低值存储到单精度浮点数而无需使用_mm_cvtss_f32.

于 2015-02-17T19:42:02.643 回答