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

Хорошо для тех из вас, кто задается вопросом: «Что такое RISC V?» давайте сделаем небольшой тур.

RISC V - это аппаратное обеспечение с открытым исходным кодом ISA (архитектура набора команд), основанное на установленных принципах RISC.

Значение: они предоставили открытый доступ к наборам инструкций, чтобы любой мог изменять и вносить изменения, концепция такая же, как в Linux, но это (RISC V) аппаратно. Что на самом деле очень круто, так как настройка микросхем / процессоров будет немного проще и без лицензионных отчислений.

Теперь вы можете подумать, что если инструкции даны в Интернете, тогда зачем мне читать эту статью? …… или

Если инструкции SIMD (одна инструкция и несколько данных) уже реализуются на процессорах, почему я должен сделать шаг назад, чтобы понять векторные инструкции?

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

У SIMD была проблема, заключающаяся в том, что для него требуются фиксированные значения регистров, поэтому инженеры подумали: `` А что, если мы войдем в SIMD, который в основном составлен с помощью векторных инструкций, и внесем изменения там на векторном уровне, поэтому тогда эта одиночная инструкция множественных данных может работать эффективно! »

Может быть, вы понимаете общую картину или то, что именно здесь происходит. Давайте забегаем вперед, обещаю, будет интересно.

ЗАДАЧИ:

  1. Чтобы понять основы векторных инструкций RISC V.
  2. Выполнять инструкции.

ВВЕДЕНИЕ

Ранее инструкции обрабатывались по одной, даже одна и та же инструкция, содержащая массивы, могла проходить несколько циклов, поэтому была введена концепция параллелизма данных. (SIMD является его частью) До сих пор инструкции SIMD / MIMD популярны.

Таким образом, в основном SIMD - это несколько данных с одной инструкцией. Одна инструкция выполняется параллельно на нескольких точках данных, в отличие от выполнения нескольких инструкций, это повышает эффективность.

Но позже этого оказалось недостаточно, поэтому ширина регистров была увеличена, увеличение размера регистров усложнило коды. Более старый способ и более элегантная альтернатива - использовать параллелизм на уровне данных - векторная архитектура.

Примечание: векторные инструкции являются частью SIMD, мы углубимся в EXPLOIT, чтобы сделать его более эффективным.

3-ШАГОВЫЙ МОДУЛЬ:

Прежде чем приступить к реализации инструкций, нам необходимо понять процесс реализации, очевидно! Чтобы упростить этот процесс, для вас организован трехэтапный модуль. Не думайте пока об используемых библиотеках или программах, которые нужно написать, просто разберитесь в создании инструкций.

Как и любая человеческая система принятия решений, мы сначала признаем ЧТО.

КАКИЕ ресурсы доступны? Таким образом, МОДУЛЬ ИНСТРУКЦИЙ показывает все доступные инструкции.

ПОЧЕМУ заставит нас следить за тем, что происходит в РЕГИСТРАХ. Пример: ПОЧЕМУ мы должны отдавать управление определенному регистру.

КАК - вот где собственно работа. КАК МЫ РЕАЛИЗОВАТЬ?

МОДУЛЬ 1: ИНСТРУКЦИИ

Обратившись к диаграмме, вы можете даже посмеяться над тем, насколько тривиальной и базовой она кажется. Но вот секрет, это строительный блок небоскреба ISA. Также может использоваться практически на всех ядрах RISC V. Более сложные инструкции будут их вариацией.

примечание: .vv - это векторные расширения, а .vs или .vx - для векторно-скалярных расширений.

Схема: буквы, подчеркнутые в блоке, будут синтаксисом для ваших инструкций, а остальные - для пояснения.

например. Для добавления мы будем использовать: vadd.vv

но у этого есть ограничения, так как он сообщает процессору только, какое действие выполнять, нам нужно указать расположение реестра. Таким образом, процессор будет знать, о какое действие следует выполнить.

МОДУЛЬ 2: РЕГИСТРЫ

RISC V основан на архитектуре загрузки и хранения, поэтому регистры играют очень важную роль. У нас есть нормальные регистры памяти (32/64 бита) и CSR (регистры состояния управления).

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

Расширение вектора (v) добавляет 32/64 векторных регистров и пять непривилегированных CSR к базовому скалярному RISC V ISA.

Эти CSR будут использоваться в будущих ссылках, однако их важно понимать.

Это краткий обзор CSR. Подробная информация прекрасно объяснена на github по ссылке ниже.

1. ДЛИНА ВЕКТОРА: vtype

vtype: он интерпретирует содержимое файла векторных регистров и может быть обновлен только с помощью инструкций vsetvl{i}.

а) Теперь исправим ширину: vsew

Значение в vsew задает динамический стандартный элемент ширину (SEW)

б) Недопустимый тип вектора: vill

vsetvl {i} → записывает значение в → vtype…. .. vill обнаруживает неподдерживаемое значение

Бит vill используется для кодирования того, что предыдущая инструкция vsetvl{i} пыталась записать неподдерживаемое значение в vtype.

c) Группирование векторных регистров (vlmul)

Для группировки векторных регистров используется vlmul, так что одна инструкция может работать с несколькими векторными регистрами.

2. ВЕКТОРНЫЕ РЕГИСТРЫ ДЛИНЫ: vl

Он имеет беззнаковое целое число, которое указывает количество элементов, которые должны быть обновлены векторными инструкциями.

Можно обновить с помощью: инструкций vsetvl и vsetvli.

3. ИНДЕКС НАЧАЛА ВЕКТОРА: vstart

INDEX’S → 1-й элемент …… .. vstart

Задает индекс векторной инструкции первого выполняемого элемента.

Все векторные инструкции сбрасывают vstart в ноль после выполнения инструкции.

4. ВЕКТОРНЫЙ РЕЖИМ КРУГЛЕНИЯ ФИКСИРОВАННОЙ ТОЧКИ: vxrm

Он содержит двухбитное поле режима округления для чтения и записи. Оно будет округляться до ближайших указанных значений.

пример: rne - округление до ближайшего четного

5. ВЕКТОРНАЯ НАСЫЩЕННОСТЬ: vsat

Удерживает 1 бит чтения-записи, который указывает, насыщена ли инструкция с фиксированной запятой.

Дополнительно: 6. fcsr: ВЕКТОРНЫЕ ФИКСИРОВАННЫЕ ПОЛЯ ТОЧКИ

Регистр fcsr необходимо добавлять в системы без чисел с плавающей запятой, которые добавляют векторное расширение.

МОДУЛЬ 3: РЕАЛИЗАЦИЯ

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

Из двух вышеупомянутых основных модулей мы получаем представление, которое заставляет нас представлять. Для реализации вышеприведенных инструкций мы будем следовать формату.

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

Просто в качестве домашнего задания введите свою векторную инструкцию САМОИЗДЕЛЕННОЙ в разделе комментариев, вы можете свободно использовать указанный выше формат так, как хотите.

Удачи.

ИСПОЛЬЗОВАННАЯ ЛИТЕРАТУРА

ССЫЛКИ:



Https://en.wikipedia.org/wiki/RISC-V#Packed_SIMD

ЗАБРОНИРОВАТЬ:

The RISC-V Reader: Атлас открытой архитектуры
Книга Эндрю Уотермана и Дэвида А. Паттерсона