2014-04-04 7 views
0

개발자가 캐시를 우회 할 수 있도록하는 인텔 컴파일러 내장 함수가 있습니다. 나는 완전히이 무엇을 감상 할 인정할 수는 없지만캐시에서 데이터/명령을 제어 할 수있는 기술이 있습니까?

http://software.intel.com/sites/products/documentation/doclib/stdxe/2013/composerxe/compiler/fortran-mac/GUID-AF42A867-B796-4D29-8FED-C20193FD87E0.htm

나는 또한 GCC 컴파일러 prefetch 키워드를 가로 질러왔다.

위의 내용을 염두에두고 필자는 위의 내용에 대해 자세히 설명하거나 개발자가 어떤 데이터 (또는 지침)가/아닌지에 대해 자세히 제어 할 수있는 다른 기술을 제공 할 수 있는지 궁금했습니다. CPU 캐시에로드 된?

Intel Intrinsics Guide

가 캐시 퇴거를 방지 메모리에 데이터를 기록 할 일련의 명령은 일반적으로 _mm_stream_...을 지정됩니다

답변

0

이 페이지는 모든 내장 함수에 대한 많은 정보가 포함되어 있습니다. 이름에서 알 수 있듯이 이들은 기본적으로 메모리에 인접 해 있고 가까운 장래에 다시 액세스 할 가능성이없는 대규모 데이터 스트림을 작성하는 응용 프로그램에 이상적입니다. 예를 들어 오디오 버퍼를 믹싱하고 단일 파형 출력을 생성하는 경우이 방법이 효과적입니다.

이러한 명령어를 효과적으로 사용하기위한 열쇠 중 하나는 쓰기 결합을 이용하는 것입니다. 쓰기 위치가 메모리 전체에 흩어져있는 경우,이 지침은 심하게 멈추거나 다른 종류의 메모리 저장 명령보다 나쁠 수 있습니다. 이러한 쓰기는 캐시에 저장되지 않으므로 전체 쓰기 버퍼를 채우지 않으면 기본적으로 작업이 연속 쓰기 작업이되므로 쓰기가 완료 될 때까지 대기가 필요합니다. 인접한 메모리 위치를 작성하는 경우 결합 작성이 적용되며 데이터 쓰기가 훨씬 효율적입니다.

해당 동전의 뒷면이 프리 페치입니다. 프리 페!는 시스템에 메모리 주소를 원하는 레벨의 캐시로 가져 오기 시작하 G로 메모리 읽기가 완료 될 때까지 데이터를 사용할 준비가되었음을 알립니다. 이것은 사용하기가 훨씬 어려우며 캐시 크기, 캐시 라인 크기 및 메모리 읽기가 완료되기 전에 실행할 수있는 명령어 수를 고려한 적절한 "스트라이드"데이터가 필요합니다. 힌팅 매개 변수를 사용하면 L1, L2 또는 L3 캐시에 데이터가 들어갈 것을 제안하거나 "일시적이지 않은"것이므로 한 번만 사용하려고하면 축출해야합니다 다른 캐시 퇴거보다 먼저. 하드웨어는 명시 적으로 프리 페치 지침없이 대부분의 문제에 대해 잘 작동 자신의 프리 페 추론이 있지만 고전 카운터 - 예는 행렬 전치 :

Prefetching examples

프리 페가 매우 제외하고 효율적으로 사용하는 것은 일반적으로 매우 어렵다 이런 특별한 경우. 보다 구체적인 문제 진술이 없으면, 내가 제공 할 수있는 모든 것입니다.

+1

'_mm_stream'은 저속 캐시 (보통 L3)의 절반보다 큰 블록을 쓸 때만 유용합니다. –