Где задокументирован кэш памяти L1 процессоров Intel x86? - PullRequest
50 голосов
/ 04 апреля 2009

Я пытаюсь профилировать и оптимизировать алгоритмы, и я хотел бы понять специфическое влияние кэшей на различные процессоры. Для последних процессоров Intel x86 (например, Q9300) очень сложно найти подробную информацию о структуре кэша. В частности, большинство веб-сайтов (включая Intel.com ), которые содержат спецификации постпроцессора, не содержат ссылок на кэш-память первого уровня. Это потому, что кэш L1 не существует или эта информация по какой-то причине считается неважной? Есть ли какие-либо статьи или обсуждения по поводу устранения кэша L1?

[править] После запуска различных тестов и диагностических программ (в основном тех, которые обсуждались в ответах ниже), я пришел к выводу, что мой Q9300, похоже, имеет кэш данных L1 32K. Я до сих пор не нашел четкого объяснения того, почему эту информацию так трудно найти. Моя текущая рабочая теория состоит в том, что детали кэширования L1 теперь рассматриваются Intel как коммерческая тайна.

Ответы [ 6 ]

61 голосов
/ 04 апреля 2009

Почти невозможно найти спецификации для кешей Intel. Когда в прошлом году я вел урок по кешированию, я спросил у друзей из Intel (в группе компиляторов), и они не смогли найти спецификации.

Но подождите !!! Джед , благослови его душу, говорит нам, что в системах Linux вы можете выжать из ядра много информации:

grep . /sys/devices/system/cpu/cpu0/cache/index*/*

Это даст вам ассоциативность, размер набора и кучу другой информации (но не задержки). Например, я узнал, что, хотя AMD рекламирует свой кэш L1 объемом 128 КБ, моя машина AMD имеет разделенный кэш I и D по 64 КБ каждый.


Два предложения, которые сейчас в основном устарели благодаря Джеду:

  • AMD публикует гораздо больше информации о своих кэшах, так что вы можете хотя бы получить некоторую информацию о современном кеше. Например, прошлогодние кэши AMD L1 доставляли два слова за цикл (пик).

  • У инструмента с открытым исходным кодом valgrind есть все виды моделей кэша, и он неоценим для профилирования и понимания поведения кэша. Он поставляется с очень хорошим инструментом визуализации kcachegrind, который является частью KDE SDK.


Например: в третьем квартале 2008 года процессоры AMD K8 / K10 используют 64-байтовые строки кэша с разделением кэша L1I / L1D по 64 КБ каждый. L1D является двухсторонней ассоциативной и эксклюзивной с L2, с задержкой в ​​3 цикла. Кэш-память второго уровня ассоциируется с 16 путями, а задержка составляет около 12 циклов.

Процессоры AMD Bulldozer используют разделенный L1 с 16-килобайтным ассоциативным L1D на кластер (2 на ядро).

Процессоры Intel долгое время сохраняли L1 одинаковым (от Pentium M до Haswell до Skylake, и, вероятно, через много поколений после этого): Разделение 32 КБ каждого I и D кэша, с L1D равным 8 способ ассоциативный. 64-байтовые строки кэша, соответствующие размеру пакетной передачи DDR DRAM. Задержка загрузки составляет ~ 4 цикла.

Также см. Вики-тег для ссылок на дополнительные данные о производительности и микроархитектуре.

26 голосов
/ 03 ноября 2013

В этом руководстве Intel: Справочное руководство по оптимизации архитектур Intel® 64 и IA-32 содержит подробное описание вопросов, связанных с кэшем.

enter image description here

Страница 46, Раздел 2.2.5.1 Справочное руководство по оптимизации архитектур Intel® 64 и IA-32

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

ОБНОВЛЕНИЕ I: Hazwell увеличивает производительность загрузки кэша в 2 раза, с Внутри Tock; Архитектура Haswell

Если были какие-либо сомнения относительно того, насколько важно максимально эффективно использовать кэш, эта презентация от Cliff Click, ранее принадлежавшей Azul, должна рассеять любые сомнения. По его словам, «память - это новый диск!».

Haswell’s URS (Unified Reservation Station)

ОБНОВЛЕНИЕ II: значительно улучшены характеристики производительности кеша SkyLake.

SkyLake Cache Specifications

8 голосов
/ 04 апреля 2009

Я провел еще несколько расследований. В ETH Zurich есть группа, которая создала инструмент оценки производительности памяти , который мог бы получить информацию о размере как минимум (и, возможно, также и ассоциативности) кэшей L1 и L2. Программа работает, пробуя разные шаблоны чтения экспериментально и измеряя полученную пропускную способность. Упрощенная версия была использована для популярного учебника Брайанта и О'Халларона .

8 голосов
/ 04 апреля 2009

Вы смотрите на потребительские спецификации, а не спецификации разработчика. Вот документация, которую вы хотите. Размеры кэша зависят от подмоделей семейства процессоров, поэтому их обычно нет в руководствах по разработке IA-32, но вы легко можете найти их в NewEgg и т. П.

Редактировать: Более конкретно: глава 10 тома 3А (Руководство по системному программированию), глава 7 Справочного руководства по оптимизации и, возможно, что-то из руководства по кэшированию страниц TLB, хотя я предполагаю, что дальше от L1, чем вы заботитесь.

2 голосов
/ 04 апреля 2009

Справочная информация оказывает значительное влияние на производительность некоторых алгоритмов; Размер и скорость кэш-памяти L1, L2 (и на более новых процессорах L3), очевидно, играют большую роль в этом. Матричное умножение является одним из таких алгоритмов.

2 голосов
/ 04 апреля 2009

L1 кеши существуют на этих платформах. Это почти наверняка останется верным до тех пор, пока скорости памяти и внешней шины не превысят скорость процессора, что, скорее всего, еще далеко.

В Windows вы можете использовать GetLogicalProcessorInformation , чтобы получить некоторый уровень информации о кеше (размер, размер строки, ассоциативность и т. Д.). Версия Ex на Win7 даст еще больше данных, например, какие ядра совместно используют какой кеш. CpuZ также предоставляет эту информацию.

...