Являются ли кеш-лайн-пинг-понг и ложные общие?

Для моего бакалавриата я должен оценить общие проблемы в многоядерных системах.

В некоторых книгах я читал о ложном совместном использовании и в других книгах о кеш-лайн-пинг-понге. Конкретные проблемы звучат очень хорошо, так же как эти одни и те же проблемы, но с другими именами? Может ли кто-нибудь дать мне имена книг, которые подробно обсуждают эти темы? (У меня уже есть литература из Дарри Перчатки, Таненбаум,...)

Ответ 1

Резюме:

Ложное совместное использование и кеш-линия ping-ponging связаны, но не одно и то же. Ложное совместное использование может вызвать ping-ponging в кеш-линии, но это не единственная возможная причина, поскольку кеш-линия ping-ponging также может быть вызвана истинным совместным использованием.

Детали:

Ложное совместное использование

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

Cache-line ping-ponging

Cache line ping-ponging - это эффект, при котором линия кеширования передается между несколькими процессорами (или ядрами) в быстрой последовательности. Это может быть вызвано либо ложным или истинным совместным использованием. По сути, если несколько процессоров пытаются читать и записывать данные в одной и той же строке кэша, тогда эту строку кэша, возможно, придется переносить между двумя потоками в быстрой последовательности, и это может привести к значительному снижению производительности (возможно, даже к худшей производительности, чем если бы один поток выполнялся). Ложное совместное использование может затруднить обнаружение этой проблемы, поскольку программист мог попытаться написать приложение, чтобы потоки не использовали данные, не понимая, что данные были сопоставлены с одной и той же строкой кэша. Но ложное совместное использование не является единственной возможной причиной пейнга в кеш-линии. Это также может быть вызвано истинным совместным использованием, когда несколько потоков пытаются читать и записывать одни и те же данные.