Size: a a a

Compiler Development

2020 January 10

AZ

Alexander Zaitsev in Compiler Development
Ioann_V
так он, второй то есть, тоже же делает acq, то есть они не видны до acq, но как только делается - становится
нет
источник

I

Ioann_V in Compiler Development
Aleksey Shipilev
Тут важно вытащить из головы гвоздь о том, что acq/rel "глобальные" операции, и разные acq-и связаны с разными rel-ами. Нет! Они только для соответствующих пар переменных.
ну, а почему я не прав? Вот же одна и та же пара:
источник

AS

Aleksey Shipilev in Compiler Development
Давайте обратно вернёмся к месту, где очевидно. Понятно, что такое возможно? (Для простоты нотации считаем, что "=" -- это acq-rel)
Thread 1: x = 1
Thread 2: y = 1;
Thread 3: r1 = x; r2 = y; // r1 <- 1, r2 <- 0
Thread 4: r3 = y; r4 = x; // r3 <- 1, r4 <- 0
источник

I

Ioann_V in Compiler Development
да, такое возможно
источник

I

Ioann_V in Compiler Development
или секунду...еще секунду....
источник

I

Ioann_V in Compiler Development
нет, такое не возможно с моей точки зрения
источник

AS

Aleksey Shipilev in Compiler Development
ок, заходим с другого конца тогда
источник

AS

Aleksey Shipilev in Compiler Development
Ещё тупее пример, такое возможно?
Thread 1: x = 1
Thread 3: r1 = x; // r1 <- 1
Thread 4: r4 = x; // r4 <- 0
источник

I

Ioann_V in Compiler Development
Да, вот такое возможно
источник

AS

Aleksey Shipilev in Compiler Development
А такое?
Thread 2: y = 1
Thread 3: r2 = y; // r2 <- 0
Thread 4: r3 = y; // r3 <- 1
источник

I

Ioann_V in Compiler Development
Да. Поток 3 перед потоком 2, а 4-ый после второго
источник

AH

Ayrat Hudaygulov in Compiler Development
Aleksey Shipilev
Давайте обратно вернёмся к месту, где очевидно. Понятно, что такое возможно? (Для простоты нотации считаем, что "=" -- это acq-rel)
Thread 1: x = 1
Thread 2: y = 1;
Thread 3: r1 = x; r2 = y; // r1 <- 1, r2 <- 0
Thread 4: r3 = y; r4 = x; // r3 <- 1, r4 <- 0
Это как-то связано с кешами?
источник

AS

Aleksey Shipilev in Compiler Development
Ioann_V
Да. Поток 3 перед потоком 2, а 4-ый после второго
Ок, а теперь склейте эти два возможных примера, и получите IRIW. Независимые записи видно в разном порядке.
источник

AH

Ayrat Hudaygulov in Compiler Development
Потому что иначе не могу понять как одновременно могут быть состояния (есть y, нет х) и (нет y, есть х)
источник

AS

Aleksey Shipilev in Compiler Development
Ayrat Hudaygulov
Потому что иначе не могу понять как одновременно могут быть состояния (есть y, нет х) и (нет y, есть х)
"Независимые записи видно в разном порядке". Потому что сериализованная память (с глобальным порядком поверх всех операций) -- это иллюзия.
источник

AS

Aleksey Shipilev in Compiler Development
IRIW -- вообще гвоздевыдирательный пример, который становится очевидным, когда вытаскиваешь у себя из головы иллюзии про память :)
источник

I

Ioann_V in Compiler Development
Aleksey Shipilev
Давайте обратно вернёмся к месту, где очевидно. Понятно, что такое возможно? (Для простоты нотации считаем, что "=" -- это acq-rel)
Thread 1: x = 1
Thread 2: y = 1;
Thread 3: r1 = x; r2 = y; // r1 <- 1, r2 <- 0
Thread 4: r3 = y; r4 = x; // r3 <- 1, r4 <- 0
А это нельзя ли как то сформировать в терминах того, как работает процессор, котоый может давать такое?
источник

I

Ioann_V in Compiler Development
Там же есть буфферы записи и очереди событий
источник

I

Ioann_V in Compiler Development
и все такое
источник

I

Ioann_V in Compiler Development
я про эти вещи начитан и как работают понимаю
источник