Почти невозможно найти спецификации для кешей 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 цикла.
Также см. Вики-тег x86 для ссылок на дополнительные данные о производительности и микроархитектуре.