Инструкции предварительной выборки на ARM - PullRequest
3 голосов
/ 17 сентября 2008

Более новые процессоры ARM включают инструкции PLD и PLI.

Я пишу узкие внутренние циклы (в C ++), которые имеют непоследовательный шаблон доступа к памяти, но шаблон, который, естественно, мой код полностью понимает. Я ожидал бы значительного ускорения, если бы мог предварительно выбирать следующую локацию при обработке текущей области памяти, и я ожидал бы, что это будет достаточно быстро, чтобы попытаться оправдать эксперимент!

Я использую новые дорогие компиляторы от ARM, и кажется, что они нигде не включают инструкции PLD, не говоря уже об этом конкретном цикле, который меня волнует.

Как я могу включить явные инструкции предварительной выборки в мой код C ++?

Ответы [ 4 ]

5 голосов
/ 17 сентября 2008

Должны быть некоторые специфичные для компилятора функции. Не существует стандартного способа сделать это для C / C ++. Проверьте ваш компилятор Справочное руководство по компилятору. Для RealView Compiler см. это или это .

1 голос
/ 17 сентября 2008

Если вы пытаетесь извлечь из этих циклов действительно максимальную производительность, то я бы порекомендовал написать всю конструкцию цикла в ассемблере. Вы должны иметь возможность использовать встроенную сборку в зависимости от структур данных, участвующих в вашем цикле. Еще лучше, если вы можете развернуть любую часть вашего цикла (например, части, которые делают доступ не последовательным).

0 голосов
/ 29 апреля 2009

Не исключено, что другие оптимизации, такие как программная конвейеризация и развертывание цикла , могут достичь того же эффекта, что и ваша идея предварительной выборки (скрытие задержки нагрузок путем наложения это с полезными вычислениями), но без дополнительного давления кэша команд, вызванного дополнительными инструкциями. Я бы даже зашел так далеко, что сказал бы, что это чаще всего случается с узкими внутренними циклами, в которых обычно мало инструкций и мало контроля. Ваш компилятор выполняет эти типы традиционных оптимизаций вместо этого. Если это так, возможно, стоит взглянуть на диаграмму конвейера, чтобы разработать более детальную модель затрат на работу вашего процессора и более количественно оценить, поможет ли предварительная выборка.

0 голосов
/ 28 октября 2008

С риском спросить очевидное: вы проверили целевую архитектуру компилятора? Например (утешите меня), если по умолчанию компилятор ориентирован на ARM7, вы никогда не увидите инструкцию PLD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...