2013-07-03 3 views
1

예를 들어 4 개의 숫자를 나누어서 인쇄하는 데 도움이 필요합니다. 나는 g ++을 제 컴파일러로 사용하고 있습니다. 다음 코드는 -msse3 -mmmx 플래그로 컴파일되지만, 필자가 필요로하는 것은 확실하지 않지만 작동한다. 나는 set을 나누기 전에 함수 호출로 숫자를 알아야한다고 생각하지만, 어떤 함수를 호출 할 지에 대해서는 긍정적이지 않다. (나는 링크가 int에 대한 함수를 가지고 있다고 생각한다). std::cout을 사용하여 결과를 인쇄 할 수있는 방법이 있지만이 경우에는 printf이 제대로 작동합니다 (이 경우 print128_num이 맞는지 확실하지 않습니다. 원래 int으로 작성되었습니다). 코드를 heres.SSE1 divps intrinsic xmmintrin.h를 사용하여 4 개의 32 비트 부동 소수점을 나누고 printf를 사용 하시겠습니까?

#include <emmintrin.h> 
#include <xmmintrin.h> 
#include <stdio.h> 
#include <stdint.h> 

void print128_num(__m128i var) 
{ 
    uint16_t *val = (uint16_t*) &var; 
    printf("Numerical: %i %i %i %i %i %i %i %i \n", 
     val[0], val[1], val[2], val[3], val[4], val[5], 
     val[6], val[7]); 
} 
__m128 divide_4_32_bit_values(__m128 __A, __m128 __B) 
{ 
    return _mm_div_ps (__A, __B); 
} 
int main(void) 
{ 


    return 0; 
} 
+0

것은 의도적 4 'float's를 인쇄하려고 8 int16's로? – Mysticial

+0

아니요. 내가 게시물의 끝 부분에 썼던 것이 틀린 것일 수도 있습니다. 그래서 그것을 4 개의 부유물에 맞게 고쳐야합니까? – pandoragami

+0

잠깐, 그래서 네가 거기에있는 것 대신에'printf()'를 어떻게'float' 4 장을 출력하도록 바꾸는 지 묻는거야? – Mysticial

답변

3

나는 몇 가지 문제를 해결했고 나는이 지금 당신이 원하는 것을 생각 :

테스트
#include <xmmintrin.h> 
#include <stdio.h> 

void print128_num(const char * label, __m128 var) 
{ 
    float *val = (float *) &var; 
    printf("%s: %f %f %f %f\n", 
     label, val[0], val[1], val[2], val[3]); 
} 

__m128 divide_4_32_bit_values(__m128 __A, __m128 __B) 
{ 
    return _mm_div_ps (__A, __B); 
} 

int main(void) 
{ 
    __m128 v1 = _mm_set_ps(4.0f, 3.0f, 2.0f, 1.0f); 
    __m128 v2 = _mm_set_ps(1.0f, 2.0f, 3.0f, 4.0f); 
    __m128 v = divide_4_32_bit_values(v1, v2); 

    print128_num("v1", v1); 
    print128_num("v2", v2); 
    print128_num("v ", v); 

    return 0; 
} 

:

$ gcc -Wall -msse3 m128_print.c 
$ ./a.out 
v1: 1.000000 2.000000 3.000000 4.000000 
v2: 4.000000 3.000000 2.000000 1.000000 
v : 0.250000 0.666667 1.500000 4.000000 
$ 
+0

두 작업에 대한 값의 개수가 올바로 지정되었다고 가정하면'_mm_set' 다음에'_ps'를 항상 두어'_mm_div_ps' 행을 따라 함수를 사용하기위한 올바른 설정 기능을 얻으려고합니까? – pandoragami

+0

예,'_ps' 접미사는 모든 단일 정밀도 (부동 소수점) 내장 함수에서 발견됩니다. "(p) acked (s) ingle precision"의 약자입니다. –