Проблема с «сопоставлениями C / C ++ 11 для процессоров» в предлагаемых барьерах памяти NOP для Itanium? - PullRequest
3 голосов
/ 30 мая 2019

Хотя я не читаю сборку Itanium и не претендую на понимание ее модели памяти, я заметил кое-что очень странное и явно противоречивое в одном предложенном отображении атома C / C ++ в Itanium.

В C / C ++ 11 сопоставлениях с процессорами предлагаемая реализация атомарного анализа на Itanium не предполагает никаких заборов или заградительных ограждений:

Consume Fence:  <ignore>
Acquire Fence:  <ignore>
Release Fence:  <ignore>
Acq_Rel Fence:  <ignore>

(что в любом случае означает ограничение на потребление?)

И действительно, в этом предложении ослабленные атомные нагрузки и хранилища никогда не ослабляются:

Load Relaxed:   ld.acq
Load Consume:   ld.acq
Load Acquire:   ld.acq
...

Мы видим, что все расслабленные простые (не RMW) операции уже являются Acq_Rel в этих отображениях.Но, глядя на операции RMW, вы увидите, что расслабленные и неслабые операции различаются:

Cmpxchg Release:    cmpxchg.rel
Cmpxchg AcqRel:     cmpxchg.rel; mf

Если реализация Cmpxchg AcqRel не имеет безвозмездной поддержки mf (маловероятно), это означает, что поведение получения не является автоматическим вcmpxchg.rel.

Разве не должна хотя бы расслабленная операция RMW только для выпуска, сопровождаемая ограждением захвата, обеспечить хотя бы гарантии acq_rel RMW?Если так, разве это не показывает, что предложение является дефектным?

...