Как общие кэш-памяти используются для многоядерных процессоров Intel?
У меня есть несколько вопросов относительно памяти кэшей, используемых в многоядерных процессорах или многопроцессорных системах. (Несмотря на то, что он не имеет прямого отношения к программированию, он имеет много последствий, а один пишет программное обеспечение для многоядерных процессоров/многопроцессорных систем, поэтому спрашивайте здесь!)
-
В многопроцессорной системе или многоядерном процессоре (Intel Quad Core, Core 2 Duo и т.д.) каждый процессор/процессор процессора имеет собственную кэш-память (кеши данных и программ)?
-
Может ли один процессор/ядро получить доступ к каждой другой кэш-памяти, потому что, если им разрешен доступ к кешированию друг друга, я полагаю, что может быть меньше промахов в кэше, в сценарии, который, если этот кеш процессоров не имеет некоторые данные, но некоторые другие кэш второго процессора могут иметь это, таким образом, избегая чтения из памяти в кеш первого процессора? Действительно ли это предположение верно и верно?
-
Будут ли какие-либо проблемы, позволяющие любому процессору получить доступ к другой кэш-памяти процессора?
Ответы
Ответ 1
В многопроцессорной системе или многоядерном процессоре (Intel Quad Core, Core 2 Duo и т.д.), Каждый процессор/процессор процессора имеет свой собственный кеш памяти (кэша данных и программ)?
- Да. Он варьируется в зависимости от точной модели чипа, но наиболее распространенная конструкция для каждого ядра ЦП имеет свои собственные данные L1 и кэши команд. Унифицированный кэш L2 обычно распределяется между всеми ядрами.
Может ли один процессор/ядро получить доступ к каждой другой кэш-памяти, потому что если им разрешен доступ друг к другу, тогда я верю может быть меньше промахов в кэше, в сценарии, если это конкретное кеш процессоров не имеет некоторых данных, но некоторые другие секунды кеш процессоров может иметь это, таким образом, избегая чтения из памяти в кеш первого процессора? Действительно ли это предположение верно и верно?
- Нет. Каждый кеш ядра L1 кэша находится на том же кристалле, что и ядро, и к ним не могут обращаться другие ядра. Каждый из ядер подключается к кэшу L2 через общую шину данных.
Будут ли какие-либо проблемы, позволяющие любому процессору получить доступ к другим процессорная кэш-память?
- Да - просто нет проводов, соединяющих различные кэши процессора с другими ядрами. Если ядро хочет получить доступ к данным в другом кэше ядра, единственный путь к ним, через который он может это сделать, - это системная шина.
Очень важной связанной проблемой является проблема кэш-когерентности. Рассмотрим следующее: предположим, что одно ядро ЦП имеет конкретную ячейку памяти в своем кеше и записывает ее в эту ячейку памяти. Затем другое ядро считывает эту ячейку памяти. Как вы гарантируете, что второе ядро увидит обновленное значение? Это проблема согласованности кеша. Существует множество решений; см. 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), разделяемых между всеми ядрами