행렬 크기가 전치 성능에 미치는 영향
관찰하신 현상, 즉 513x513 행렬에 비해 512x512 행렬의 전치가 느린 현상은 그 원인입니다. 캐시하다
캐시 구조 및 액세스
캐시는 자주 액세스하는 데이터를 프로세서 가까이에 저장하여 메모리 집약적인 작업의 성능을 향상시키는 데 도움이 되는 메모리 구조입니다. 이는 데이터를 보유하는 여러 줄을 포함하는 세트로 구성됩니다. 각 캐시 라인의 크기는 수 바이트이며 캐시 세트에는 여러 라인이 포함될 수 있습니다.
메모리 주소에 액세스하면 캐시는 해당 주소에 대한 데이터가 해당 주소의 라인에 있는지 확인합니다. 해당 세트. 그렇다면 캐시 적중이 발생하고 데이터가 빠르게 검색됩니다. 그렇지 않은 경우 캐시 미스가 발생하고 주 메모리에서 데이터를 가져와야 하므로 속도가 훨씬 느려집니다.
Critical Stride 및 Cache Misses
행렬에서 중요한 보폭은 연속 패턴으로 액세스되는 요소 사이의 거리입니다. 귀하의 경우 중요한 보폭은 행렬의 단일 행에 있는 요소 사이의 거리입니다. 스트라이드가 캐시 라인 크기와 일치하거나 그 배수인 경우 캐시 누락 및 성능 저하로 이어질 수 있습니다.
행렬 전치 및 임계 스트라이드
행렬 전치 코드를 사용하면 대각선을 따라 요소가 교체됩니다. 512x512 행렬의 경우 각 행의 요소는 캐시 라인 크기와 동일한 512바이트의 스트라이드로 액세스됩니다. 이로 인해 수많은 캐시 누락과 성능 저하가 발생합니다.
513x513이 더 빠른 이유
513x513 매트릭스의 경우 중요한 보폭은 더 이상 다음의 배수가 아닙니다. 캐시 라인 크기. 각 행의 요소는 513바이트의 스트라이드로 액세스되므로 서로 다른 캐시 라인에 속하게 됩니다. 이렇게 하면 캐시 누락 횟수가 줄어들고 성능이 향상됩니다.
실용적 의미
캐싱에 대한 중요한 진전의 영향을 이해하는 것은 메모리 집약적인 작업을 최적화하는 데 중요합니다. 귀하의 경우, 임계 스트라이드의 배수를 피하기 위해 행렬 크기를 조정하면 조옮김 성능이 크게 향상될 수 있습니다.
위 내용은 513x513 행렬을 512x512 행렬보다 빠르게 전치하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!