2015-01-06 4 views
2

AVX (2)의 내장 함수 _mm256_xor_si256_mm256_xor_ps 사이의 실제 차이를 찾으려고합니다._mm256_xor_si256()과 _mm256_xor_ps()의 차이점

그들은 각각 인텔의 지시에 매핑

  • vpxor의 YMM, YMM, YMM
  • vxorps YMM, YMM, YMM 인텔에 의해 정의된다

:

dst[255:0] := (a[255:0] XOR b[255:0]) 
dst[MAX:256] := 0 

FOR j := 0 to 7 
    i := j*32 
    dst[i+31:i] := a[i+31:i] XOR b[i+31:i] 
ENDFOR 
dst[MAX:256] := 0 

솔직히, 나는 그 효과에 차이가 보이지 않습니까? 둘 다 xor 또는 256 비트입니다. 그러나 후자는 AVX 및 AVX2에서 사용할 수 있습니다. AVX2는 AVX2에서만 처음입니다. 더 낮은 호환성을 가진 이유는 무엇입니까?

답변

7

효과에는 차이가 없으며 둘 다 256 비트의 비트 XOR을 수행합니다. 그러나 차이점이 없다는 것을 의미하는 것은 아니며 차이점은 덜 눈에.니다.

vxorps Haswell에서는 포트 5로만 이동하므로 처리량은 1이고 처리량은 vpxor이며 포트 0, 1 및 5로 갈 수 있으며 처리량은 3 회입니다. 또한 부동 소수점 도메인에서 생성 된 결과가 정수 도메인에서 실행되는 명령어에 의해 사용되거나 그 반대의 경우도 우회 지연이 있습니다. 따라서 "잘못된"명령어를 사용하면 약간의 대기 시간이 발생할 수 있습니다. 따라서 vxorps이 일부 상황에서 더 나을 수 있습니다 (그러나 "항상 부동을 사용할 때"와 같이 간단하지는 않습니다).

AMD 굴삭기가 그런 점에서 어떤 조치를 취해야할지 모르겠지만 Bulldozer와 Piledriver 및 Steamroller는 바이 패스 지연이 있으므로 굴삭기에서도 기대합니다.

+1

Haswell에서 vpxor와 vxorps간에 우회 지연이 발생하지 않을 수도 있습니다. Agner는 Haswell에서 "ORPS와 같은 부동 소수점 부울 명령어가 정수 데이터와 함께 사용되는 경우"지연이 없다는 것을 발견했습니다. –