fence

fence

Асемблер RISC-V Посилання

lyszt.net охоплює fence та інші інструкції RISC-V більш детально.

Опис

Інструкції FENCE використовуються для впорядкування операцій введення-виведення пристроїв і звернень до пам'яті з точки зору інших хартів RISC-V та зовнішніх пристроїв або співпроцесорів. Будь-яка комбінація введення пристрою (I), виведення пристрою (O), читань пам'яті (R) і записів пам'яті (W) може бути впорядкована відносно будь-якої комбінації тих самих операцій. Неформально кажучи, жоден інший харт RISC-V або зовнішній пристрій не може спостерігати будь-яку операцію з множини successor, що йде після FENCE, раніше за будь-яку операцію з множини predecessor, що передує FENCE. memorymodel містить точний опис моделі узгодженості пам'яті RISC-V.

Інструкції FENCE також упорядковують читання та записи пам'яті, виконувані хартом, з точки зору читань і записів пам'яті, виконуваних зовнішнім пристроєм. Однак інструкції FENCE не впорядковують спостереження подій, виконувані зовнішнім пристроєм з використанням будь-якого іншого механізму сигналізації.

ℹ
Пристрій може спостерігати звернення до комірки пам'яті через деякий зовнішній механізм зв'язку, наприклад, регістр керування з відображенням у пам'ять, який керує сигналом переривання для контролера переривань. Цей зв'язок перебуває поза межами дії механізму впорядкування FENCE, і тому інструкції FENCE не можуть давати жодних гарантій щодо того, коли зміна сигналу переривання стане видимою для контролера переривань. Конкретні пристрої можуть надавати додаткові гарантії впорядкування для зменшення накладних витрат програмного забезпечення, але вони перебувають поза межами дії моделі пам'яті RISC-V.

EEI визначить, які операції введення-виведення можливі, і зокрема, які адреси пам'яті при доступі до них за допомогою інструкцій завантаження та збереження будуть трактуватися та впорядковуватися як операції введення пристрою та виведення пристрою відповідно, а не як читання та записи пам'яті. Наприклад, до пристроїв введення-виведення з відображенням у пам'ять зазвичай звертаються за допомогою некешованих завантажень і збережень, які впорядковуються з використанням бітів I та O, а не бітів R та W. Розширення набору інструкцій також можуть описувати нові інструкції введення-виведення, які також будуть впорядковуватися з використанням бітів I та O в інструкції FENCE.

Кодування режиму Fence

Поле режиму FENCE fm визначає семантику інструкції FENCE. FENCE (з fm=0000) упорядковує всі операції з пам'яттю в своїй множині попередників перед усіма операціями з пам'яттю в своїй множині наступників.

Інструкція FENCE.TSO кодується як інструкція FENCE з fm=1000, predecessor=RW і successor=RW. FENCE.TSO упорядковує всі операції завантаження в своїй множині попередників перед усіма операціями з пам'яттю в своїй множині наступників, а також усі операції збереження в своїй множині попередників перед усіма операціями збереження в своїй множині наступників. Це залишає операції збереження non-AMO у множині попередників FENCE.TSO's невпорядкованими відносно завантажень non-AMO у його множині наступників.

ℹ
Оскільки FENCE RW,RW накладає надмножину впорядкувань, що накладаються FENCE.TSO, коректно ігнорувати поле fm і реалізовувати FENCE.TSO як FENCE RW,RW.

Невикористовувані поля в інструкціях FENCE --rs1 and rd-- зарезервовані для дрібнозернистих fence у майбутніх розширеннях. Для прямої сумісності базові реалізації повинні ігнорувати ці поля#, а стандартне програмне забезпечення повинно обнуляти ці поля. Аналогічно, багато налаштувань fm і множин попередників/наступників також зарезервовані для майбутнього використання. Базові реалізації повинні трактувати всі такі зарезервовані конфігурації як інструкції FENCE (з fm=0000), а стандартне програмне забезпечення повинно використовувати лише незарезервовані конфігурації.

ℹ
Ми обрали ослаблену модель пам'яті, щоб забезпечити високу продуктивність простих реалізацій машин і ймовірних майбутніх розширень співпроцесорів або прискорювачів. Ми відокремлюємо впорядкування введення-виведення від впорядкування читань/записів пам'яті, щоб уникнути непотрібної серіалізації всередині харта драйвера пристрою, а також для підтримки альтернативних непам'ятних шляхів керування доданими співпроцесорами або пристроями введення-виведення. Прості реалізації можуть додатково ігнорувати поля predecessor and successor і завжди виконувати консервативний FENCE для всіх операцій.