SIMD 병렬 프로그래밍 공부하시는 분 계신가요
말달리자
질문 제목 : simd 명령어 사용법질문 내용 :
안녕하세요 simd 공부하는 학생입니다.
simd 병렬 프로그래밍 공부하고 있는데 모르는게 있어서 질문 드립니다.
현재 메모리 xmm_a에 16bit(short)형 값이 아래와 같이 저장되어 있고xmm_a 0,1,2,3,4,5,6,7xmm_b 메모리에도 16bit(short)형 값이 아래와 같이 저장되어 있다고 하였을 경우xmm_b -10,-11,-12,-13,-14,-15,-16,-17
이를 xmm_r이라는 메모리에 16bit(short)형으로0,1,2,3,-10,-11,-12,-13을 저장하는 방법에 대해 알고 싶습니다.
코드로 보여드리면,
short a[8] = {0,1,2,3,4,5,6,7};short b[8] = {-10,-11,-12,-13,-14,-15,-16,-17};
__m128i xmm_a, xmm_b, xmm_r, xmm_z;
xmm_a = _mm_load_si128((__m128i *)a);xmm_b = _mm_load_si128((__m128i *)b);
위의 코드에서 xmm_a와 xmm_b에 존재하는 앞의 4자리 숫자씩만 사용하여xmm_r에0,1,2,3,-10,-11,-12,-13을 만들고 싶은게 목적입니다.
해당 방법을 행하는 명령어나 방법을 아시는분 계시나요? ㅠㅠunpack과 pack을 봐도 잘 모르겠어서..
-
맑은가람
질문과 예제 코드만 놓고 본다면 단순하게..
short R[8] = {A[0], A[1], A[2], A[3], B[0], B[1], B[2], B[3]};
xmm_R = _mm_load_si128(_mm128i*)R);
이러면 될꺼같은데 말이죠... -
각티슈
그냥 인텔 컴파일러 쓰세요... 그럼 그 안에 TBB라는 병렬화 관련된 STL하고 함수가
들어 있습니다... 힘들게 직접 만들어 써서 버그 생기고 디버그 하는 시간보다
그냥 CPU 만든 회사에서 제작한 검증된 컴파일러를 쓰고 남는 시간에 좋은 시스템을 설계하는게
바람직한것 같습니다... 서투른 최적화는 악의 근원이라고 어느책에 나와 있더군요...