Вопрос

Можно ли хорошее компилятор 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 выключатель.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top