По мнению Intel, мой кэш должен быть 24-сторонним, хотя его 12-сторонний, как это?

Согласно "Справочному руководству по оптимизации архитектур Intel 64 и IA-32", апрель 2012 г., стр. 2-23

Физические адреса данных, хранящихся в массивах данных LLC, распределяются между срезами кэша с помощью хэш-функции, так что адреса распределяются равномерно. Массив данных в блоке кэша может иметь 4/8/12/16 путей, соответствующих размеру блока 0,5М / 1М / 1,5М / 2М. Однако из-за распределения адресов между блоками кеша с точки зрения программного обеспечения это не выглядит как обычный N-way кеш.

Мой компьютер - это 2-ядерный Sandy Bridge с 3 МБ, 12-полосным ассоциативным кешем LLC. Это, похоже, не согласуется с документацией Intel. Судя по данным, у меня должно быть 24 пути. Я могу себе представить, что с количеством ядер / кусочков кэша что-то происходит, но я не могу понять это. Если у меня 2 ядра и, следовательно, 2 среза кеша по 1,5 МБ на срез, у меня будет 12 путей на срез кеша, согласно Intel, и это не соответствует моим характеристикам процессора. Может кто-нибудь объяснить это мне?

Если бы я хотел удалить целую строку кэша, мне нужно было бы получить доступ к кэшу с шагом 128 или 256 КБ? На самом деле это то, чего я пытаюсь достичь.

Любые предлагаемые чтения очень приветствуются.

2 ответа

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

Таким образом, у вас есть 12 способов на срез, но общая ассоциативность на набор все еще составляет 12 способов.

Если бы вы проверили свою ассоциативность, получив доступ к разным строкам, сопоставленным с одним и тем же набором, вам просто будет сложнее выбрать такие строки (вам нужно будет знать хэш-функцию), но вы все равно будете получать обороты после 12 линий. Однако, если бы вы проигнорировали хэширование и предположили, что строки просто отображаются с помощью их установленных битов, я мог бы выглядеть так, как если бы вы имели более высокую ассоциативность просто потому, что линии будут равномерно распределяться между срезами, так что перебивание займет больше времени. Это не настоящая ассоциативность, но она подходит для некоторых практических целей. Это будет работать, только если вы используете широкий диапазон физической памяти, поскольку верхние биты должны быть изменены, чтобы хэширование оказало какое-либо влияние.

Наличие 2 срезов удваивает количество наборов, а не количество способов на набор. Последнее потребовало бы, чтобы каждый срез проверял свои теги на наличие набора, поэтому полоса пропускания не будет масштабироваться с ядрами (где каждое ядро ​​имеет срез L3).

Фактический дизайн означает, что индекс определяет одну остановку на кольцевой шине, которая должна обрабатывать запрос для одной линии.


Если бы я хотел удалить целую строку кэша, мне нужно было бы получить доступ к кэшу с шагом 128 или 256 КБ? На самом деле это то, чего я пытаюсь достичь.

И не все так просто. В отличие от меньших / более быстрых кэшей, индекс для кэша последнего уровня не является простым диапазоном битов из адреса. Это больше похоже на хеш-функцию всех битов адреса выше смещения в строке кэша, которая уменьшает коллизии, когда большие шаги происходят случайно или когда несколько программ (или экземпляров одной и той же программы) в одной системе используют одинаковое относительное смещение на огромную страницу или любую другую границу.

Функция индексации кэша последнего уровня является одним из секретных компонентов Intel; AFAIK это не было перепроектировано или издано, но я не пошел, ища.

Очевидно, что вы можете использовать большой буфер, чтобы иметь очень высокую вероятность выселения строки, прежде чем вы вернетесь к ней снова, но IDK, если есть хороший способ в противном случае. clflushopt имеет аналогичную стоимость для магазина; необходимость убедиться, что копия строки кэша еще не существует.

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

Другие вопросы по тегам