Основная папка с кодом - MatMul/
Сборка:
mkdir MatMul/build
cd MatMul/build
cmake ..
make
Запуск разных вариантов перемножения:
- Самый простой вариант
./MatMul --simple --matrix *высота первой* *размер смежных сторон* *длина второй*
- Оптимизирванный с помощью tile-ов и константной памяти:
./MatMul --tiled --matrix *высота первой* *размер смежных сторон* *длина
- Оптимизированный с помощью tile-ов и транспонирования:
./MatMul --transposed --matrix *высота первой* *размер смежных сторон* *длина
--check- проверяет правильность умножения и выводит врем на cpu--params- печатает характеристики системы
./MatMul --matrix 2048 1024 1024 --tiled --check
Сам кернел длилися 19ms, с учетом копирования памяти все умнодение длилось 150ms.
На GPU аналогичная матрица считалась 34,020ms.
Матрицы {4096, 4096} x {4096, 4096} считались на GPU 1072ms(с учеом копирования). На CPU - неизвестно сколько.
Все умножения проводились на матрицах {4096, 4096} x {4096, 4096}, везде по 16x16 трдов в блоке.
- Без оптимизаций:
926ms(без учета копирования памяти) - С оптимизацияей shared memory:
632ms(без учета копирования памяти) - С транспонированием и shared memory:
648ms(результат такой же поскольку из глобльной памяти копируются tile-ы а не строки матрицы)
Number of the devices: 1
Parameters of the device 0:
Global memory size: 6225002496
Shared memory size (per block): 49152
Constant memory size: 65536
Regs per block: 65536
Max threads per block: 1024
Max threads dim: {1024, 1024, 64}
Max grid dim: {2147483647, 65535, 65535}
Clock rate: 1590000