2010-11-25 4 views
1

는 프리 페치와 코드를 최적화하고 일부 함수 호출하기 전에 프리 페치를 배치 가능 높은 최적화 좋은 C 컴파일러 그것을 가능 :C 컴파일러는 호출과 관련하여 데이터를 프리 페치 할 수 있습니까?

그래서
struct *abc; 
//... 

function_first(&(abc->field1)); 
abc->field2= abc->field3+ abc->field4 + abc->field5 + ...; 
// a lot work on struct fields 
function_second(&(abc->field1)) 

, 컴파일러 최적화 후 코딩 할 수 있습니다 것은 abc 필드와 이동에 대한 프리 페치를하는 그것은 이런 이상 function_first() 통화 :

함수 function_first()clean로 주석 될 수
struct *abc; 
//... 

__prefetch(abc->field2);__prefetch(abc->field5); 
function_first(&(abc->field1)); 
abc->field2= abc->field3+ abc->field4 + abc->field5 + ...; 
// a lot work on struct fields 
function_second(&(abc->field1)) 

(필드 1 이외 ABC 필드에 아무런 부작용이없는) 또는 programm에는 전체 PROG 컴파일 될 수있다 컴파일러가 확인할 수있는 RAM 최적화 (-ipo/Qipo for intel)는 function_first이 수행합니다.

업데이트 : 통화없이 프리 페치는 가능하지만이 질문은 혼합 통화에 대해하고

감사 인출을 수행하는 장점이있다.

답변

1

예, 인텔의 ICC 컴파일러가이 작업을 수행 할 수 있습니다 (*). 실제로 성능에 어떤 차이가 있는지 여부는 논쟁의 여지가 있습니다.

(*) -opt-prefetch=n 스위치를 참조하십시오.

+0

폴은 호출 전에 프리 페치를 이동할 수 있습니까? – osgx

+2

당신은 그것을 시험해보고해야 할 것입니다. 프리 페치는 극소수의 경우를 제외하고는 제한적으로 사용되는 경향이 있습니다. –

+0

이 질문은 호출하기 전에 프리 페치를 이동하는 것에 관한 것입니다. 현재 인텔 컴파일러가 설치되어 있지 않으므로 사용해 볼 수 없습니다. – osgx