X86 将一个_m128变量提取为浮点 float myfunction(p1、b2、int维度) { __m128 v_b1、v_b2、v_b3; int j=0; 对于(int i=0;i
我假设您希望对所有差异求和,然后将其作为函数结果返回:X86 将一个_m128变量提取为浮点 float myfunction(p1、b2、int维度) { __m128 v_b1、v_b2、v_b3; int j=0; 对于(int i=0;i,x86,sse,simd,X86,Sse,Simd,我假设您希望对所有差异求和,然后将其作为函数结果返回: for (int i=0; i<dimention; i++ ) { result += b1.c[i] - b2.c[i]; } #包括//SSE3 浮点myfunction(b1、b2、整数维) { __m128 v_b1、v_b2、v_b3、v_b4; 浮动f; v_b4=_mm_setzero_ps();//将差值之和初始化为零 对于(int j=0;j
for (int i=0; i<dimention; i++ ) {
result += b1.c[i] - b2.c[i];
}
#包括//SSE3
浮点myfunction(b1、b2、整数维)
{
__m128 v_b1、v_b2、v_b3、v_b4;
浮动f;
v_b4=_mm_setzero_ps();//将差值之和初始化为零
对于(int j=0;j
如果这不是你想要做的,那么请用更多的细节更新你的问题,我会相应地更新代码。我编辑了我的问题…顺便说一下,我得到的这个错误“_mm_hadd_ps”没有在这个范围内声明好的-我想我的解决方案对你有效-注意
_mm_hadd_ps
是SSE3,所以你需要#include
。非常感谢,我认为它可以工作!当我返回f时,我得到一个分段错误。还有其他建议吗?我能看到的上述代码seg错误的唯一可能原因是b1.c或b2.c未正确对齐(它们都需要16字节对齐).如果这不是问题所在,那么您需要进一步调查,也许还需要发布一个新问题。
for (int i=0; i<dimention; i++ ) {
result += b1.c[i] - b2.c[i];
}
#include <pmmintrin.h> // SSE3
float myfunction ( P b1, P b2, int dimention )
{
__m128 v_b1, v_b2, v_b3, v_b4;
float f;
v_b4 = _mm_setzero_ps(); // initialise sum of differences to zero
for (int j = 0; j < dimention; j += 4)
{
v_b1 = _mm_load_ps(b1.c + j); // load 4 floats from b1[j]
v_b2 = _mm_load_ps(b2.c + j); // load 4 floats form b2[j]
v_b3 = _mm_sub_ps(v_b1, v_b2); // calc 4 differences
v_b4 = _mm_add_ps(v_b4, v_b3); // accumulate 4 differences
}
v_b4 = _mm_hadd_ps(v_b4, v_b4); // sum horizontally
v_b4 = _mm_hadd_ps(v_b4, v_b4); // (NB: need to do this twice to sum all 4 elements)
_mm_store_ss(&f, v_b4); // extract sum
return f; // return sum
}