Линейная алгебра на видеокарте
Перед вам программа, реализующая базовые операции линейной алгебры. В программе реализованы перемножение вектор-вектор, матрица-вектор и матрица-матрица с использованием OpenMP. На OpenCL реализовано только перемножение вектор-вектор. Вам нужно сделать остальные реализации.
Задания
- Реализуйте умножение матрицы на вектор, соблюдя условия ниже.
Время работы OpenCL (колонка
OpenCL total
) должно быть сопоставимо со временем работы на OpenMP (колонкаOpenMP
). - Реализуйте умножение матрицы на матрицу, соблюдя условия ниже. Время работы OpenCL (колонка
OpenCL total
) должно быть меньше времени работы на OpenMP (колонкаOpenMP
).
Условия
- Верификация проходит успешно.
- Ядро использует локальную память для ускорения.
- Исходный код написан на C/C++.
- Код собирается с максимальной оптимизацией (флаги компилятора
-O3 -march=native
).
Исходный код
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