Рассмотрим схематическую архитектуру кэша данных. (Далее следует искусство ASCII.)
--------------------------------------
| CPU core A | CPU core B | |
|------------|------------| Devices |
| Cache A1 | Cache B1 | with DMA |
|-------------------------| |
| Cache 2 | |
|------------------------------------|
| RAM |
--------------------------------------
Предположим, что
- объект затенен на грязной строке кэша A1,
- старая версия того же объекта затеняется на чистой строке кэша 2, и
- новейшая версия того же объекта недавно была записана в RAM через DMA.
Диаграмма:
--------------------------------------
| CPU core A | CPU core B | |
|------------|------------| Devices |
| (dirty) | | with DMA |
|-------------------------| |
| (older, clean) | |
|------------------------------------|
| (newest, via DMA) |
--------------------------------------
Три вопроса, пожалуйста.
Что происходит, если ядро ЦП A пытается загрузить (прочитать) объект?
Что произойдет, если вместо этого ядро ЦП A попытается сохранить (записать) объект?
Произошло бы что-нибудь неочевидное, интересное и / или иное, если бы ядро B выполняло загрузку или сохранение, а не ядро A?
Мои вопросы теоретические. Мои вопросы не относятся к какой-либо конкретной архитектуре ЦП, но вы можете сослаться на x86 или ARM (или даже RISC-V) в своем ответе, если хотите.
Примечания. Если игнорирование отслеживания упростит ваш ответ, вы можете не обращать внимания на отслеживание по своему усмотрению. В качестве альтернативы вы можете изменить проблему, если, по вашему мнению, измененная задача лучше освещает тему. Если для ответа вам нужно написать код, я бы предпочел C / C ++. Насколько мне известно, вам не нужно указывать конкретные флаги протокола MESI или MOESI в своем ответе. , но, вероятно, будет достаточно более простого и менее подробного ответа.
Мотив. Мотив, который я задаю, заключается в том, что я читаю о параллелизме и модели памяти в стандарте C ++. Я бы хотел научиться визуализировать эту модель приблизительно в терминах аппаратных операций, если это возможно.
ОБНОВЛЕНИЕ
Насколько я понимаю, @HadiBrais сообщает, что следующая схематическая архитектура будет более обычной, чем та, которую я нарисовал ранее, особенно если реализован DDIO (см. Его ответ ниже).
--------------------------------------
| CPU core A | CPU core B | Devices |
|------------|------------| with DMA |
| Cache A1 | Cache B1 | |
|------------------------------------|
| Cache 2 |
|------------------------------------|
| RAM |
--------------------------------------