Предварительная выборка для Intel Core 2 Duo
У кого-нибудь есть опыт использования инструкций предварительной выборки для процессора Core 2 Duo?
Я успешно использовал набор стандартной выборки (prefetchnta
, prefetcht1
и т.д.) для серии P4-машин, но при запуске кода на Core 2 Duo кажется, что prefetcht(i)
ничего не делают и что команда prefetchnta
менее эффективна.
Мои критерии оценки производительности - это временные результаты для векторной векторной операции BLAS 1 (axpy), когда размер вектора достаточно велик для поведения вне кэша.
Установили ли Intel новые инструкции по предварительной выборке?
Ответы
Ответ 1
Из справочного документа Intel в архитектуре Intel 64 и IA-32, посмотрите страницы 163 и 77:
Процессоры Pentium 4 и Intel Xeon на базе Intel NetBurst микроархитектура предварительная выборка в дополнение к программному обеспечению упреждающая выборка. Предварительная подготовка оборудования работает прозрачно, чтобы получать данные и потоки команд из памяти без необходимости программирования вмешательство. последующее микроархитектуры продолжают улучшаться и добавить функции к оборудованию механизмы предварительной выборки. Ранее реализации аппаратных средств механизмы предварительной выборки сосредоточены на предварительная выборка данных и инструкций из память до L2; более свежий реализации функции для предварительной выборки данных из L2 в L1. В Intel NetBurst микроархитектура, аппаратное обеспечение prefetcher может отслеживать 8 независимых потоков.
Процессор Pentium M также обеспечивает аппаратный предварительный выборщик для данных. Оно может отслеживать 12 отдельных потоков в вперед и 4 потока в назад. Процессоры Инструкция PREFETCHNTA также выбирает 64-байты в данные первого уровня кеш без загрязнения кеш второго уровня.
Intel Core Solo и Intel Core Duo процессоры обеспечивают более продвинутые аппаратные предварительные данные для данных, чем Процессоры Pentium M. Основные отличия приведены в таблице 2-10.
Ответ 2
Я не знаю, может ли это быть проблемой с вашим кодом, но учтите, что размер строки кеша (который определяет размер шага для использования с инструкциями предварительной выборки) может различаться между разными процессорами. Поэтому, если вы используете код, который оптимизирован в предположении о разном размере строки кеша на CPU, где это предположение не выполняется, оно связано с ухудшением производительности.
Здесь задан вопрос о том, как определить размер строки кэша предварительной выборки.
Ответ 3
Я пробовал это однажды на жестком цикле, я пытался оптимизировать загрузку 4-х парных и делал около 15 операций с плавающей запятой для каждого цикла.
Я обнаружил, что, чтобы положительно повлиять на ядро 2-го дуэта, предварительная выборка должна была быть установлена по крайней мере на 16 петель впереди в коде, где для более старых процессоров 4 петли впереди было достаточно.