Во-первых, это правда, правда? Я чувствую , что читает всегда будет быстрее , чем пишет, и этот парень здесь делают некоторые эксперименты , чтобы "доказать" это. Он не объясняет почему, просто упоминает "проблемы кеширования". (и его эксперименты, кажется, не беспокоятся о предварительной загрузке)
Но я не понимаю почему. Если это имеет значение, давайте предположим, что мы говорим об архитектуре Nehalem (например, i7), которая имеет кэш L1, L2 для каждого ядра, а затем общий кеш L3.
Вероятно, это потому, что я не правильно понимаю, как работает чтение и запись, поэтому я напишу свое понимание. Пожалуйста, скажите мне, если что-то не так.
If I read some memory, following steps should happen: (assume all cache misses)
1. Check if already in L1 cache, miss
2. Check if in L2 cache, miss
3. Check if in L3 cache, miss
4. Fetch from memory into (L1?) cache
Не уверен насчет последнего шага. Проникают ли данные в кеши, что означает, что в случае пропадания кеша память сначала считывается в L3/L2/L1, а затем читается оттуда? Или он может "обойти" все кэши, а затем кэширование происходит параллельно для дальнейшего использования. (чтение = доступ ко всем кэшам + выборка из оперативной памяти в кэш + чтение из кэша?)
Then write:
1. All caches have to be checked (read) in this case too
2. If there's a hit, write there and since Nehalem has write through caches,
write to memory immediately and in parallel
3. If all caches miss, write to memory directly?
Опять не уверен насчет последнего шага. Может ли запись быть сделана "в обход" всех кешей, или запись включает в себя всегда сначала чтение в кеш, изменение кешированной копии и возможность аппаратному обеспечению сквозной записи фактически выполнять запись в область памяти в ОЗУ? (запись = чтение всех кэшей + выборка из ОЗУ в кэш + запись в кэш, параллельная запись в ОЗУ ==> запись - это почти расширенный набор чтения?)