32비트 루프 카운터를 64비트로 교체하면 Intel CPU에서 _mm_popcnt_u64를 사용할 때 상당한 성능 편차가 발생할 수 있습니다
이 문제는 다음과 같은 이유로 발생합니다. 잘못된 데이터 종속성, 특히
_mm_popcnt_u64 명령어에는 대상 레지스터에 대한 잘못된 종속성이 있어 실행되기 전에 대상 레지스터가 준비될 때까지 기다리게 됩니다. 이러한 종속성은 루프 반복을 통해 전달될 수 있으므로 프로세서가 다양한 루프 반복을 병렬화하기 어렵게 만듭니다.
루프 변수 유형(unsigned 대 uint64_t)의 선택은 레지스터 할당자에 영향을 미칩니다
레지스터를 변수에 할당하여 레지스터 할당 및 잘못된 종속성 체인에 차이가 발생합니다. _mm_popcnt_u64 지침.
크기 변수 앞에 정적 키워드를 삽입
레지스터 할당을 변경하고 잘못된 종속성 체인을 끊을 수 있습니다. 경우에 따라 이는 대상 레지스터에 대한 교차 반복 종속성을 제거하여 성능 향상으로 이어질 수 있습니다.
이 문제를 완화하고 일관된 성능을 달성하려면:
위 내용은 루프 카운터의 비트 폭을 변경하면 Intel CPU의 _mm_popcnt_u64 성능에 영향을 미치는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!