我正在尝试对某些代码进行超级优化,而我想加速的地方如下:
我想得到一个点积运算(_mm_dp_ps)的答案,这是一个_m128,并将答案直接保存到寄存器中。但是,使用_mm_store,这意味着我必须向数组写入一个完整的128位,然后加载该数组的第一个条目。
调用我的_m128变量“vector”。
我可以浮动ans = *((float *)& vector)?
如果这样可以解决它是否有帮助的问题。将ans加载到寄存器中,或者我是否必须从L1加载它?
谢谢!!!
答案 0 :(得分:3)
结果实际上已经登记;你只需要告诉编译器将其解释为标量而不是向量。您正在寻找_mm_cvtss_f32
内在:
float result = _mm_cvtss_f32(vector_result);
答案 1 :(得分:0)
如果你只使用单个值,那么值得指出,你应该用ss内在函数代替ps而不是ps;在这种情况下,_mm_store_ss
完全有效,可以将低值存储到单个精度浮点数,而无需使用_mm_cvtss_f32
。