![]() |
ИСТИНА |
Войти в систему Регистрация |
Интеллектуальная Система Тематического Исследования НАукометрических данных |
||
Использование графических ускорителей (GPU) позволяет получить заметное ускорение для многих вычислительных алгоритмов. Однако, для эффективного использования GPU необходима специализированная реализация этих алгоритмов с учетом особенностей архитектуры ускорителей. Так, операция умножения разреженной матрицы на вектор (SpMV) является одной из ключевых в итерационных алгоритмах решения систем линейных алгебраических уравнений (СЛАУ), а для хранения разреженных матриц широко используется формат Compressed Sparse Row (CSR). Однако, базовый вариант реализации алгоритма умножения матрицы в формате CSR на вектор (скалярный SpMV), аналогичный используемому на центральных процессорах (CPU), показывает низкую производительность на графических ускорителях из-за несбалансированной нагрузки между вычислительными ядрами и нерегулярного доступа к памяти. Был проведен обзор литературы и алгоритмов реализации операции SpMV для CSR формата на CUDA, изучены подходы к оптимизации вычислений на GPU, освоены способы решения проблем снижения производительности, при реализации алгоритма SpMV. В результате исследования были выбраны и реализованы в рамках библиотеки численных методов XAMG два алгоритма — векторный и адаптивный SpMV. На наборе разреженных матриц проведено сравнительное тестирование двух реализованных алгоритмов умножение матрицы на вектор и сопоставление с библиотекой NVIDIA cuSPARSE. Получено, что адаптивный вариант алгоритма умножения матрицы на вектор, в среднем, работает в 1.4 раза быстрее, чем векторный вариант. Время работы адаптивного варианта SpMV в библиотеке XAMG сравнимо с таковым для библиотеки cuSPARSE, с разбросом в пределах ± 10%. Для решения СЛАУ использовался алгоритм Preconditioned BiCGStab с предобуславливателем MultiGrid и сглаживателями Jacobi. Достигаемое ускорение при переходе от CPU к GPU при решении СЛАУ в среднем составляет порядка 9 раз, также при этом находясь в широком диапазоне от 4 до 15 раз для разных матриц.