В большинстве случаев инструкции предварительной выборки приносят мало пользы или не приносят никакой пользы, а в некоторых случаях могут даже привести к обратным результатам. Большинство современных процессоров имеют механизм автоматической предварительной выборки, который работает достаточно хорошо, так что добавление программных подсказок предварительной выборки дает мало или даже мешает автоматической предварительной выборке и может фактически снизить производительность.
В некоторых редких случаях, например, при потоковой передаче больших блоков данных, для которых вы выполняете очень мало фактической обработки, вы можете скрыть некоторую задержку с помощью программной предварительной выборки, но очень трудно сделать это правильно - вам нужно начать предварительную выборку за несколько сотен циклов, прежде чем вы собираетесь использовать данные - сделайте это слишком поздно, и вы все равно получите промах кеша, сделайте это слишком рано, и ваши данные могут быть удалены из кэша, прежде чем вы будете готовы его использовать , Часто это ставит предварительную выборку в какую-то несвязанную часть кода, что плохо для модульности и обслуживания программного обеспечения. Что еще хуже, если ваша архитектура изменится (новый ЦП, другая тактовая частота и т. Д.), Так что задержка доступа к DRAM увеличится или уменьшится, вам может потребоваться переместить ваши инструкции предварительной выборки в другую часть кода, чтобы сохранить их эффективность.
В любом случае, если вы чувствуете, что действительно должны использовать предварительную выборку, я рекомендую #ifdefs вокруг любых инструкций предварительной выборки, чтобы вы могли компилировать свой код с предварительной выборкой и без нее и посмотреть, действительно ли она помогает (или мешает) производительности, например,
#ifdef USE_PREFETCH
// prefetch instruction(s)
#endif
В общем, я бы рекомендовал оставить программную предварительную выборку на заднем плане в качестве крайней меры микрооптимизации после того, как вы сделали все более продуктивные и очевидные вещи.