2012-03-09 2 views
1

linux에서 win32로 코드를 포팅 할 때 __builtin_prefetch() 함수가 사용됩니다.__builtin_prefetch() 함수를 무시하거나 바꾸어야합니까?

그런 다음 해당 비즈니스가 캐시 데이터를 프리 페치합니다. 을 gcc onlinedoc라고 말합니다 : 대상이 데이터 프리 페치를 지원하지 않으면 부작용이 있지만 다른 코드가 생성되지 않고 GCC가 경고를 발행하지 않으면 주소 표현식이 평가됩니다.

실제로 함수가 아무 것도 할 수 없다는 뜻입니까? 그래서 오버 헤드를 고려하지 않으면 함수를 무시할 수 있습니까? 그리고 vs2008에는 비슷한 기능이있어서 대체 할 수 있습니까?

void __builtin_prefetch (const void *addr, ...); 

감사합니다.

답변

0

프리 페칭은 엄격하게 성능 향상을 위해 무시할 수 있습니다. 최신 프로세서는 추측 앞서 예상 사용 (하드웨어 프리 페치)의 메모리와 프리 페치 데이터에 액세스 패턴을 감지 대부분의 시간

http://gcc.gnu.org/projects/prefetch.html

. 프리 페칭의 이유는 CPU가 메모리보다 훨씬 빠르기 때문입니다. 캐시 미스는 DRAM으로 이동하여 데이터를 가져 오는 데 많은 사이클이 소요됩니다. _builtin_prefetch는 소프트웨어 prefetch (컴파일 할 대상 컴퓨터가 지원하는 경우)이며 하드웨어에 대한 힌트 일 뿐이므로 나중에 해당 주소의 데이터가 필요할 수 있으므로 메모리 요청을 처리하고 긴 대기 시간을 숨길 수 있습니다 .

0

정말 필요하지 않다면 제거하십시오. _ 내장 함수 *은 분명히 GCC 컴파일러에만 사용됩니다. 반면에 함수가 실제로 필요한 경우에는 해당 함수로 대체해야합니다.

관련 문제