MS Visual Studio에서 SSE2 명령 세트로 작업하고 있습니다. 나는 그것을 16 비트 데이터로 계산할 때 사용하고있다.효율적으로 128 비트 상수를 정의하는 방법은 무엇입니까?
SSE 레지스터에로드 된 8 개의 값이 있다고 가정합니다. 모든 항목에 상수 (예 : 42
)를 추가하고 싶습니다. 다음은 내 코드를 어떻게 보이게할까요?
__m128i values; // 8 values, 16 bits each
const __m128i my_const_42 = ???; // What should i write here?
values = _mm_add_epi16(values, my_const_2); // Add 42 to the 8 values
어떻게 상수를 정의 할 수 있습니까? 다음 두 가지 방법이 효과가 있지만 비효율적이고 다른 것은 못생긴 것입니다.
my_const_42 = _mm_set_epi16(42, 42, 42, 42, 42, 42, 42, 42)
- 컴파일러는 "구축"8 개 명령을 생성하는 일정my_const_42 = {42, 0, 42, 0, 42, 0, 42, 0, 42, 0, 42, 0, 42, 0, 42, 0}
- 무슨 일이 일어나고 있는지 이해하기 어려운;42
을 예 :-42
는
보다 편리하게 128 비트 정수를 표현할 수있는 방법이 있나요 사소한 아닌가요?
두 번째 방법의 매크로를 사용하는 것이 좋습니다. – valdo