2013-11-03 91 views
2

我想超级优化一些代码,并且我想加快的地方是以下内容。我可以将存储在_m128 SSE寄存器中的浮点数直接移动到正常寄存器吗?

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

调用我的_m128变量“vector”。

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

如果这有效,是否它仍然有帮助的问题依然存在。是否会被加载到一个寄存器中,或者我将不得不从L1加载它?

谢谢!!!

+0

现在......你试过了吗? –

回答

3

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

float result = _mm_cvtss_f32(vector_result); 
+0

谢谢Stephen =) –

0

就值得指出的taht如果你只使用一个值,你应该取代SS内在而不是ps的,其中可用的;在这种情况下,_mm_store_ss对于将低值存储到单精度浮点而不需要使用_mm_cvtss_f32是完全有效的。

相关问题