Under construction!

URL данного справочника
emc.orgfree.com/RISC-V/hb


Навигатор

home My RISC-V home

индекс Индекс

Инструкции
расширения A
(атомарные операции)

handbook

RV32A

RV64A


Evgeny Eremin

RISC-V

Инструкции расширения A (атомарные операции)

Инструкции этого расширения предназначены для организации совместной работы нескольких ядер на общую память. Они важны по целому ряду причин. Поскольку работа с памятью происходит значительно медленнее, чем с регистрами процессора, инженеры и программисты постоянно добавляют все новые и новые средства для повышения эффективности обслуживания памяти. Здесь и всевозможные средства аппаратного ускорения (буфера операций записи, кэш, опережающая выборка команд и данных, спекулятивное исполнение команд заранее и т.п.), и оптимизирующие компиляторы, также иногда переставляющие инструкции. С появлением многоядерности ситуации еще более усложняется, т.к. каждое ядро выполняет свою программу независимо от других.

В результате обмен данными между потоками требует синхронизации. (Простейший пример: два потока при попытке увеличить счетчик считывают "старое" значение, каждый увеличивает его на 1 и по очереди записывает - в итоге первая из сумм может потеряться!) Атомарные (неделимые) инструкции призваны решить эту проблему.

Расширение A в RISC-V предлагает три способа обмена данными через общую память.

  1. Допустим, несколько потоков суммируют массив. Тогда каждую частичную сумму надо добавить к общей ячейке памяти, для чего достаточно одной операции сложения. Но для RISC-процессора это 3 инструкции: прочитать в регистр, сложить и записать обратно. Важно, чтобы за время их выполнения другой поток не обращался к обрабатываемой ячейке. Иными словами, увеличение значения в памяти должно быть выполнено как единая неделимая операция (атомарно). Такое гарантировано атомарное сложение способна выполнить инструкция AMOADD. Здесь приставка AMO означает Atomic Memory Operation - атомарная операция с памятью.
    Есть также логические AMO: AMOAND, AMOOR и AMOXOR. Можно также искать максимум или минимум, причем как со знаком, так и без (инструкции AMOMAX, AMOMAXU, AMOMIN и AMOMINU).
  2. Когда требуется атомарно выполнить несколько "нестандартных" команд, их объединяют в так называемую критическую секцию. Для организации критической секции может быть рекомендована команда AMOSWAP.
  3. Наконец, возможен еще один, несколько более сложный способ организовать критическую секцию - с помощью пары инструкций LR и SC.

Атомарные операции могут работать как с 4-байтовыми данными (суффикс .W), так с 8-байтовыми (суффикс .D) .

Все инструкции имеют разрядность 32 бита.

Примеры кодирования инструкций показаны при их описании.


Автор справочника - Евгений Александрович Еремин (Пермский государственный гуманитарно-педагогический университет). e_eremin@yahoo.com


Free Web Hosting