Откуда процессор знает о последней копии строки кэша в многопроцессорной системе

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

2 ответа

Большинство процессоров (в частности, x86 в наших ноутбуках, десктопах, серверах) имеют некоторую аппаратную часть, обеспечивающую согласованность кэша

Часто существуют некоторые инструкции барьера памяти синхронизации.

Ходят слухи, что некоторые инструкции машин синхронизации могут быть довольно медленными.

На самом деле, последние стандарты C++2011 и C2011 имеют специальные формулировки и атомарные типы данных для их решения, такие как C++ 11 std:: atomic.

На практике вы должны использовать некоторые хорошо зарекомендовавшие себя стандартные библиотеки, такие как pthreads (или C++ 11 std::thread так далее....)

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

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

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

Расслабленная модель согласованности позволяет считывать и записывать данные в разных процессорах по-разному. Для обеспечения более строгих гарантий упорядочения предусмотрены барьерные операции с памятью. Эти операции гарантируют, что некоторые типы обращений к памяти позже в программном порядке для процессора, выполняющего операцию барьера, будут наблюдаться всеми другими процессорами как происходящие после барьера, а определенные типы обращений к памяти (ранее для этого процессора) будут наблюдаться всеми процессорами перед барьером.

Система, использующая модель ослабленной согласованности, может обеспечивать такое же поведение, что и система последовательной модели согласованности, используя барьеры памяти после каждого доступа к памяти. Однако системы, использующие смягченную модель, как правило, не справляются с таким чрезмерным использованием барьеров, поскольку они предназначены для использования ослабленных требований к упорядочению памяти.

Другие вопросы по тегам