是否可以通过高优化启用优秀的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
(对于除field1之外的abc字段没有副作用),或者程序可以在整个程序优化中编译(-ipo / Qipo for intel),编译器可以检查function_first
做什么。
更新:没有电话预取是可能的,但这个问题是关于混合呼叫和预取
感谢。