позволяет изменить порядок 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=false

https://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=false

http://www.nxp.com/assets/documents/data/en/application-notes/AN3441.pdf

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

Страница 77:https://www.setphaserstostun.org/power8/POWER8_UM_v1.3_16MAR2016_pub.pdf

3.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].

Ответы на вопрос(1)

Ваш ответ на вопрос