2011-01-04 3 views
5

Недавно я читал модели памяти, и я был немного смущен тем, как это сработало.Общие сведения о моделях памяти

Цитирую 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) или это работает по-другому? Я предполагаю, что если один процесс изменяет переменную, а другой читает ее после этого, он считывает последнее значение.

Еще одна вещь, о которой я не уверен, заключается в том, какой компонент позволяет переупорядочить доступ к памяти, мое предположение теперь заключается в том, что компилятору разрешено изменять порядок инструкций. Но может ли ЦП также переупорядочить их?

Благодаря

ответ

4

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