Как вы упомянули, состояние M совершенно очевидно бесполезно, поскольку вы никогда не храните измененные данные в своем кеше.
Что касается эксклюзивного состояния: имейте в виду, что в некотором смысле оно «сильнее», чем разделяемое состояние, поскольку в кэше WB оно гарантирует, что запись в эту строку не требует сначала получения права собственности и аннулирования других копий, и вместо этого может писать непосредственно в эту строку, не выходя из локального кеша. Другими словами, переход от E к M прост, в то время как S к M более сложен и требует сначала аннулировать все остальные копии.
С другой стороны, в кэше WT у вас уже есть гарантия, что никто другой не хранит измененную версию строки, и, что более важно, у вас нет возможности выполнять простой переход в локальном кеше (поскольку вы в любом случае придется записывать данные извне), так что на самом деле нет необходимости в эксклюзивном состоянии - вы не получите никакой выгоды от его наличия. Фактически, вы можете фактически проиграть от этого, потому что наличие состояния E вынуждает вас отправлять snoops на любое другое ядро, читающее ту же строку (переход E -> S),
Конечно, когда вы пишете что-то снаружи, вам все равно нужно аннулировать все другие копии, но вам не нужно различать E и S, чтобы сообщить вам, существуют ли они, обычно есть фильтр отслеживания или какой-либо другой список, чтобы сообщить вам какие ядра искать.
person
Leeor
schedule
01.08.2015