是否有可能启用高度优化的良好 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
做什么。
更新:没有调用预取是可能的,但这个问题是关于混合调用和预取
谢谢。