자기개발/SIMD
SIMD - 비교 연산
pi92
2021. 10. 12. 09:43
128bit __m128i에 들어있는 packed된 값들을 서로 비교한 겨과가 리턴되는 __m128i 값에 넣어준다.
참인경우 -1, 거짓인경우 0이 출력된다.
- 정수 상등 함수(==)
__m128i xmmR = _mm_cmpeq_epi16(xmmA, xmmB);
- 정수 비교 함수(>)
__m128i xmmR = _mm_cmpgt_epi16(xmmA, xmmB);
- 정수 비교 함수(<)
__m128i xmmR = _mm_cmplt_epi16(xmmA, xmmB);
#include <iostream>
#include <afx.h>
using namespace std;
#include <emmintrin.h>
int main(int argc, char* argv[])
{
__declspec(align(16)) short A[8] = { 1,0,1,0,1,0,1,0 };
__declspec(align(16)) short B[8] = { 1,1,2,1,0,0,0,-1 };
__declspec(align(16)) short R[8] = { 0 };
__m128i xmmA = _mm_load_si128((__m128i*)A);
__m128i xmmB = _mm_load_si128((__m128i*)B);
__m128i xmmR = _mm_cmpeq_epi16(xmmA, xmmB); //Equality 연산 ==
_mm_store_si128((__m128i*)R, xmmR); //결과 출력
cout << "Equality : " << R[7] << ", " << R[6] << ", " << R[5] << ", " << R[4] << ", " << R[3] << ", " << R[2] << ", " << R[1] << ", " << R[0] << endl;
xmmR = _mm_cmpgt_epi16(xmmA, xmmB); //Greater Than 연산 >
_mm_store_si128((__m128i*)R, xmmR); //결과 출력
cout << "Greater Than : " << R[7] << ", " << R[6] << ", " << R[5] << ", " << R[4] << ", " << R[3] << ", " << R[2] << ", " << R[1] << ", " << R[0] << endl;
xmmR = _mm_cmplt_epi16(xmmA, xmmB); //Less 연산 <
_mm_store_si128((__m128i*)R, xmmR); //결과 출력
cout << "Less : " << R[7] << ", " << R[6] << ", " << R[5] << ", " << R[4] << ", " << R[3] << ", " << R[2] << ", " << R[1] << ", " << R[0] << endl;
return 0;
}
실행 결과