2009-11-16 5 views
3

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

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

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

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

+1

Результаты, которые я вижу, следующие. На P4: Использование prefetchnta гарантирует, что производительность линейна с размером вектора, даже когда достигается поведение вне кэша. Использование prefetchnta не ухудшает производительность при небольших размерах. На ядре2: В то время как prefetchnta несколько полезен при больших размерах, линейное масштабирование не сохраняется. Он также снижает производительность при небольших размерах (примерно на 1/3!). Является ли аппаратная предварительная выборка мешающей, или мне нужно сделать что-то особенное с prefetchnta на ядре 2 дуэта? –

+0

Программное обеспечение-предварительная выборка должно быть [настроено для микроархитектуры] (http://www.realworldtech.com/forum/?threadid=132668&curpostid=132676), например. как далеко от предварительной загрузки перед вашими нагрузками. Кроме того, некоторые шаблоны перестают извлекать выгоду из предварительной выборки SW в новых ургах, которые имеют лучшую предварительную выборку HW –

ответ

3

из Intel reference document на Intel 64 и IA-32 архитектуры, проверьте страницу 163 и 77:

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

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

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

1

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

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

1

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

Смежные вопросы