2013-04-29 2 views
-1
float myfunction (P b1, P b2, int dimention) 
{  
    __m128 v_b1,v_b2,v_b3; 
    int j=0; 

    for (int i=0; i<dimention/4; i++) { 
     v_b1=_mm_load_ps(b1.c +j); 
     v_b2=_mm_load_ps(b2.c +j); 
     v_b3=_mm_sub_ps(v_b1,v_b2); 
     j+=4; 
    } 
} 

떠 추출 :는 _m128 변수가 내가 정말 할 노력하고있어 것은 이것이다

for (int i=0; i<dimention; i++) { 
    result += b1.c[i] - b2.c[i]; 
} 

나는 result을 반환합니다. 너 나 좀 도와 줄 수있어?

답변

2
난 당신이 모든 차이를 요약하고 함수의 결과로이 반환 할 것을 가정하고

: 이것은 당신이 다음 자세한 내용과 질문을 업데이트하십시오 수행하려는되지 것입니다 경우

#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 
} 

을 그에 따라 코드를 업데이트 할 것입니다.

+0

나는이 오류를 얻는다.이 범위에서 '_mm_hadd_ps'가 선언되지 않았다. – Tonia

+0

OK - 내 솔루션이 당신을 위해 작동한다고 생각한다. - _mm_hadd_ps는 SSE3이므로 참고해야한다. '#include '. –

+0

대단히 고맙습니다. 내가 f를 돌려 줄 때. 세분화 오류가 발생합니다. 다른 제안? – Tonia

관련 문제