Должен ли я использовать CUDA здесь?


Я должен умножить очень маленькую матрицу (размер-10x10) с вектором в несколько раз от 50000 до 100000 раз ( может быть даже больше). Это происходит для 1000 различных матриц (может быть гораздо больше). Будет ли какой-либо значительный прирост производительности при выполнении этой операции на CUDA?

3 3

3 ответа:

Да, это идеальная задача для графического процессора.

Если вы хотите умножить одну матрицу с вектором 50K раз, и каждое умножение является обязательным условием для предыдущего, то не используйте CUDA. Это серийная проблема, лучшие комплекты для процессора. Однако если каждое умножение независимо, вы можете умножить их одновременно на CUDA.

Единственный случай, когда ваша программа даст огромное ускорение, - это когда каждая итерация умножения вектора независима от данных других итераций. Таким образом, Вы сможете запустить 50K или больше итерации одновременно путем запуска равного количества потоков.

В зависимости от того, что именно вы делаете, то да, это может быть сделано очень быстро на GPU, но вам, возможно, придется запустить собственное ядро, чтобы получить от него хорошую производительность.

Не зная больше о вашей проблеме, я не могу дать вам слишком много советов. Но я мог бы порассуждать о решении: Если вы возьмете один вектор и умножите его на одну и ту же матрицу несколько тысяч раз, вам будет гораздо лучше найти замкнутую форму матрицы в произвольной степени. Вы можно сделать это, используя теорему Кэли–Гамильтона или каноническую форму Джордана.

Я, кажется, не могу найти реализацию этого из быстрого гугла, но, учитывая, что я сделал это на первом курсе линейной алгебры, это не так уж плохо. Некоторую информацию о нормальной форме Джордана и повышении ее до степеней можно найти в http://en.wikipedia.org/wiki/Jordan_normal_form#Powers и матрицы преобразования его-это просто матрица собственных векторов, и обратная этой матрице.

Скажи, что ты есть матрица A, и вы находите жорданову нормальную форму J, А матрицы преобразований P, P^-1, вы находите

A^n = P J^n P^-1

Я не могу найти хорошую ссылку на реализацию этого, но вычисление замкнутой формы матрицы 10x10 будет значительно менее трудоемким, чем 50 000 умножений матрицы. И реализация этого, вероятно, будет работать намного быстрее на процессоре.

Если это ваша проблема, вы должны разобраться в этом.