2013-07-14 3 views
5

__m128 변수에 4 개의 SP 값이 있고 최소값을 원하거나 내장 함수가 있습니까? 아니면 순차적 선형 비교 이외의 다른 값이 필요합니까?__m128에서 최소 4 SP 값

오른쪽 내 솔루션은 (입력 __m128 변수가 x 가정하자) 다음 알고 :

x = _mm_min_ps(x, (__m128)_mm_srli_si128((__m128i)x, 4)); 
min = _mm_min_ss(x, (__m128)_mm_srli_si128((__m128i)x, 8))[0]; 

을 아주 끔찍하지만이 작동하고 어떤 (BTW, _mm_srli_si128 같은 있지만, __m128 유형에 대한 있나요?)

답변

5

가없는 단일 명령/고유하지만 두 섞어 두 분 함께 할 수

__m128 _mm_hmin_ps(__m128 v) 
{ 
    v = _mm_min_ps(v, _mm_shuffle_ps(v, v, _MM_SHUFFLE(2, 1, 0, 3))); 
    v = _mm_min_ps(v, _mm_shuffle_ps(v, v, _MM_SHUFFLE(1, 0, 3, 2))); 
    return v; 
} 
,

출력 벡터에는 입력 벡터의 모든 요소 중 min이 포함되며 출력 벡터 전체에 걸쳐 복제됩니다.

+0

이 질문이 맞습니까? 나는이 입력 벡터 ('v [0]'에서'v [3]')로'0.109375 0.096875 0.093750 0.096875'을 테스트했으며, 결과는'0.096875 0.096875 0.093750 0.093750'이다. 복제 한게 무슨 뜻이야? –

+0

죄송합니다 - 나는 정수 정수를 엉망으로 만들었습니다 - 이제 고정되어 테스트되었습니다. 출력 벡터는 입력 벡터의 최소 요소와 동일한 4 개 요소를 모두 갖습니다. –