2013-11-03 17 views
1

SSE 명령어를 사용하여 정수 값을 곱하고 더하는 프로그램을 작성하고 있습니다. 나는 float로 같은 프로그램을했지만 내 정수 버전에 대한 설명이 빠져있다. 내 모든 작업을 완료 한 후 수레와SIMD 정수 저장소

는, 내가하고 일반 float 배열로 다시 드 값을 반환 :

_mm_store_ps(temp4,temp3); 

temp4는 플로트 *이며, __m128을 TEMP3.

문제는 내가 intengers에 대한 비슷한 내장을 찾을 수 없다는 것입니다. 어떻게 값을 일반 배열로 반환해야합니까?

감사합니다 귀하의 답변에 대한 많은)

답변

2

는) _mm_load_si128 정렬 _mm_store_si128()와 _mm_loadu_si128_mm_storeu_si128 (정렬되지 않은 참조하십시오.

어떤 이유로 인해 형식이 부동 소수점 intrinsics와 다른 이유로 이러한 내용을 간과했을 수 있습니다. 이들은 당신이 원하는 movdqa/movdqu에 더 낮은 것입니다.

+0

하지만 _mm_store_si128 (__m128i * p, __m128i)은 데이터를 _128i 유형으로 올바르게 이동하고 있습니까? _mm_store_ps를 사용하여 데이터를 플로트 배열로 이동했습니다. 정수 배열로 정수가 필요하면 _mm_store_si128을 사용할 수 있습니까? 나는 캐스트를 할 수 있다고 생각하지만 캐스트가 꽤 느립니다. 고맙습니다;) – Thudor

+1

예, 저장하고 있던 포인터를 캐스팅해야합니다. 이 유형의 주조는 전적으로 무료입니다 (캐스트를 올바르게받을 의무가 있지만!). – gsg