Can C Compiler Prefetch Data по вызову?
-
28-09-2019 - |
Вопрос
Можно ли хорошее компилятор 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
делать.
Обновление: без звонков возможны предварительные прифицы, но этот вопрос о смешивании звонков и предпринимателей
Спасибо.
Решение
Да, компилятор ICC Intel может сделать это (*). Это спонтируемо, действительно ли это имеет значение для производительности.
(*) Увидеть -ПТ-префектура = N выключатель.