Что подразумевается под инструкцией ограждения в наборе инструкций RISC-V?
Проходя через RISC-V ISA, я увидел инструкцию в разделе модели памяти (инструкция FENCE). Что именно это означает?
2 ответа:
Я нашел один случай, когда использование инструкции забора просто необходимо. Пример:
- некоторый модуль в SoC генерирует прерывание путем записи значения в CSR 0x783 (MIPI) через шину HostIO.
Прошивка переходит к обработчику прерываний.- обработчик пытается сбросить бит 'pending' в пользовательском устройстве, записав 1 в регистр.
- такая операция была скомпилирована как инструкция 'store' с непосредственным значением =1.
- в результате, если я не реализую забор на начало обработчика у меня есть некоторое мусорное значение вместо правильного непосредственного аргумента инструкции.
RISC-V ISA использует модель свободной памяти, в которой порядок загрузки и хранения, выполняемых одним потоком, может отличаться, когда его видит другой поток. Это делается для того, чтобы включить методы повышения производительности системы памяти.
Например, поток 1 может выполнить:
- Загрузить A
- Магазин B
- Магазин C
Но поток 2 мог видеть грузы и магазины не в порядке относительно первого потока:
- Магазин C
- Загрузить A
- магазин B
Забор гарантирует, что все операции до забора выполняются до любой операции после забора. Поэтому, если вышеизложенное изменилось на:
Поток 1:
- Загрузить A
- Магазин B
- забор
- Магазин C
Тогда поток 2 гарантированно увидит загрузку в A и магазин в B до магазина в C, но все равно сможет увидеть магазин в B до загрузки A.
Поток 2:
- Магазин B
- нагрузка A
- Магазин C
Источник: http://riscv.org/download.html (на уровне пользователя Иса спецификаций В2.0 Страница 19)