Матричные операции в CUDA - PullRequest
1 голос
/ 17 марта 2011

Каков наилучший способ организации матричных операций в CUDA (с точки зрения производительности)?Например, я хочу вычислить C * C^(-1) * B^T + C, C и B - матрицы.

Должен ли я написать отдельные функции для умножения, транспонирования и т. Д. Или написать одну функцию для всего выражения?

Какой путь самый быстрый?

Ответы [ 2 ]

1 голос
/ 17 марта 2011

Я бы порекомендовал вам использовать библиотеку CUBLAS. Как правило, он гораздо более страшный и надежный, чем все, что вы можете написать самостоятельно. Кроме того, его API похож на библиотеку BLAS, которая является стандартной библиотекой для числовой линейной алгебры.

0 голосов
/ 17 марта 2011

Я думаю, что ответ сильно зависит от размера ваших матриц.

Если вы можете разместить матрицу в разделяемой памяти, я бы, вероятно, использовал один блок для вычисления этого и имел бы все внутри одного ядра (возможно, больше, где это вычисление является лишь частью его). Надеемся, что если у вас есть больше матриц, и вам нужно вычислить вышеприведенное уравнение несколько раз, вы можете сделать это параллельно, используя всю вычислительную мощность GPU.

Однако, если ваши матрицы намного больше, вам понадобится больше блоков для их вычисления (посмотрите пример умножения матриц в руководстве CUDA). Вам нужна гарантия того, что умножение завершено на все блоки, прежде чем вы приступите к следующей части вашего уравнения, и если это так, вам потребуется вызов ядра для каждой из ваших операций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...