Сообщение Re: Memory barrier не могу понять что это от 05.04.2023 0:16
Изменено 05.04.2023 0:19 vsb
Re: Memory barrier не могу понять что это
Здравствуйте, dsalodki, Вы писали:
D>Поясните пожалуйста самым простым способом, я гуглю, но что-то не понятно. Толи это позволяет отменить кеширование переменно, толи ещё что-то
Суть решаемой проблемы:
У нас есть многопроцессорный компьютер с общей памятью. У каждого процессора имеются кеши. Когда несколько процессоров работают с одним адресом памяти, содержимое этой памяти находится в нескольких кешах у каждого процессора. Каждый процессор может обновлять эту память. При этом обновляется кеш у этого процессора и позже будет обновлена сама память. Также процессоры по определённому протоколу синхронизируют кеши между ядрами. Но вообще этот процесс небыстрый.
Иными словами когда одно ядро меняет содержимое оперативной памяти, другие ядра могут это обновление увидеть непонятно когда. Также, что ещё важней — когда меняются несколько разных участков в оперативной памяти, то в каком порядке эти изменения увидят другие ядра — тоже не очевидно.
Барьеры памяти это специальные инструкции для процессора, которые позволяют управлять этим процессом синхронизации.
В разных архитектурах разные гарантии, разные барьеры памяти, разные инструкции, поэтому более детально это можно обсуждать только в привязке к конкретной архитектуре.
Кроме того языки программирования обычно привязаны не к конкретной архитектуре, а к абстрактной модели памяти. А компилятор и рантайм уже обеспечивают, чтобы поведение реальной архитектуры соответствовало этой абстрактной модели памяти.
PS то, что я называю процессорами, в современном оборудовании чаще называется ядрами, но суть не меняется.
D>Поясните пожалуйста самым простым способом, я гуглю, но что-то не понятно. Толи это позволяет отменить кеширование переменно, толи ещё что-то
Суть решаемой проблемы:
У нас есть многопроцессорный компьютер с общей памятью. У каждого процессора имеются кеши. Когда несколько процессоров работают с одним адресом памяти, содержимое этой памяти находится в нескольких кешах у каждого процессора. Каждый процессор может обновлять эту память. При этом обновляется кеш у этого процессора и позже будет обновлена сама память. Также процессоры по определённому протоколу синхронизируют кеши между ядрами. Но вообще этот процесс небыстрый.
Иными словами когда одно ядро меняет содержимое оперативной памяти, другие ядра могут это обновление увидеть непонятно когда. Также, что ещё важней — когда меняются несколько разных участков в оперативной памяти, то в каком порядке эти изменения увидят другие ядра — тоже не очевидно.
Барьеры памяти это специальные инструкции для процессора, которые позволяют управлять этим процессом синхронизации.
В разных архитектурах разные гарантии, разные барьеры памяти, разные инструкции, поэтому более детально это можно обсуждать только в привязке к конкретной архитектуре.
Кроме того языки программирования обычно привязаны не к конкретной архитектуре, а к абстрактной модели памяти. А компилятор и рантайм уже обеспечивают, чтобы поведение реальной архитектуры соответствовало этой абстрактной модели памяти.
PS то, что я называю процессорами, в современном оборудовании чаще называется ядрами, но суть не меняется.
Re: Memory barrier не могу понять что это
Здравствуйте, dsalodki, Вы писали:
D>Поясните пожалуйста самым простым способом, я гуглю, но что-то не понятно. Толи это позволяет отменить кеширование переменно, толи ещё что-то
Суть решаемой проблемы:
У нас есть многопроцессорный компьютер с общей памятью. У каждого процессора имеются кеши. Когда несколько процессоров работают с одним адресом памяти, содержимое этой памяти находится в нескольких кешах у каждого процессора. Каждый процессор может обновлять эту память. При этом обновляется кеш у этого процессора и позже будет обновлена сама память. Также процессоры по определённому протоколу синхронизируют кеши между ядрами. Но вообще этот процесс небыстрый.
Иными словами когда одно ядро меняет содержимое оперативной памяти, другие ядра могут это обновление увидеть непонятно когда. Также, что ещё важней — когда меняются несколько разных участков в оперативной памяти, то в каком порядке эти изменения увидят другие ядра — тоже не очевидно.
Барьеры памяти это специальные инструкции для процессора, которые позволяют управлять этим процессом синхронизации. К примеру остановить работу процессора, пока не будут обновлены кеши у всех остальных процессоров, соответствующие данном адресу памяти.
В разных архитектурах разные гарантии, разные барьеры памяти, разные инструкции, поэтому более детально это можно обсуждать только в привязке к конкретной архитектуре.
Кроме того языки программирования обычно привязаны не к конкретной архитектуре, а к абстрактной модели памяти. А компилятор и рантайм уже обеспечивают, чтобы поведение реальной архитектуры соответствовало этой абстрактной модели памяти.
PS то, что я называю процессорами, в современном оборудовании чаще называется ядрами, но суть не меняется.
D>Поясните пожалуйста самым простым способом, я гуглю, но что-то не понятно. Толи это позволяет отменить кеширование переменно, толи ещё что-то
Суть решаемой проблемы:
У нас есть многопроцессорный компьютер с общей памятью. У каждого процессора имеются кеши. Когда несколько процессоров работают с одним адресом памяти, содержимое этой памяти находится в нескольких кешах у каждого процессора. Каждый процессор может обновлять эту память. При этом обновляется кеш у этого процессора и позже будет обновлена сама память. Также процессоры по определённому протоколу синхронизируют кеши между ядрами. Но вообще этот процесс небыстрый.
Иными словами когда одно ядро меняет содержимое оперативной памяти, другие ядра могут это обновление увидеть непонятно когда. Также, что ещё важней — когда меняются несколько разных участков в оперативной памяти, то в каком порядке эти изменения увидят другие ядра — тоже не очевидно.
Барьеры памяти это специальные инструкции для процессора, которые позволяют управлять этим процессом синхронизации. К примеру остановить работу процессора, пока не будут обновлены кеши у всех остальных процессоров, соответствующие данном адресу памяти.
В разных архитектурах разные гарантии, разные барьеры памяти, разные инструкции, поэтому более детально это можно обсуждать только в привязке к конкретной архитектуре.
Кроме того языки программирования обычно привязаны не к конкретной архитектуре, а к абстрактной модели памяти. А компилятор и рантайм уже обеспечивают, чтобы поведение реальной архитектуры соответствовало этой абстрактной модели памяти.
PS то, что я называю процессорами, в современном оборудовании чаще называется ядрами, но суть не меняется.