2014-11-25 2 views
2

Протокол MESI (Modified, Exclusive, Shared, Invalid) используется для связи кэшей CPU и обеспечения их использования последним значением для строки кэша. Когда один процессор изменяет значение строки кэша, все остальные процессоры, подписавшиеся на эту строку кэша, будут предупреждены об изменении в строке кэша.Эксплуатационная стоимость протокола MESI?

Однако, во всей литературе, которую я прочитал относительно MESI, я не видел, есть ли какая-либо стоимость исполнения, пока протокол общается? Будет ли это стоить только частью стоимости префикса x86 LOCK? Я довольно уверен, что MESI можно использовать, даже если префикс x86 LOCK нет?

NB Корпорация Intel фактически использует протокол MESIF, где F является дополнительным состоянием «Пересылка».

+0

Предполагается, что протокол когерентности кеша необходим только при неправильной реализации атомной инструкции , И производительность удара сильно зависит от ситуации. Но один очень известный пример повышения производительности протокола когерентности кэша - [false sharing] (http://en.m.wikipedia.org/wiki/False_sharing) – Voo

+0

Это слишком широкое, у вас есть много типов кешей (варьируя по таким параметрам, как инклюзивность, WB/WT, частный/общий и т. д.) и многие типы MESI, иногда даже несколько типов в одном процессоре. О чём вы спрашиваете? Какую альтернативу вы хотите рассматривать как базовую? – Leeor

ответ

0

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

Вот почему плохо написанные приложения, которые бесполезно используют атомные инструкции, отрицательно влияют на всю машину.

+1

Вам нужен протокол согласования кэш-памяти на x86 также, если вы не используете атомарные инструкции. Причина, по которой атомные инструкции дороже, заключается в том, что они должны заблокировать шину. – Voo

+0

@Voo Я уверен, что нет. –

+0

О, да. Простой пример: если вы этого не сделали, ложный обмен не был бы вещью. – Voo

0

Да, протокол MESI (F) используется для всех операций с памятью (т.е. чтения и записи). Представьте себе, что вы что-то написали в кеш (т.е. состояние «M»), и теперь эта строка должна быть выселена. В протоколе говорится, что вам нужно записать его обратно в память. Если протокол не использовался, нам нужно либо всегда писать в память (огромную стоимость полосы пропускания), либо иметь несогласованную память (плохая идея).

То есть, если обмен не существует, протокол MESI все равно будет использоваться, и в этом случае линии будут находиться в состояниях «E», «I» или «M» и не будет использоваться «S» ,

Замечание: помните, что почти все приложения в системе обычно используют некоторый динамический библиотечный код. Где, по вашему мнению, будет существовать код и как его доступ будет управляться?

Теперь, чтобы ответить на ваш вопрос о воздействии на производительность. Да, реализация MESI (f) или любого протокола согласованности будет влиять на производительность, но это воздействие действительно положительно по сравнению с тем случаем, когда не существует протокола согласованности. В этом случае каждому чтению/записи нужно будет перейти в основную память (т. Е. Ваше приложение будет 100-кратным SLOWER).

Итак, нижняя строка: Несмотря на то, что протокол MESI (f) отрицательно влияет на пропускную способность, в целом он оказывает положительное влияние на производительность. Он фактически покупает нам много производительности (и мощности) по сравнению с тем случаем, когда мы не используем протокол когерентности кэш-памяти (т. Е. Кеш)

Смежные вопросы