__m128i 변수의 pack안에 값을 개별적으로 입력할 수 있도록 지원해 주고 있다. 세트함수들은 SIMD 명령어보다 사용하기 편리하게 되어있다.

 

__m128i r = _mm_setzero_si128()

: 모두 0으로 초기화 한다.

__m128i r => 0 0 0 0 0 0 0 0

 

__m128i r = _mm_set_epi16(short w7, short w6, short w5, short w4, short w3, short w2, short w1, short w0)

: 16bit short 값 8개를 입력받아 128bit r 값에 세트한다.

__m128i r => w7 w6 w5 w4 w3 w2 w1 w0

 

__m128i r = _mm_set1_epi16(short w)

:16bit short 값 1개를 입력받아 모두 같은 값으로 128bit r 값에 세트한다.

__m128i r => w w w w w w w w

 

__m128i r = _mm_setr_epi16(short w7, short w6, short w5, short w4, short w3, short w2, short w1, short w0)

: 16bit short 값 8개를 입력받아 반대 순서대로 128bit r 값에 세트한다.

__m128i r => w0 w1 w2 w3 w4 w5 w6 w7

 

사용 예제

#include <iostream>
#include <afx.h>
using namespace std;
#include <emmintrin.h>

int main(int argc, char* argv[])
{
	__declspec(align(16)) short R[8] = { 1, 1, 1, 1, 1, 1, 1, 1};

	__m128i xmmR = _mm_setzero_si128();						// 0으로 초기화
	_mm_store_si128((__m128i*)R, xmmR);						//결과 출력
	cout << "Setzero : " << R[7] << ", " << R[6] << ", " << R[5] << ", " << R[4] << ", " << R[3] << ", " << R[2] << ", " << R[1] << ", " << R[0] << endl;

	xmmR = _mm_set_epi16(8,7,6,5,4,3,2,1);					// 순서대로 입력
	_mm_store_si128((__m128i*)R, xmmR);						//결과 출력
	cout << "Set : " << R[7] << ", " << R[6] << ", " << R[5] << ", " << R[4] << ", " << R[3] << ", " << R[2] << ", " << R[1] << ", " << R[0] << endl;

	xmmR = _mm_set1_epi16(9);								// 1개의 값으로 모두 입력
	_mm_store_si128((__m128i*)R, xmmR);						//결과 출력
	cout << "Set1 : " << R[7] << ", " << R[6] << ", " << R[5] << ", " << R[4] << ", " << R[3] << ", " << R[2] << ", " << R[1] << ", " << R[0] << endl;

	xmmR = _mm_setr_epi16(8, 7, 6, 5, 4, 3, 2, 1);			//역순으로 입력
	_mm_store_si128((__m128i*)R, xmmR);						//결과 출력
	cout << "SetR : " << R[7] << ", " << R[6] << ", " << R[5] << ", " << R[4] << ", " << R[3] << ", " << R[2] << ", " << R[1] << ", " << R[0] << endl;

	return 0;
}

실행 결과

'자기개발 > SIMD' 카테고리의 다른 글

SIMD - 비교 연산  (0) 2021.10.12
SIMD - Shift 연산, intrinsic 나눗셈 구현  (0) 2021.10.12
SIMD - Intrinsics 정수의 산술 연산  (0) 2021.10.08
SIMD - Intrinsics 개요  (0) 2021.10.08
SIMD - memcpy구현  (0) 2021.10.08
Posted by pi92

블로그 이미지
pi92

공지사항

Yesterday
Today
Total

달력

 « |  » 2025.7
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

최근에 올라온 글

최근에 달린 댓글

글 보관함