diff --git a/.pic/Lectures/18. Synchronization. Cache coherence/fig_32.jpg b/.pic/Lectures/18. Synchronization. Cache coherence/fig_32.jpg index 2d2508a..b994e85 100644 Binary files a/.pic/Lectures/18. Synchronization. Cache coherence/fig_32.jpg and b/.pic/Lectures/18. Synchronization. Cache coherence/fig_32.jpg differ diff --git a/.pic/Lectures/18. Synchronization. Cache coherence/fig_33.jpg b/.pic/Lectures/18. Synchronization. Cache coherence/fig_33.jpg index 235e218..6699f61 100644 Binary files a/.pic/Lectures/18. Synchronization. Cache coherence/fig_33.jpg and b/.pic/Lectures/18. Synchronization. Cache coherence/fig_33.jpg differ diff --git a/.pic/Lectures/18. Synchronization. Cache coherence/fig_34.jpg b/.pic/Lectures/18. Synchronization. Cache coherence/fig_34.jpg index 4516168..90eb457 100644 Binary files a/.pic/Lectures/18. Synchronization. Cache coherence/fig_34.jpg and b/.pic/Lectures/18. Synchronization. Cache coherence/fig_34.jpg differ diff --git a/.pic/Lectures/18. Synchronization. Cache coherence/fig_35.jpg b/.pic/Lectures/18. Synchronization. Cache coherence/fig_35.jpg index 7d6ec4b..4516168 100644 Binary files a/.pic/Lectures/18. Synchronization. Cache coherence/fig_35.jpg and b/.pic/Lectures/18. Synchronization. Cache coherence/fig_35.jpg differ diff --git a/.pic/Lectures/18. Synchronization. Cache coherence/fig_36.jpg b/.pic/Lectures/18. Synchronization. Cache coherence/fig_36.jpg index ed46123..7d6ec4b 100644 Binary files a/.pic/Lectures/18. Synchronization. Cache coherence/fig_36.jpg and b/.pic/Lectures/18. Synchronization. Cache coherence/fig_36.jpg differ diff --git a/.pic/Lectures/18. Synchronization. Cache coherence/fig_37.jpg b/.pic/Lectures/18. Synchronization. Cache coherence/fig_37.jpg index 5fca5a0..ed46123 100644 Binary files a/.pic/Lectures/18. Synchronization. Cache coherence/fig_37.jpg and b/.pic/Lectures/18. Synchronization. Cache coherence/fig_37.jpg differ diff --git a/.pic/Lectures/18. Synchronization. Cache coherence/fig_38.jpg b/.pic/Lectures/18. Synchronization. Cache coherence/fig_38.jpg new file mode 100644 index 0000000..5fca5a0 Binary files /dev/null and b/.pic/Lectures/18. Synchronization. Cache coherence/fig_38.jpg differ diff --git a/Lectures/18. Synchronization. Cache coherence.md b/Lectures/18. Synchronization. Cache coherence.md index 2432224..8e559a6 100644 --- a/Lectures/18. Synchronization. Cache coherence.md +++ b/Lectures/18. Synchronization. Cache coherence.md @@ -35,7 +35,8 @@ - [Оптимизация MSI: состояние E](#оптимизация-msi-состояние-e) - [MESI: усовершенствованный](#mesi-усовершенствованный) - [Когерентность кэш и ложное совместное использование](#когерентность-кэш-и-ложное-совместное-использование) - - [Основные материалы лекции](#основные-материалы-лекции) + - [Основные материалы лекции](#основные-материалы-лекции) + - [Дополнительные материалы к лекции для саморазвития](#дополнительные-материалы-к-лекции-для-саморазвития) ## Параллелизм уровня потоков @@ -486,12 +487,15 @@ Snoopy кэш отличается от обычного кэша наличие 1) Допустим, ядро 0 сначала загружает по адресу `A` число 2. На шине запрашивается чтение, в кэш попадает запись с состоянием `Valid`. 2) Затем загружает ядро 1 по адресу `A` число 2, теперь там тоже запись `Valid`. 3) Теперь происходит запись числа 3 в память через ядро 0, кэш ядра 1 видит это и делает `Invalidate` данных (обнуляет их). -4) Когда произойдёт очередной `load` на ядре 1, он увидит, что данные находятся в состоянии `Invalidate`. -5) Теперь просто зачитаем обновленные данные из основной памяти. -![../.pic/Lectures/18.%20Synchronization.%20Cache%20coherence/fig_33.jpg](../.pic/Lectures/18.%20Synchronization.%20Cache%20coherence/fig_33.jpg) + ![../.pic/Lectures/18.%20Synchronization.%20Cache%20coherence/fig_33.jpg](../.pic/Lectures/18.%20Synchronization.%20Cache%20coherence/fig_33.jpg) -*Рис. 33. Пример применения протокола `Valid/Invalid` с пояснениями.* + *Рис. 33. Иллюстрация шага 3 в примере протокола `Valid/Invalid`.* +4) Кэш ядра 1 видит транзакцию записи по адресу имеющейся у него ячейки памяти и помечает эту ячейку состоянием `Invalid`. Когда ему потребуются данные из этой ячейки, он загрузит их из основной памяти, вернув состоянию этой ячейки значение `Valid`. + +![../.pic/Lectures/18.%20Synchronization.%20Cache%20coherence/fig_34.jpg](../.pic/Lectures/18.%20Synchronization.%20Cache%20coherence/fig_34.jpg) + +*Рис. 34. Иллюстрация шага 4 в примере протокола `Valid/Invalid`.* Проблемы `VI`: @@ -514,13 +518,13 @@ Snoopy кэш отличается от обычного кэша наличие Если же мы находимся в состоянии `Invalidate` и процессор хочет осуществить запись в какую-либо ячейку памяти, то шина об этом конечно узнает, потому что мы запрашиваем эксклюзивное пользование данными (`BusRdX`), и мы перейдём в состояние `M`. Дальше происходит чтение и запись данных. Если мы находимся в состоянии `M` и кто-то прочитает данные, то мы автоматически перейдём в состояние чтения (`S`). -![../.pic/Lectures/18.%20Synchronization.%20Cache%20coherence/fig_34.jpg](../.pic/Lectures/18.%20Synchronization.%20Cache%20coherence/fig_34.jpg) - -*Рис. 34. `MSI` протокол.* - ![../.pic/Lectures/18.%20Synchronization.%20Cache%20coherence/fig_35.jpg](../.pic/Lectures/18.%20Synchronization.%20Cache%20coherence/fig_35.jpg) -*Рис. 35. Основные действия для данного протокола.* +*Рис. 35. `MSI` протокол.* + +![../.pic/Lectures/18.%20Synchronization.%20Cache%20coherence/fig_36.jpg](../.pic/Lectures/18.%20Synchronization.%20Cache%20coherence/fig_36.jpg) + +*Рис. 36. Основные действия для данного протокола.* - Недостатки `VI`: каждая запись обновляет основную память, и каждая запись требует широковещательной передачи и слежки. - `MSI`: возможность реализации кэша с обратной записью (`writeback`) + удовлетворяет локальную запись. @@ -547,17 +551,17 @@ Snoopy кэш отличается от обычного кэша наличие - `S`: `Shared`. - `I`: `Invalid`. -![../.pic/Lectures/18.%20Synchronization.%20Cache%20coherence/fig_36.jpg](../.pic/Lectures/18.%20Synchronization.%20Cache%20coherence/fig_36.jpg) +![../.pic/Lectures/18.%20Synchronization.%20Cache%20coherence/fig_37.jpg](../.pic/Lectures/18.%20Synchronization.%20Cache%20coherence/fig_37.jpg) -*Рис. 36. Протокол `MESI`: усовершенствованный.* +*Рис. 37. Протокол `MESI`: усовершенствованный.* ### Когерентность кэш и ложное совместное использование Строка кэша содержит более одного слова, и согласованность кэша выполняется на уровне детализации строки. -![../.pic/Lectures/18.%20Synchronization.%20Cache%20coherence/fig_37.jpg](../.pic/Lectures/18.%20Synchronization.%20Cache%20coherence/fig_37.jpg) +![../.pic/Lectures/18.%20Synchronization.%20Cache%20coherence/fig_38.jpg](../.pic/Lectures/18.%20Synchronization.%20Cache%20coherence/fig_38.jpg) -*Рис. 37. Строка кэша.* +*Рис. 38. Строка кэша.* Предположим `P₁` записывает `wordᵢ` и `P₂` записывает `wordₖ` и оба слова имеют один и тот же адрес строки. Что может произойти? diff --git a/Lectures/Presentations b/Lectures/Presentations index 07f0c7e..39ba2ce 160000 --- a/Lectures/Presentations +++ b/Lectures/Presentations @@ -1 +1 @@ -Subproject commit 07f0c7ebd4bdf8725c8c26e1245260bdfdfa5f55 +Subproject commit 39ba2ce06fd17e8e5b9895c41ed405d10ed2f7bd