Understanding Memory Models

I've been reading up on memory models recently and I was sort of confused on how this worked.

To quote http://cis.poly.edu/muller/CS623/weakmemory.htm

if processor writes a new X then writes a new Y, all other processors that subsequently выполнить чтение 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 в настоящее время в кеше, а местоположение A не кешируется, тогда загрузка A займет дольше, чем B. Вместо ожидания A, ЦП может извлечь B из своего кеша, скрывая задержку B: таким образом, ЦП может выполнить сложение, как только A станет доступный. Расслабляя сильные (последовательная) модель памяти исполнения (т.е. сначала должен загрузиться A, а затем B), более высокая производительность возможно ---- но повторный заказ не может быть прозрачно для программного обеспечения. Рассмотрим фрагмент кода ниже, он является частью код, который можно использовать для реализации семафор спин-блокировки [2].

У меня вопрос, как это возможно, что при более слабой модели памяти может случиться так, что процессор сможет получить доступ к новому Y и старому X. Разве он не записывается в ту же самую память ( баран) или по другому работает? Я предполагаю, что если один процесс изменяет переменную, а другой читает ее после этого, он считывает последнее значение.

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

Спасибо

5
задан TomHastjarjanto 4 January 2011 в 14:08
поделиться