2013-05-16 3 views

답변

4

그것은 당신이 정확히 "배역"무슨 뜻인지에 따라 달라집니다,하지만, 축소 조작을 찾고 있다면 당신은 하나의 짧은 벡터에 두 개의 정수 벡터 팩을 _mm_packs_epi32 (PACKSSDW)를 사용할 수 있습니다 :

__m128i vint1, vint2; // 2 vectors of 4 x 32 bit ints 
__m128i vshort;  // 1 vector of 8 x 16 bit ints 

vshort = _mm_packs_epi32 (vint1, vint2); 

반대의 경우, 넓게 (풀고) 작업은 다음과 같이 달성 될 수있다 :

SSE 지시를 언팩하여 자동적 인 부호 확장 서명 값 WI중인 산술 시프트 용 따라서 필요가 없다는
vint1 = _mm_srai_epi32(_mm_unpacklo_epi16(vshort, vshort), 16); // PUNPCKLWD+PSRAD 
vint2 = _mm_srai_epi32(_mm_unpackhi_epi16(vshort, vshort), 16); // PUNPCKHWD+PSRAD 

참고 dened.

+0

나는 정확히 당신이 지적한 것을 의미합니다. 그러나 8 X 16 비트 int의 역방향 확장 벡터를 4 x 32 비트 int의 벡터 2 개로 만들 수 있습니다. 하나는 낮은 4 개의 짧은 값과 다른 하나는 더 높은 값을가집니다. – Andy

+0

예, 확장 작업도 있습니다 - 예제를 추가하겠습니다. 다시 한 번, [Intel Intrinsic Guide] (http://software.intel.com/en-us/articles/intel-intrinsics-guide)를 통해 귀하의 질문에보다 신속하고 확실하게 답변 해 드리는 것이 좋습니다. –