Узкое место программы в решении СЛАУ. Несколько вариантов:
а) использовать имеющийся алгоритм (уже портировано и работает)
б) найти другой алгоритм, который был бы более оптимизирован для CUDA (меньше обращений к памяти, использование меньшей памяти -> возможность использования общей памяти блока)
в) использовать CUBLAS - что кардинально изменит программу.
Вопросы:
1. Какие алгоритмы вообще существуют - какими вы уже пользовались.
2. Стоит ли переносить все вычисления кроме решения СЛАУ на хост - иначе говоря, каким быстродействием обладает CUBLAS? Скорее всего не стоит, потому что решение системы делается в цикле с количеством итераций 10000 и больше. Но все же, может кто пробовал?
Неужто свой алгоритм на CPU
Неужто свой алгоритм на CPU оказался лучше BLAS?
Я к тому клоню, что лично я бы - перенес бы на BLAS, а уж какую реализацию использовать, CUDA или Intel или Goto - это вопрос второй....
Конечно, если у вас маленькие матрицы, свой вариант может быть лучше.
Свой алгоритм для КУДЫ есть и
Свой алгоритм для КУДЫ есть и работает на видеокарте. Но может блас работал бы быстрее, только тогда пришлось бы его много много раз вызывать, что не есть хорошо из за overhead с этим связанного. А пока все итерции проходят на видеокарте, но к сожалению из девайс кода нельзя вызывать функции бласа а код его не открыт )
Как я понимаю, в cuBLAS
Как я понимаю, в cuBLAS сейчас Волковский sgemm, исходники которого вполне доступны.
http://www.eecs.berkeley.edu/~volkov/