Недавно я читал модели памяти, и я был немного смущен тем, как это сработало.Общие сведения о моделях памяти
Цитирую http://cis.poly.edu/muller/CS623/weakmemory.htm
если процессор записывает новый X записывает новый Y, все остальные процессоры, которые впоследствии выполнить чтение Y, то для чтения X, будет доступ либо новый Y и новый X , старый Y и новый X, или старый X и старый Y: но никакой процессор не получит доступ к новым Y и старым X. Это предположение о сильном заказе было, на один раз, разумно. Однако текущий компьютер рекомендует, чтобы программисты не полагались на память . Это связано с тем, что новые системы управления памятью пытаются изменить порядок доступа к памяти . Систему, разрешенную для , запрашивают память памяти порядка слабозаряженных систем памяти (модели). Чтобы изучить, как может быть использовано переупорядочение для повышения производительности, рассмотрим следующий код ассемблера [2].
Load reg1, A // register1 = contents of memory A
Load reg2, B // register2 = contents of memory B
ADD reg3, reg1, reg2 // register3 = register1 + register2
Store reg3, C // contents of memory C = contents of register3
Если предположить, что расположение B является в настоящее время в кэше и местоположения А не кэшируются, а затем загружая займет больше, чем B. Вместо того, чтобы ждать A, процессор может извлечение B из его кеша, скрытие задержки B: таким образом, CPU может выполнить добавление, как только будет доступно A . Ослабляя сильную модель (последовательная) памяти исполнения (т. Е. Сначала необходимо загрузить A, а затем B), более высокая производительность - . Рассмотрим фрагмент кода ниже, он является частью кода , который может использоваться для создания семафора с прядильной камерой [2].
Вопрос: насколько возможно, что с более слабой моделью памяти может произойти случай, когда процессор может получить доступ к новым Y и старым X. Не записывается ли он в одну и ту же память (RAM) или это работает по-другому? Я предполагаю, что если один процесс изменяет переменную, а другой читает ее после этого, он считывает последнее значение.
Еще одна вещь, о которой я не уверен, заключается в том, какой компонент позволяет переупорядочить доступ к памяти, мое предположение теперь заключается в том, что компилятору разрешено изменять порядок инструкций. Но может ли ЦП также переупорядочить их?
Благодаря