Имеет ли смысл барьер памяти только в SMP?

Я понимаю, зачем нужны барьеры памяти, но не понимаю в случае с Uniprocessor.

Придется ли мне сталкиваться с препятствиями, даже когда я использую UP? Каждый документ объясняет их с помощью SMP, но не UP.

В следующем коде есть вероятность, что r2 == 0 в точке a?

// the location 0xdeadbeef has a zero initial value
ldr r0, =0xdeadbeef
ldr r1, =0xdeadbeef
ldr r2, =1
str r2, [r0]
ldr r2, [r1]
// point a

person Inbae Jeong    schedule 08.03.2012    source источник
comment
Может быть актуально для суперскалярных вышедших из строя одиночных процессоров. Это действительно должно определяться моделью памяти процессора и набором инструкций. (зло в деталях).   -  person Basile Starynkevitch    schedule 08.03.2012
comment
@Basile: Я так не думаю - железное правило - выполнение одного потока на одном процессоре всегда имеет эффект по следующей причине.   -  person    schedule 22.09.2012


Ответы (2)


Есть барьеры памяти и барьеры компилятора.

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

person Community    schedule 21.09.2012

Барьеры памяти должны использоваться только для «глобальных переменных». Поскольку локальные (в стеке) и регистры автоматически сохраняются при переключении потоков.

Может быть, универсальность лучше, чем предположение, что вы всегда имеете дело с UP

person Dewfy    schedule 08.03.2012