2011-09-14 4 views
7

인텔은 유용하게 prefetch pragma를 제공합니다. 컴파일러에 의해 결정되는 예에 대해데이터가 개체 내부에 숨겨져있을 때 intel prefetch pragma를 사용하는 방법?

#pragma prefetch a 
for(i=0; i<m; i++) 
    a[i]=b[i]+1; 

는 앞서 루프 사이클 a 특정 번호를 프리 패치한다.

그러나 a이 배열이 아니지만 [] 인 클래스가 재정의되면 어떻게 될까요? operator[]이 단순한 배열 액세스를 수행하는 경우, 프리 페치는 여전히 이러한 방식으로 사용될 수 있습니까?

(아마도이 ​​질문은 std::vectors에도 적용됩니다).

답변

2

알아내는 한 가지 방법은 어셈블리를보고 시도하는 것입니다. 그리고 다른 것이라면, 프라그 마의 유무에 관계없이 벤치마킹하십시오. 그러나 프리 페치 pragma가 원하는 것인지 확실하지 않습니다.

prefetch pragma는 Intel® Itanium® 프로세서에서만 지원됩니다.

http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011/compiler_c/cref_cls/common/cppref_pragma_prefetch_noprefetch.htm

당신은 정말 아이테니엄을 위해이 글을 쓰는 있습니까?

x86/x64 시스템에서 순차 메모리 액세스와 같은 단순 루프는 이미 하드웨어 프리 페처에 의해 잘 처리됩니다. 따라서 수동 프리 페치는 전혀 도움이되지 않을 수 있습니다.

는 프리 페칭 예를 들어 여기 참조 : 나는 모두의 x86 및 Itanium 용으로 컴파일하고있어 Prefetching Examples?

+0

- 및 (그리드에)는 후자를 사용하여 성능이 우수 걱정 사람을 가정. 하드웨어 프리 페처가하는 일을 지적 해 주셔서 감사합니다. 나는 깨달았다. –

+0

2018 년이 pragma는 인텔 ® MIC 아키텍처 및 인텔 ® 고급 벡터 확장 512 (인텔 ® AVX-512)에만 적용됩니다. – Olsonist

+0

그리고 prefetching은 일반적으로 x86에서는 작동하지만 prefetch pragma에서는 작동하지 않습니다. 대신 -qopt-prefetch 플래그를 사용하십시오. – Olsonist