잘못된 데이터 종속성이 Intel CPU의 Popcount 성능에 영향을 미침
문제:
popcount에 대한 32비트 및 64비트 루프 카운터 사용 간의 성능 편차 Intel CPU에서의 작업. 64비트 카운터를 사용할 때 성능이 50% 떨어졌습니다. 처음에는 컴파일러 버그로 인해 발생했습니다.
설명: 잘못된 데이터 종속성
Intel CPU에는 잘못된 종속성이 있습니다. 이는 긴밀한 루프의 여러 반복에 영향을 미치는 popcnt 명령어의 대상 레지스터에 있습니다. 이 종속성은 대상 레지스터를 사용할 수 있을 때까지 명령을 지연시킵니다. 이 종속성의 영향을 받는 명령어 수는 루프의 위치에 따라 달라지며 결과적으로 성능 변화가 발생합니다.
종속성의 결과:
컴파일러 동작:
GCC나 Visual Studio 모두 이 잘못된 종속성을 인식하지 못하므로 레지스터 할당에 따라 예측할 수 없는 성능이 발생합니다. Clang 및 ICC와 같은 다른 컴파일러에도 이러한 지식이 부족합니다.
AMD 성능:
AMD 프로세서는 이러한 잘못된 종속성을 갖지 않는 것으로 나타나 더 높은 성능에 기여합니다. 팝카운트의 성능
완화:
위 내용은 잘못된 데이터 종속성으로 인해 Intel CPU에서 64비트 Popcount가 32비트보다 느린 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!