Как использовать Intel Prefetch Pragma, когда данные скрыты внутри объекта? - PullRequest
8 голосов
/ 14 сентября 2011

Интел услужливо предоставляет прагму предварительной выборки;например,

#pragma prefetch a
for(i=0; i<m; i++)
  a[i]=b[i]+1;

будет предварительно выбирать a на определенное количество циклов цикла вперед, как определено компилятором.

Но что, если a не массив, а класс с[] переопределено?Если operator[] делает простой доступ к массиву, может ли предварительная выборка все еще использоваться таким образом?

(Предположительно, этот вопрос относится и к std::vectors).

1 Ответ

2 голосов
/ 14 сентября 2011

Один из способов выяснить это - попробовать и посмотреть на сборку. И если что-нибудь еще, просто сравните это с и без прагмы. Однако я не уверен, что прагма prefetch - это то, что вам нужно:

Прагма предварительной выборки поддерживается только процессорами Intel® Itanium®.

http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011/compiler_c/cref_cls/common/cppref_pragma_prefetch_noprefetch.htm

Вы действительно пишете это для Itanium?

В системах x86 / x64 такие простые циклы с последовательным доступом к памяти уже хорошо обрабатываются аппаратным средством предварительной выборки. Так что ручная предварительная выборка может вообще не помочь.

Смотрите пример предварительной выборки: Примеры предварительной выборки?

...