Линейная алгебра на видеокарте

Перед вам программа, реализующая базовые операции линейной алгебры. В программе реализованы перемножение вектор-вектор, матрица-вектор и матрица-матрица с использованием OpenMP. На OpenCL реализовано только перемножение вектор-вектор. Вам нужно сделать остальные реализации.

Задания

  1. Реализуйте умножение матрицы на вектор, соблюдя условия ниже. Время работы OpenCL (колонка OpenCL total) должно быть сопоставимо со временем работы на OpenMP (колонка OpenMP).
  2. Реализуйте умножение матрицы на матрицу, соблюдя условия ниже. Время работы OpenCL (колонка OpenCL total) должно быть меньше времени работы на OpenMP (колонка OpenMP).

Условия

Исходный код

module load gpc-2021
git clone https://courses.igankevich.com/gpu-programming/super-boring-task.git
cd super-boring-task
make
./build/super-boring-task

Пример вывода

Platform name: Clover
Device name: AMD Radeon (TM) R7 300 Series (BONAIRE, DRM 3.37.0, 5.7.15, LLVM 10.0.0)

Function               OpenMP  OpenCL total  OpenCL copy-in  OpenCL kernel  OpenCL copy-out  OpenMP bandwidth    OpenCL bandwidth
vector-times-vector   11386us       95144us         44662us          844us          49637us         33.15GB/s          447.26GB/s
matrix-times-vector   29430us           0us             0us            0us              0us         42.76GB/s            0.00GB/s
matrix-times-matrix  740534us           0us             0us            0us              0us          0.05GB/s            0.00GB/s