2013-03-12 7 views
3

내가 등록 제온 파이와 같이 512 와이드 SIMD 벡터에서 다음 복식가있는 경우 :loaddup_pd/unpacklo_pd

m0_d = |a4|a4|a3|a3|a2|a2|a1|a1| 
:

m0 = |b4|a4|b3|a3|b2|a2|b1|a1| 

이 안으로 들어가 할 수 있습니다

단일 명령 사용? 또한 double 형에 대한 비트 내장 함수가 없기 때문에 위의 결과를 얻으려면 여전히 유효한 방법입니까? 다음과 같이

m0_t = _mm512_swizzle_pd(m9,_MM_SWIZ_REG_CDAB);//m0_t->|a4|b4|a3|b3|a2|b2|a1|b1| 
__m512d res = _mm512_mask_or_epi64(m0,k1,zero,m0_t);//k1 is 0xAA 
+0

실제로이 작업은 다음과 같이 수행 할 수 있습니다. m0_d = _mm512_mask_swizzle_pd (m0,0xAA, m0, _MM_SWIZ_REG_CDAB); 마스크 변형이 간과되었습니다. – user1715122

+0

해당 솔루션이 작동하는 경우 대답으로 추가하여 쉽게 찾을 수 있습니다. Xeon Phi는 여전히 매우 새롭기 때문에 아직 모범 사례 정보는 많지 않습니다. –

답변

3

달성 할 수 있습니다

m0_d = _mm512_mask_swizzle_pd(m0,0xAA,m0,_MM_SWIZ_REG_CDAB); 

IT는 스위 즐 동작이 제한되어 보일 수 있지만 마스크 변형과 함께 우리는 너무 다른 순열을 달성 할 수있다.