2012-12-13 2 views
0

AVX 사용 설명서를보고 있었지만 32 비트 정수 값에 대한로드, 저장 및 치환 연산이 있지만 최소값 또는 최대 값을 결정하는 것과 같은 다른 연산이나 셔플 연산은 수레와 복식에만 제공됩니다.AVX를 사용하는 부호있는/부호없는 정수의 최소 수

32 비트 정수에 대해 이러한 연산을 사용하려면 부동 소수점 형으로 변환 한 다음 유형 변환하거나 누락 된 다른 명령어가 필요합니까?

또한 셔플 마스크는 32 비트 정수에서 사용하려면 부동 소수점과 동일하게 유지됩니까?

답변

2

32B 벡터에 대한 정수 연산의 대부분은 AVX2 확장에 있습니다 (초기 AVX 확장은 거의 전적으로 부동 소수점 연산입니다). 인텔의 가장 최신 AVX Programming Reference에는 완벽한 세부 사항이 있습니다. 인텔의 blog post에서 세부 사항을 발표 할 수도 있습니다.

불행히도 부동 소수점 데이터로 해석 될 때 상당수의 정수가 NaN 값에 매핑되고 NaN 비교에 대한 의미가 적용되지 않기 때문에 부동 소수점 min 또는 max 연산을 사용하여 정수 데이터에 대한 연산을 시뮬레이트 할 수 없습니다 정수 비교를 위해서 당신이 원하는 것을해라. (부동 소수점 인코딩은 부호 크기이기 때문에 음수 값의 순서는 "반대로", +0와 -0는 같은 값을 비교한다.).

+1

인텔은 128 비트 정수 SSE 작업을 (3 피연산자 인코딩을 사용하여) 128 비트 AVX 명령으로 옮겼지만 그렇지 않은 경우 남겨 둡니다. 유일한 256 비트 정수 연산은 float 변환 <->입니다. AVX2는 좋은 물건이 나오는 곳입니다. –

+0

@Stephen : 타입 캐스팅이 작동하지 않는 이유, 즉 정수가 NaN에 매핑되는시기 또는 음수 값의 순서가 예약되는 이유를 자세히 설명해 주시겠습니까? – user1715122

+0

@ user1715122 스티븐은 그것을 잘못 읽고 생각하고 비트 패턴을 재 해석하려는 의도가 있다고 생각합니다. 보통 타입 캐스트를 할 때 문제는 a) 조건부 이동보다 느리고 속도가 느리며 b) 정밀도가 떨어지는 경우 '정수 - 부동 -> 정수형'이 반드시 왕복하는 것은 아닙니다. –