8192개 요소를 반복할 때 성능에 미치는 영향
특정 행렬 연산은 행렬 크기, 특히 행 수가 다음과 같을 때 성능 이상을 나타냅니다. 2048의 배수(예: 8192) 수퍼 정렬이라고 하는 이 현상은 최신 CPU의 특정 메모리 관리 방식으로 인해 발생합니다.
제공된 코드 조각은 행렬 res[][]가 행렬 img[에서 계산되는 이 문제를 보여줍니다. ][]. 다양한 행렬 크기, 특히 8191, 8192 및 8193에 대한 성능은 행렬 크기가 8192일 때 상당한 속도 저하를 나타냅니다.
수퍼 정렬 효과
성능 변형은 행렬에서 열 방향으로 반복되는 중첩 루프로 인해 발생하는 메모리에 대한 불균일한 액세스에서 비롯됩니다. img[][]. 이러한 비순차적 액세스 패턴은 순차 메모리 액세스를 통해 더욱 효율적으로 작동하는 최신 CPU의 성능 저하를 초래합니다.
해결 방법: 외부 루프 교환
해결책은 다음에 있습니다. 중첩 루프를 다시 정렬하고 열 단위 반복보다 행 단위 반복을 우선시합니다. 이렇게 하면 메모리 액세스가 순차적이 되어 성능이 크게 향상됩니다.
for(j=1;j<SIZE-1;j++) { for(i=1;i<SIZE-1;i++) { // Code to compute res[j][i] } }
성능 결과
다음 성능 결과는 외부 루프를 교환하여 얻은 향상을 보여줍니다.
Matrix Size | Original Code (s) | Interchanged Loops (s) |
---|---|---|
8191 | 1.499 | 0.376 |
8192 | 2.122 | 0.357 |
8193 | 1.582 | 0.351 |
이 최적화는 차원의 배수인 행렬의 성능 격차를 크게 줄입니다. 2048로 인해 다양한 매트릭스 크기에 걸쳐 일관된 성능을 발휘합니다.
위 내용은 8192 요소를 반복하는 것이 8191 또는 8193보다 훨씬 느린 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!