Как общие кэш-памяти используются для многоядерных процессоров Intel?

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

  • В многопроцессорной системе или многоядерном процессоре (Intel Quad Core, Core 2 Duo и т.д.) каждый процессор/процессор процессора имеет собственную кэш-память (кеши данных и программ)?

  • Может ли один процессор/ядро ​​получить доступ к каждой другой кэш-памяти, потому что, если им разрешен доступ к кешированию друг друга, я полагаю, что может быть меньше промахов в кэше, в сценарии, который, если этот кеш процессоров не имеет некоторые данные, но некоторые другие кэш второго процессора могут иметь это, таким образом, избегая чтения из памяти в кеш первого процессора? Действительно ли это предположение верно и верно?

  • Будут ли какие-либо проблемы, позволяющие любому процессору получить доступ к другой кэш-памяти процессора?

Ответ 1

В многопроцессорной системе или многоядерном процессоре (Intel Quad Core, Core 2 Duo и т.д.), Каждый процессор/процессор процессора имеет свой собственный кеш памяти (кэша данных и программ)?

  • Да. Он варьируется в зависимости от точной модели чипа, но наиболее распространенная конструкция для каждого ядра ЦП имеет свои собственные данные L1 и кэши команд. Унифицированный кэш L2 обычно распределяется между всеми ядрами.

Может ли один процессор/ядро ​​получить доступ к каждой другой кэш-памяти, потому что если им разрешен доступ друг к другу, тогда я верю может быть меньше промахов в кэше, в сценарии, если это конкретное кеш процессоров не имеет некоторых данных, но некоторые другие секунды кеш процессоров может иметь это, таким образом, избегая чтения из памяти в кеш первого процессора? Действительно ли это предположение верно и верно?

  1. Нет. Каждый кеш ядра L1 кэша находится на том же кристалле, что и ядро, и к ним не могут обращаться другие ядра. Каждый из ядер подключается к кэшу L2 через общую шину данных.

Будут ли какие-либо проблемы, позволяющие любому процессору получить доступ к другим процессорная кэш-память?

  1. Да - просто нет проводов, соединяющих различные кэши процессора с другими ядрами. Если ядро ​​хочет получить доступ к данным в другом кэше ядра, единственный путь к ним, через который он может это сделать, - это системная шина.

Очень важной связанной проблемой является проблема кэш-когерентности. Рассмотрим следующее: предположим, что одно ядро ​​ЦП имеет конкретную ячейку памяти в своем кеше и записывает ее в эту ячейку памяти. Затем другое ядро ​​считывает эту ячейку памяти. Как вы гарантируете, что второе ядро ​​увидит обновленное значение? Это проблема согласованности кеша. Существует множество решений; см. Wikipedia и др.

Ответ 2

Быстрые ответы 1) Да 2) Нет, но все это может зависеть от того, какой экземпляр/ресурс памяти вы ссылаетесь, данные могут существовать одновременно в нескольких местах. 3) Да.

Для подробного объяснения проблемы вы должны прочитать статью из 9 статей "Что каждый программист должен знать о памяти" Ульриха Дреппера (http://lwn.net/Articles/250967/), вы получите полное представление о проблемах, о которых вы, кажется, интересуетесь в хорошей и доступной детализации.

Ответ 3

Чтобы ответить на ваш вопрос, я знаю, что Core 2 Duo имеет двухуровневую систему кэширования, в которой каждый процессор имеет свой собственный кеш первого уровня, и они используют кеш второго уровня. Это помогает как для синхронизации данных, так и для использования памяти.

Чтобы ответить на ваш второй вопрос, я считаю, что ваше предположение будет правильным. Если бы процессоры имели доступ к кешу друг друга, очевидно, было бы меньше промахов в кеше, так как для процессоров было бы больше данных. Однако рассмотрим общий кэш. В случае с Core 2 Duo, общий кэш позволяет программистам безопасно размещать общеупотребительные переменные в этой среде, чтобы процессоры не имели доступа к своим индивидуальным кэшам первого уровня.

Чтобы ответить на ваш третий вопрос, потенциально может возникнуть проблема с доступом к кэш-памяти других процессоров, которая идет по принципу "Single Write Multiple Read". Мы не можем позволить нескольким процессам одновременно писать в одно и то же место в памяти.

Для получения дополнительной информации о двухъядерном ядре 2 прочтите эту опрятную статью.

http://software.intel.com/en-us/articles/software-techniques-for-shared-cache-multi-core-systems/

Ответ 4

Intel называет технологию совместного использования кеша Intel Smart Cache. В нем есть wiki-страница: https://en.wikipedia.org/wiki/Smart_Cache

Тогда, например, для процессора i5-3210M страница ark имеет поле "Intel Smart Cache: 3 MB".

И Datasheet Volume 1 1.1 "Сведения о функции процессора" говорит:

  • 32-килобайтная инструкция и 32-килобайтный кеш первого уровня (L1) для каждого ядра
  • Общий кеш второго уровня/данных второго уровня (L2) объемом 256 КБ для каждого ядра
  • До 8-Мбайт общей кэширования данных/данных третьего уровня (L3), разделяемых между всеми ядрами