Возможно ли хорошему компилятору 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
(не имеет побочных эффектов для полей abc, кроме field1), или программа может быть скомпилирована при оптимизации всей программы (-ipo / Qipo для intel), где Компилятор может проверить, что function_first
делает.
ОБНОВЛЕНИЕ: без вызовов возможны предварительные выборки, но этот вопрос касается смешивания вызовов и предварительных выборок
Спасибо.