Опубликован: 19.04.2025 | Доступ: свободный | Студентов: 1 / 0 | Длительность: 07:05:00
Лекция 2:

Архитектура RISC-V

< Лекция 1 || Лекция 2: 1234 || Лекция 3 >

Примеры регистров специального назначения.

Базовый 64-разрядный счетчик, который на практике никогда не должен переполняться. Следующая кодовая последовательность преобразует действительное значение 64-разрядного счетчика циклов в x3:x2, даже если счетчик переключается между считыванием своей верхней и нижней половин.

Таблица 2.10. Таймеры и счетчики
0xC00 Read-only cycle Cycle counter
0xC01 Read-only time Timer for
0xC02 Read-only instret Instructions-retired counter
0xC80 Read-only cycleh Upper 32
0xC81 Read-only timeh Upper 32
0xC82 Read-only instreth Upper 32

Примеры инструкций работы с регистрами специальных функций

Псевдоинструкция RDCYCLE считывает младшие биты XLEN цикла CSR, который содержит подсчет количества тактовых циклов, выполненных процессорным ядром, на котором запущен hart, с произвольного времени запуска в прошлом. RDCYCLEH - это инструкция только для RV32I, которая считывает биты 63{32 того же счетчика циклов. Базовый 64-разрядный счетчик на практике никогда не должен перегружаться. Скорость скорость, с которой увеличивается счетчик циклов, будет зависеть от реализации и операционной среды.

Среда выполнения должна предоставлять средства для определения текущей скорости (циклов в секунду) с которой увеличивается счетчик циклов.

Псевдоинструкция RDTIME считывает младшие биты XLEN временного CSR, который подсчитывает реальное время часов, прошедшее с произвольного времени начала в прошлом. RDTIMEH - это инструкция только для RV32I, которая считывает биты 63-32 того же счетчика реального времени. 64-разрядный счетчик на практике врятли когда-то переполнится).

(Среда выполнения должна обеспечивать средства определения периода счетчика реального времени (секунды/тик). Период должен быть постоянным. Часы реального времени всех устройств в одном пользовательском приложении должны быть синхронизированы с точностью до одного тика часов реального времени. Среда должна предоставлять средства для определения точности часов.)

Псевдоинструкция RDINSTRET считывает младшие ксилольные биты интернет-CSR, которая подсчитывает количество инструкций, удаленных этим hart из некоторой произвольной начальной точки в прошлом. RDINSTRETH - это инструкция только для RV32I, которая считывает биты 63-32 из того же счетчика команд.

Команды системных вызовов и прерываний

Команда вызова ECALL используется для отправки запроса к поддерживающей среде выполнения, которой обычно является операционная система. ABI для системы определяет, как передаются параметры для запроса среды, но обычно они находятся в определенных местах в файле целочисленного регистра.

Команда EBREAK используется отладчиками для передачи управления обратно в среду отладки.

Таблица 2.11. Системные прерывания
опкод команды
1110011 ECALL
1110011 EBREAK

Базовый RISC-V ISA поддерживает несколько параллельных потоков выполнения в пределах одного адресного пространства пользователя. Каждый аппаратный поток RISC-V, или hart, имеет свое собственное состояние пользовательского регистра и счетчик программ и выполняет независимый последовательный поток команд. Среда выполнения будет определять, как создаются RISC-V hart и как ими управляют. Интерфейсы RISC-V могут взаимодействовать и синхронизироваться с другими hart (далее для простоты будем использовать "харт" или "поток") либо посредством вызовов среды выполнения, которые задокументированы отдельно в спецификации для каждой среды выполнения, либо напрямую через систему общей памяти.

RISC-V харты также могут взаимодействовать с устройствами ввода-вывода и косвенно друг с другом посредством загрузки и сохранения в части адресного пространства, назначенного для ввода-вывода.

В базовом RISC-V ISA каждый RISC-V hart наблюдает за своими собственными операциями с памятью, как если бы они выполнялись последовательно в программном порядке. RISC-V имеет упрощенную модель памяти между потоками, требующую явной инструкции FENCE, чтобы гарантировать упорядочение операций с памятью из разных потоков RISC-V (в крайнем случае очень и очень аккуратного обращения к памяти в плане одновременного обращения к одним и тем же областям, что в общем-то не есть хорошо).

Поля команды FENCE

