1

是否有可能启用高度优化的良好 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()调用的位置,如下所示:

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))

该函数function_first()可以注释为clean(对字段1以外的abc字段没有副作用),或者程序可以在整个程序优化中编译(-ipo /Qipo for intel),编译器可以检查,function_first做什么。

更新:没有调用预取是可能的,但这个问题是关于混合调用和预取

谢谢。

4

1 回答 1

1

是的,英特尔的 ICC 编译器可以做到这一点 (*)。不过,它是否真的对性能有任何影响是有争议的。

(*) 请参见-opt-prefetch=n开关。

于 2010-11-25T17:27:53.263 回答