2013-02-12 1 views
5

왜 SSE/AVX 용으로 정렬 된 메모리가 필요합니까?SSE 벡터화와 메모리 정렬 간의 관계

내가 자주 얻는 대답 중 하나는 정렬되지 않은 메모리로드보다 훨씬 빠른 메모리로드입니다. 그렇다면 왜 정렬 된 메모리로드가 정렬되지 않은 메모리로드보다 훨씬 빠릅니까?

답변

9

SSE (또는 x86)에만 국한되지 않습니다. 대부분의 아키텍처에서로드 및 저장은 자연스럽게 정렬되어야합니다. 그렇지 않은 경우 (a) 예외를 생성하거나 (b) 정렬되지 않은로드/저장을 투명하게 처리하기 위해 두 개 이상의 사이클과 일부 수정을 필요로합니다. x86 (b)는 데이터 유형 < 16 바이트에 대해 true이지만 잘못 정렬 된 데이터를 처리 할 수있는로드/저장 명령어의 정렬되지 않은 버전을 명시 적으로 사용하지 않으면 SSE 데이터 유형에 대해 (a)가 true입니다.

정렬에 관계없이 이러한 SSE로드/저장 명령어의 정렬되지 않은 버전을 사용하는 것이 이상 할 것입니다. 답은 일반적으로 위의 (b)에 따라 일반적으로 동작하는 것처럼 이러한 명령어는 일반적으로 정렬 된 카운터보다 훨씬 느리므로 페널티가 훨씬 더 작은 코어 i7과 같은 최신 Intel CPU를 제외하고는 일반적으로 2 배 이상 느리게 만듭니다. ,하지만 중요하지 않습니다.

+2

일반적으로 정렬되지 않은 액세스가 일반적으로 빠른 최신 코어에서도 페이지 교차 액세스는 여전히 느립니다. 버퍼가 충분히 크고 잘못 정렬되면 페이지 교차가 발생합니다. –

+1

true이고로드가 잘못 정렬되어 캐시 라인 경계를 넘으면 캐시 풋 프린트가 커질 수 있으며 성능에 부정적인 영향을 줄 수 있습니다. –

+1

페이지 건너는 것은 더욱 악합니다 ... – Mysticial