Умножение больших матриц на графическом процессоре

Мне нужно реализовать умножение матриц на графическом процессоре с CUDA для больших матриц. Размер каждой матрицы в отдельности больше, чем память графического процессора. Поэтому я думаю, что мне нужен алгоритм, чтобы делать это эффективно. Я поискал в Интернете, но не нашел. Кто-нибудь может дать мне название или ссылку на такие алгоритмы.

Спасибо


person Soroosh Khoram    schedule 28.01.2013    source источник
comment
А как насчет простого разделения матриц типа [A0;A1] * [B0 B1] = [A0*B0 A0*B1; A1*B0 A1*B1]? Возможно, это хорошее начало.   -  person kangshiyin    schedule 28.01.2013


Ответы (1)


На самом деле для этого не существует формального алгоритма; в общем, такого рода операции линейной алгебры, при которых задача целиком не сохраняется в памяти одновременно, называются операциями «вне ядра».

Чтобы решить эту проблему, вам не понадобится особо сложный алгоритм, только библиотека CUBLAS, карандаш и бумага. Например, вы можете разложить матричное произведение следующим образом:

введите описание изображения здесь

что дает вам четыре независимых операции умножения подматриц. Их можно рассчитать с помощью четырех вызовов CUBLAS gemm с использованием очень простого кода хоста. Вы можете распространить идею на любое количество подматриц, необходимое для соответствия размеру проблемы и мощности вашего графического процессора. Тот же принцип можно использовать для реализации задач умножения матриц на нескольких графических процессорах (см. Пример этот вопрос).

В качестве альтернативы вы можете найти рабочую реализацию этой точной идеи в разработанном Гарвардом SciGPU-GEMM кодовая база и в реализации linpack HPL-CUDA (отказ от ответственности: я связан с последней кодовой базой) .

person talonmies    schedule 28.01.2013
comment
+1. Откуда взялось разложение? Отличный ответ, конечно! - person Rekin; 28.01.2013
comment
@Rekin: Я не понимаю, о чем вы спрашиваете. Математика для этого пришла мне в голову, и изображение, которое вы видите, было обработано мной в LaTeX в гифку и загружено в службу хостинга изображений SO. - person talonmies; 28.01.2013
comment
Извините, я имел в виду математическую формулу. Некоторое время назад я ходил на занятия по алгебре, и тема большого умножения матриц была представлена ​​как одна из самых проблематичных для решения с помощью вычислений. Это оставило у меня ложное ощущение, что это невозможно. - person Rekin; 28.01.2013
comment
@Rekin в блочно-матричных алгоритмах линейной алгебры является центральной темой для эффективной численной реализации. См. здесь и узнайте, как вычисления блочной матрицы организованы внутри lapack - person Stefano M; 29.01.2013