позволяет изменить порядок Store-Load в этом коде
звестно, PowerPC имеет слабую модель памяти, которая допускает любые спекулятивные изменения порядка: Store-Store, Load-Store, Store-Load, Load-Load.
Есть как минимум 3 Забора:
hwsync
или жеsync
- полный барьер памяти, предотвращает любое изменение порядкаlwsync
- барьеры памяти, препятствующие переупорядочению: Load-Load, Store-Store, Load-Storeisync
- учебный барьер: https://www.ibm.com/support/knowledgecenter/en/ssw_aix_71/com.ibm.aix.alangref/idalangref_isync_ics_instrs.htmНапример, может быть переупорядочен Store-stwcx.
и нагрузкаlwz
в этом коде?https://godbolt.org/g/84t5jM
lwarx 9,0,10
addi 9,9,2
stwcx. 9,0,10
bne- 0,.L2
isync
lwz 9,8(1)
Как известно,isync
предотвращает изменение порядкаlwarx
,bne
<->any following instructions
.
Но делаетisync
предотвратить изменение порядкаstwcx.
,bne
<->any following instructions
?
То есть может хранитьstwcx.
начинается раньше, чем следующая нагрузкаlwz
и заканчивает работу позже чем Load-lwz
?
То есть может хранитьstwcx.
preforms Store в Store-Buffer раньше, чем следующий Load-lwz
началось, но фактическое сохранение в кеш, видимое для всех ядер ЦП, происходит позже, чем загрузкаlwz
законченный?
Как мы видим из следующих документов, статей и книг:
isync
это не забор памяти, а только забор инструкций.
isync
не заставляет завершать все внешние доступы относительно других процессоров и механизмов, которые обращаются к памяти.
isync
не ждет, пока все остальные процессоры обнаружат доступ к хранилищу
isync
очень низкие накладные расходы и очень слабые (ниже, чемlwsync
а такжеhwsync
)
isync
не гарантирует, что предыдущие и будущие хранилища будут восприняты другими процессорами в локально оформленном порядке, что требует одной из инструкций синхронизации.
isync
является барьером приобретения, но, как мы знаем, приобретение может применяться только к Load-операциям, а не к Store (stwcx.
)
isync
не влияет на доступ к данным ине ждет выполнения всех магазинов.
Главный вопросизначально: a = 0, b = 0
если CPU-Core-0 сделать:stwcx. [a]=1
bne-
isync
lwz [b]
.А CPU-Core-1 делают:hwsync
stw [b]=1
hwsync
lwz [a]
hwsync
.Тогда может Core-0 увидеть[b]==1
и Core-1 см.[a]==0
?
Также:
https://www.ibm.com/developerworks/systems/articles/powerpc.htmlФункция isync не позволяет спекулятивному выполнению получить доступ к блоку данных до того, как будет установлен флаг. И в сочетании с предыдущими инструкциями загрузки, сравнения и условного ветвления isync гарантирует, что нагрузка, от которой зависит ветвление (загрузка флага), будет выполнена до любых нагрузок, которые происходят после isync (загрузки из общего ресурса). блок).isync не является инструкцией по защите памяти, ноПоследовательность загрузки-сравнения-условная ветвь-синхронизация может обеспечить это свойство упорядочения..
http://www.nxp.com/assets/documents/data/en/application-notes/AN2540.pdfВ отличие от isyncСинхронизация принудительно завершает все внешние обращения по отношению к другим процессорам и механизмам, которые обращаются к памяти.
Хранение в PowerPC Дженис М. Стоун, Роберт П. Фицджеральд, 1995:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.47.4033&rep=rep1&type=pdfВ отличие от синхронизации,isync не ждет, пока все остальные процессоры обнаружат доступ к хранилищу, isync менее консервативен, чем синхронизация, потому чтоон не задерживается, пока все процессоры не обнаружат предыдущие загрузки и не сохранят данные.
http://open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2745.htmlДо нашей эры;isync: это очень слабая и очень слабая форма ограничения памяти. Определенный набор предшествующих нагрузок, от которых зависит инструкция bc (условная ветвь), гарантированно завершится до того, как начнется выполнение любой последующей инструкции. Однако эффекты состояния буфера хранилища и состояния кэша могут, тем не менее, создать впечатление, что последующие загрузки происходят до предшествующих загрузок, от которых зависит инструкция twi. Тем не менее, архитектура PowerPC не позволяет хранилищам выполняться спекулятивно, поэтому любое хранилище, следующее за инструкцией twi; isync, гарантированно произойдет после любой из нагрузок, от которых зависит bc.
https://books.google.ru/books?id=TKOfDQAAQBAJ&pg=PA264&lpg=PA264&dq=isync+store+load&source=bl&ots=-4FyWvxTwg&sig=r1fitaG-Q3GHOxvSMTgLJMBVGUU&hl=ru&sa=X&ved=0ahUKEwiKjYK97urTAhUJ_iwKHbfMA58Q6AEIOjAC#v=onepage&q=isync%20store%20load&f = ложьhttps://books.google.ru/books?id=gZZgAQAAQBAJ&pg=PA71&lpg=PA71&dq=isync+store+load&source=bl&ots=bo6nTLdzEZ&sig=vCjoDmUWhn0buN_uMf8XgbDzCf4&hl=ru&sa=X&ved=0ahUKEwiKjYK97urTAhUJ_iwKHbfMA58Q6AEIcTAJ#v=onepage&q=isync%20store%20load&f=falsehttps://books.google.ru/books?id=G2fmCgAAQBAJ&pg=PA321&lpg=PA321&dq=isync+store+load&source=bl&ots=YS4mE-4f_F&sig=OVwaJYE-SNnor-KtKrjlkOd6AOs&hl=ru&sa=X&ved=0ahUKEwiKjYK97urTAhUJ_iwKHbfMA58Q6AEIYjAH#v=onepage&q&f=falsehttp://www.nxp.com/assets/documents/data/en/application-notes/AN3441.pdfОбратите внимание, чтоisync не влияет на доступ к данным и не ожидает выполнения всех хранилищ.
Страница 77:https://www.setphaserstostun.org/power8/POWER8_UM_v1.3_16MAR2016_pub.pdf3.5.7.2 Недопустимый блок кэша инструкций (icbi)
В результате этой и других оптимизаций проектирования, специфичных для реализации, вместо того, чтобы требовать выполнения последовательности команд, указанной Power ISA, для каждой строки кэша, программное обеспечение должно выполнять только одну последовательность из трех команд, чтобы создать любой предыдущий код. модификации становятся видимыми:sync
, icbi
(по любому адресу),isync
.
ОТВЕТ:
Так,isync
не гарантирует Store-Load order, потому что "isync не является инструкцией по защите памяти", затемisync
не гарантирует, что какие-либо предыдущие хранилища будут видны другим ядрам ЦП (использует последовательную согласованность) до завершения следующего вмешательства. Команда синхронизации командisync
гарантирует только порядок начальных инструкций, но не гарантирует порядок выполнения инструкций, то есть не гарантирует порядок их видимого воздействия на другие процессорные ядра. Те,isync
позволяет изменить порядок видимого эффекта Store-Load в этом кодеstwcx. [a]=1; bne-; isync; lwz [b]
.