Предварительная выборка для Intel Core 2 Duo - PullRequest
4 голосов
/ 16 ноября 2009

Кто-нибудь имел опыт использования инструкций предварительной выборки для процессора Core 2 Duo?

Я успешно использовал (стандартный?) Набор предварительной выборки (prefetchnta, prefetcht1 и т. Д.) Для серии компьютеров P4, но при запуске кода на Core 2 Duo кажется, что * Инструкции 1005 * ничего не делают, а инструкция prefetchnta менее эффективна.

Моими критериями для оценки производительности являются результаты синхронизации для операции вектор-вектор BLAS 1 (axpy), когда размер вектора достаточно велик для поведения вне кэша.

Ввели ли Intel новые инструкции по предварительной выборке?

Ответы [ 3 ]

4 голосов
/ 16 ноября 2009

Из справочного документа Intel на архитектурах Intel 64 и IA-32, посмотрите страницы 163 и 77:

процессоры Pentium 4 и Intel Xeon на основе Intel NetBurst микроархитектура представила аппаратное обеспечение предварительная загрузка в дополнение к программному обеспечению упреждающая выборка. Аппаратный prefetcher работает прозрачно для получения данных и потоки команд из памяти не требуя программиста Вмешательство. последующее микроархитектуры продолжают улучшаться и добавить функции к оборудованию Механизмы предварительной выборки. Ранее реализации оборудования Механизмы предварительной загрузки фокусируются на предварительная выборка данных и инструкций от память до L2; более свежий реализации обеспечивают дополнительные функции предварительной выборки данных из L2 в L1. В Intel NetBurst микроархитектура, оборудование Prefetcher может отслеживать 8 независимых потоков.

Процессор Pentium M также обеспечивает аппаратный prefetcher для данных. Оно может отслеживать 12 отдельных потоков в прямое направление и 4 потока в обратное направление. Процессор Инструкция PREFETCHNTA также получает 64 байта в данные первого уровня кэшировать без загрязнения кэш второго уровня.

Intel Core Solo и Intel Core Duo процессоры обеспечивают более продвинутые аппаратные предварительные выборки для данных, чем Процессоры Pentium M. Ключевые отличия приведены в таблице 2-10.

1 голос
/ 10 февраля 2012

Я пробовал это один раз в узком цикле. Я пытался оптимизировать, чтобы загрузить 4 двойных и выполнить около 15 операций с плавающей запятой за цикл. Я обнаружил, что для положительного эффекта в дуэте с ядром 2 необходимо, чтобы предварительная выборка была установлена ​​как минимум на 16 циклов в коде, тогда как для более старых процессоров было достаточно 4 циклов вперед.

1 голос
/ 18 ноября 2009

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

В этом вопросе здесь задается вопрос, как определить размер строки предварительной выборки в кэше.

...