Векторные команды

Эффективные методы реализации моделей ИИ

Constantine Korikov
Константин Кориков
PhD, AI Research Engineer
Домашнее задание 5 мин
sim8 v3 25 мин
Ассемблерная эстафета 30 мин

Домашнее задание

Занятие 05

sim8 v3

Векторный модуль (VU) поверх FPU-ядра

Один элемент за раз

Скалярная инструкция обрабатывает один элемент за такт.

64 элемента → 256 тактов в цикле.

VL элементов за команду

Векторная инструкция обрабатывает VL элементов за одну команду.

64 элемента → 4 такта (16 байт / такт).

$$S = \frac{1}{(1 - p) + \dfrac{p}{n}}$$

Предел ускорения

Ускорение ограничено долей кода, которую нельзя распараллелить.

\(p\) — доля параллелизуемого кода, \(n\) — число параллельных юнитов.

Регистры VA, VB, VC, VM, VL
Форматы .F .H .BF .O3 .O2 .U .I
Арифметика VADD VSUB VMUL VDIV VDOT
Унарные VSQRT VNEG VABS
Сравнение VCMP VSEL VMAX VMIN
Память VMOV VFILL VSET
Синхронизация VWAIT VFSTAT VFCLR

Ассемблерная эстафета

4 задания

Сумма массива

\(\sum_{i} x_i\)

Массив из 10 чисел (UINT8). Посчитайте сумму используя векторные инструкции. Результат запишите в регистр A.

Скалярная версия → Занятие 02

Скалярное произведение

\(\mathbf{a} \cdot \mathbf{b} = \sum_{i} a_i b_i\)

Два вектора длины 5 (UINT8). Вычислите скалярное произведение с помощью векторных инструкций. Результат запишите в регистр A.

Скалярная версия → Занятие 02

Матрица × вектор

\(\mathbf{y} = W\mathbf{x}\)

Матрица W [2,3] и вектор x [3] в формате OFP8 E4M3. Реализуйте умножение матрицы на вектор с помощью векторных инструкций. Результат (float16) запишите в res.

FP-версия → Занятие 04

Softmax

$$\text{softmax}(x_i) = \frac{e^{x_i - \max}}{\sum_j e^{x_j - \max}}$$

Вектор logits в формате float16. Вычислите softmax с помощью векторных инструкций. Вычитание max стабилизирует экспоненту. Результат запишите в res.