Что подразумевается под инструкцией ограждения в наборе инструкций RISC-V?


Проходя через RISC-V ISA, я увидел инструкцию в разделе модели памяти (инструкция FENCE). Что именно это означает?

2 7

2 ответа:

Я нашел один случай, когда использование инструкции забора просто необходимо. Пример:

  1. некоторый модуль в SoC генерирует прерывание путем записи значения в CSR 0x783 (MIPI) через шину HostIO.
  2. Прошивка переходит к обработчику прерываний.
  3. обработчик пытается сбросить бит 'pending' в пользовательском устройстве, записав 1 в регистр.
  4. такая операция была скомпилирована как инструкция 'store' с непосредственным значением =1.
  5. в результате, если я не реализую забор на начало обработчика у меня есть некоторое мусорное значение вместо правильного непосредственного аргумента инструкции.

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)