Когда CPU сбрасывает значение в буфере хранения в L1 Cache? - PullRequest
0 голосов
/ 27 мая 2018

Ядро A записывает значение x в буфер хранилища, ожидает недопустимого подтверждения и затем сбрасывает x в кэш.Ожидание только одного подтверждения или ожидание всех подтверждений?И как он узнает, сколько подтверждений во всех процессорах?

1 Ответ

0 голосов
/ 28 мая 2018

Мне не ясно, что вы подразумеваете под "неверным подтверждением", но давайте предположим, что вы имеете в виду отслеживание / аннулирование, исходящее из другого ядра, которое запрашивает владение той же строкой.

В этом случаехранилища в буфере хранилища, как правило, могут свободно игнорировать такие аннулирования от других ядер, поскольку хранилища в буфере хранилища еще не видны глобально.Магазин становится глобально видимым только тогда, когда они переходят на L1 в какой-то момент после того, как они вышли на пенсию.В этот момент 1 контроллер кеша сделает RFO (запрос на владение) связанной строки, если ее еще нет в кеше.По сути, в этот момент магазин становится глобально видимым.Контроллеру кэша L1 не нужно знать, сколько других аннулирований находятся в полете, потому что они опосредованы некоторыми компонентами более высокого уровня в системе как часть протокола MESI, и когда они получают линию в состоянии E, онигарантировано, что они являются исключительным владельцем.

Короче говоря, аннулирования из других ядер мало влияют на хранилища в буфере хранилищ 2 , так как они становятся глобально видимыми в одной точке на основеЗапрос РФО.Is is load , которые выполнили эту область с большей вероятностью из-за недопустимой активности на другом ядре, особенно на сильно работающих платформах, таких как x86, которые не допускают видимого переупорядочения нагрузки-нагрузки.Так называемый MOB на x86, например, отвечает за отслеживание того, могут ли недействительные действия нарушать правила упорядочения.

Ответ RFO

Возможно, "acks", о которых вы говорили, это ответы отдругие ядра по запросу ядра записи для получения или обновления его владения линией, чтобы оно могло записывать на нее: т. е. недействительные копии строк в других процессорах и т. д.

Это обычно известно каквыдача RFO, который при успешном завершении оставляет строку в состоянии E в запрашивающем ядре.

Большинство ЦП являются многоуровневыми, с множеством различных агентов, работающих вместе для обеспечения согласованности.На практике это означает, что процессору не нужно ждать до N-1 «подтверждений» от других ядер N-1 в системе N-CPU, а достаточно одного ответа от компонента более высокого уровня, который сам по себеотвечает за отправку и сбор ответов от других процессоров.

Одним из примеров может быть одноядерный многоядерный процессор с частными L1 и L2 и общим L3.Ядро может отправить свой RFO на L3, который может отправить недействительные запросы всем ядрам, дождаться их ответов и затем подтвердить запрос RFO запрашивающему ядру.С другой стороны, L3 может хранить некоторые биты, которые указывают, какие ядра могут иметь копию строки, и тогда ему нужно только отправлять запросы этим ядрам (роль, которую L3 играет в этом случае, иногда называют отслеживаниемfiler).

Так как вся связь между агентами проходит через L3, он может поддерживать что-либо непротиворечивым.В случае системы с несколькими сокетами все усложняется: L3 на локальном ядре может снова получить запрос и передать его на другой сокет, чтобы выполнить там тот же тип аннулирования.Опять же, может существовать концепция фильтра snoop, или могут существовать другие концепции, и поведение может быть даже настраиваемым!

Например, в архитектуре Intel Broadwell Xeon существует полностью четыре различных настраиваемых режима snoop:

Broadwell предлагает четыре различных режима отслеживания, повторное введение Home Snoop с каталогом и Opportunistic Snoop Broadcast (HS с DIR + OSB), ранее доступных на Ivy Bridge, и три режима отслеживания, которые были доступнына Haswell, Early Snoop, Home Snoop и Cluster on Die Mode (COD).Таблица 5 отображает компромиссы между пропускной способностью памяти и задержкой, которые будут варьироваться в зависимости от режима.Большинство рабочих нагрузок найдут, что Home Snoop с каталогом и Opportunistic Snoop Broadcast будут лучшим выбором.

... с различными компромиссами производительности:

Intel Snoop Mode Tradeoffs

Остальная часть этого документа подробно описывает работу различных режимов.

Итак, я думаю, что короткий ответ «это сложно и зависит от детального дизайна и, возможно, даже настраиваемых пользователем настроек».


1 Или потенциально вНекоторое более раннее замечание, поскольку оптимизированная реализация может «заглянуть в будущее» в буфере хранилища и выпустить RFO (так называемые «предварительные выборки RFO») для будущих хранилищ даже до того, как они станут самым старшим хранилищем.

2 Однако недействительность может усложнить предварительные выборки RFO, упомянутые в первой сноске, поскольку это означает, что есть окно, в котором линия может быть «украдена» другим ядром, что делает предварительную выборку RFO бесполезной.У сложной реализации может быть предиктор, который изменяет агрессивность предварительной выборки RFO на основе мониторинга того, происходит ли это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...