2016-09-27 1 views
0

SSE 명령어/내장 함수, 예를 들어 256 비트 레지스터를 사용할 때 다음 32 바이트 청크에서 프리 페치 (prefetch) 명령을 사용하여 메모리에서 확장 레지스터를로드하는 데 소요되는 시간을 줄일 수있는 사람이 누구인지, 또는 다른 어떤 기술로? 로드 할 데이터가 이미 메모리에 제대로 정렬되어 있다고 가정합니다.SSE 4 메모리로드 최적화

+2

x86은 이미 이것을 할 수 있습니다. 논리적 메모리에서 특정 순서로 정렬 된 항목 집합을 가져 오는 경우이 데이터는 아마도 'mov'이전에 L2 캐시에서 발견 될 것입니다. –

+0

"4" 당신의 제목에서 "for"라는 단어를 속기시겠습니까? SSE4의 [MOVNTDQA] (http://www.felixcloutier.com/x86/MOVNTDQA.html)로드 명령어 또는 SSE4와 구체적으로 관련이있는 명령어에 대해서는 언급하지 않는 것 같습니다. (256b 벡터는 AVX 기능입니다). –

+0

특정 명령 세트를 요구하는 상업적 의미에 대해 여전히 논의하고 있기 때문에 다소 모호했습니다. 그래서, 제 질문은 넓은 레지스터로 메모리 대기 시간을 줄이기위한 일반적인 지침을 묻는 질문에 더 가깝습니다. 나는 분명히해야했다. – lhs

답변

0

x86 CPU 성능에 대한 자세한 내용은 태그 위키를 참조하십시오. 하드웨어 프리 페처는 순차 액세스 패턴에 대한 잠금 기능이 뛰어나므로 소프트웨어 프리 페치 지침이 필요하지 않습니다.

넓은 벡터로드를 수행하는 것은 일반적으로 별개의 정수 레지스터에 압축을 풀 때가 아닙니다. 일단 캐시 라인을 만지면, 그로부터 더 많은로드가 발생하고 L1 캐시에서 레지스터로의 처리량이 일반적으로 문제가되지 않습니다. ALU 명령어를 사용하여 256b로드를 별도의 32 또는 64b 정수로 압축하면 더 많은 명령어가 필요하므로 ALU 처리량에서 병목 현상이 발생할 가능성이 높아집니다.