Рис. 2.5. Поля команды FENCE

Команда FENCE используется для упорядочивания операций ввода-вывода устройства и доступа к памяти в соответствии с другими RISC-V hart и внешними устройствами или сопроцессорами. Любая комбинация ввода устройства (I), вывода устройства (O), операции чтения из памяти (R) и записи в память (W) могут быть упорядочены относительно любой их комбинации.

Неофициально, никакой другой RISC-V харт или внешнее устройство не может наблюдать какую-либо операцию в наборе-преемнике, следующем за FENCE, перед любой операцией в наборе-предшественнике.

Среда выполнения должна определять, какие операции ввода-вывода возможны, и, в частности, какие инструкции загрузки и сохранения могут обрабатываться и упорядочиваться как операции ввода-вывода соответственно, а не как операции чтения и записи в память. Например, доступ к устройствам ввода-вывода, отображенным в память, обычно осуществляется с помощью некэшированных загрузок и хранилищ, упорядоченных с использованием битов ввода-вывода, а не битов R и W. Расширения набора команд могут также описывать новые инструкции ввода-вывода сопроцессора, которые также будут упорядочены с использованием битов ввода-вывода в FENCE.

В архитектуре RISC-V реализована упрощенная модель памяти, чтобы обеспечить высокую производительность за счет простых машинных реализаций, однако полностью упрощенная модель памяти слишком слаба для поддержки моделей памяти на языках программирования, и поэтому модель памяти ужесточается.

Упрощенная модель памяти также наиболее совместима с вероятными будущими расширениями сопроцессора или ускорителя. В архитектуре отделяется упорядочение ввода-вывода от упорядочения R/W памяти, чтобы избежать ненужной сериализации внутри жесткого диска драйвера устройства, а также для поддержки альтернативных путей, не связанных с памятью, для управления добавленными сопроцессорами или устройствами ввода-вывода. Простые реализации могут дополнительно игнорировать поля "предшественник" и "преемник" и всегда выполнять консервативное ограничение для всех операций.

Поля команды FENCE.I.

Рис. 2.6. Поля команды FENCE.I.

FENCE.I используется для синхронизации потоков инструкций и данных. RISC-V не гарантирует, что сохраненные в памяти инструкции будут доступны для выборки команд на том же RISC-V hart до тех пор, пока не будет выполнено FENCE.I.

FENCE.I гарантирует только то, что при последующей выборке команды на RISC-V hart будут видны все предыдущие хранилища данных, уже видимые для тот же RISC-V hart.

FENCE.I не гарантирует, что при выборке команд другими RISC-V интерфейсами будут соблюдаться локальные хранилища данных в многопроцессорной системе. Чтобы сделать хранилище в памяти команд видимым для всех RISC-V-устройств, записывающая часть должна выполнить забор данных, прежде чем запрашивать, чтобы все удаленные RISC-V-устройства выполнили FENCE.I.

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

Если кэши инструкций и данных поддерживаются согласованными таким образом, то на границе необходимо использовать только FENCE.I.

JIT-компиляторы могут генерировать большое количество инструкций перед одним FENCE.I, и уменьшите любые накладные расходы на отслеживание/аннулирование кэша команд путем записи переведенных инструкций в области памяти, которые, как известно, не находятся в I-кэше.

Литература

  1. The RISC-V Instruction Set Manual. Volume I: User-Level ISA Document Version 2.2 // Editors: Andrew Waterman1, Krste Asanov
  2. RISCVGreenCardv // http://www.cl.cam.ac.uk/teaching/1617/ECAD+Arch/files/docs/RISCVGreenCardv8-20151013.pdf
  3. Сара Л. Харрис, Дэвид Харрис. Цифровая схемотехника и архитектура компьютера: RISC-V / пер. с англ. В. С. Яценкова, А. Ю. Романова; под ред. А. Ю. Романова. - М.: ДМК Пресс, 2021. - 810 с.
  4. RISC-V Assembly Language Programmer Manual Part I developed by: SHAKTI Development Team @ iitm '20 shakti.org.in
  5. Стивен Смит. Программирование на языке ассемблера RISC-V / пер. с англ. А. В. Логунова; под науч. ред. А. Ю. Романова. - М.: ДМК Пресс, 2025. - 276 с.
< Лекция 1 || Лекция 2: 1234 || Лекция 3 >