Как руководство по оптимизации, так и таблица семейства процессоров (раздел 2.4.2) упоминает, что кэш данных L1 является 8-сторонним ассоциативным. Другой источник - InstLatx64
, который предоставляет cpuid
дампы для многих процессоров, включая процессоры Ice Lake. . Возьмем, к примеру, дамп для i7-1065G7.
CPUID 00000004: 1C004121-02C0003F-0000003F-00000000 [SL 00]
Информацию о кэше можно найти в cpuid
листе 0x4. Том 2 Intel SDM обсуждает, как декодировать эти байты. Биты 31–22 EBX (второй слева) представляют количество путей минус один. Эти биты в двоичном формате равны 1011, что соответствует 11 в десятичном формате. Итак, cpuid
говорит, что есть 12 способов. Другая информация, которую мы можем получить отсюда, заключается в том, что размер кэша данных L1 составляет 48 КБ, с размером строки кэша 64 байта и использует простую схему адресации. Таким образом, на основе информации cpuid
биты 11-6 адреса представляют индекс набора кэш-памяти.
Так какой из них правильный? Руководство по оптимизации может быть неправильным (и это будет не в первый раз), но также может быть ошибочный дамп cpuid
(и это тоже будет не в первый раз). Что ж, оба могут ошибаться, но исторически это гораздо менее вероятно. Другие примеры расхождений между руководством и информацией cpuid
обсуждаются здесь, Итак, мы знаем, что ошибки существуют в обоих источниках. Более того, я не знаю ни одного другого источника Intel, который упоминал бы количество способов в L1D. Конечно, источники, не принадлежащие Intel, тоже могут ошибаться.
Наличие 8 способов с 96 наборами приведет к необычному дизайну и вряд ли произойдет без простого упоминания одного числа в руководстве по оптимизации (хотя это не обязательно означает, что в кэше должно быть 12 способов). Это само по себе увеличивает вероятность того, что руководство здесь окажется неправильным.
К счастью, Intel документирует ошибки реализации своих процессоров в документах обновления спецификаций. Мы можем свериться с документом об обновлении спецификаций для процессоров Ice Lake, который вы можете найти здесь. Там задокументированы две cpuid
ошибки:
Неточная информация о CPUID TLB
Я уже обсуждал эту проблему в своем ответе на Понимание TLB из результатов CPUID на Intel. Вторая ошибка:
Информация о кэше L2 CPUID может быть неточной
Это не имеет отношения к вашему вопросу.
Тот факт, что в документе об обновлении спецификации упоминаются некоторые cpuid
ошибки, убедительно свидетельствует о том, что информация из cpuid
листа 0x4 была подтверждена Intel и является точной. Так что руководство по оптимизации (и таблица данных), вероятно, неверны в этом случае.
person
Hadi Brais
schedule
20.01.2020