처음에는 결합 루프에서 수행되는 요소별 추가 간의 성능 차이에 관한 질문이 제기되었습니다. 루프 대 개별 루프. 그러나 나중에 이러한 성능 변화를 초래하는 캐시 동작에 대한 통찰력을 찾기 위해 수정되었습니다.
별도의 요소별 추가가 왜 훨씬 더 빠른가요? 결합 루프보다 루프가 더 낫습니까?
추가 분석을 통해 이 동작은 작업에 사용된 4개 포인터의 데이터 정렬 문제로 인해 발생하며 잠재적으로 캐시 뱅크/웨이 충돌이 발생할 수 있다고 생각됩니다. 특히, 배열이 동일한 페이지 라인에 할당되어 각 루프 내의 액세스가 동일한 캐시 방식에 속할 가능성이 높습니다. 이는 어레이가 별도로 할당될 때 가능한 여러 캐시 방식에 걸쳐 액세스를 분산하는 것보다 덜 효율적입니다.
몇 가지 정보를 제공해 주실 수 있나요? 5개 영역으로 설명된 것처럼 다양한 캐시 동작으로 이어지는 세부 사항에 대한 확실한 통찰력을 제공합니다. 그래프?
지역 1: 데이터세트가 너무 작아서 캐시 동작보다는 루핑, 분기 등의 오버헤드가 성능을 좌우합니다.
지역 2: 이전에는 정렬 문제로 인해 발생했지만 추가 분석에 따르면 이 지역의 성능이 저하된 것으로 나타났습니다. 추가 조사가 필요합니다. 캐시 뱅크 충돌은 여전히 요인이 될 수 있습니다.
지역 3: 데이터 크기가 L1 캐시 용량을 초과하여 L1~L2 캐시 대역폭으로 인해 성능 제한이 발생합니다.
지역 4: 단일 루프 버전에서 관찰된 성능 저하는 어레이 정렬로 인해 프로세서의 로드/저장 단위가 발생합니다. 잘못된 앨리어싱은 프로세서가 추측에 따라 로드 작업을 실행하고 동일한 주소에 대해 다른 값을 갖는 두 번째 로드를 발견할 때 발생합니다. 이 경우 프로세서는 추측 로드를 버리고 올바른 값을 다시 로드해야 하므로 성능 저하가 발생합니다.
영역 5: 이 시점에서 데이터 크기는 두 영역의 용량을 초과합니다. L1 및 L2 캐시로 인해 메모리 대역폭으로 인해 성능 제한이 발생합니다.
CPU에 대해 유사한 그래프를 제공하여 CPU/캐시 아키텍처 간의 차이점을 지적하는 것도 흥미로울 수 있습니다.
제공된 그래프는 3.2GHz 속도의 두 Intel Xeon X5482 Harpertown 프로세서에서 수집한 데이터를 나타냅니다. Intel Core i7 870 @ 2.8GHz 및 Intel Core i7 2600K @ 4.4GHz와 같은 다른 아키텍처에 대한 유사한 테스트에서는 특정 성능 값이 다를 수 있지만 비슷한 영역을 나타내는 그래프가 생성됩니다. 이러한 차이는 캐시 크기, 메모리 대역폭 및 기타 아키텍처 기능의 차이로 인해 발생할 수 있습니다.
위 내용은 캐시 동작을 고려할 때 단일 루프보다 별도 루프에서 요소별 추가가 더 빠른 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!