CUDA - простая операция сложения / суммирования матрицы - PullRequest
4 голосов
/ 24 марта 2011

Это должно быть очень просто, но я не смог найти исчерпывающий ответ:

Мне нужно выполнить A + B = C с матрицами, где A и B - две матрицы неизвестного размера (они могут быть 2x2 или 20.000x20.000 как наибольшее значение)

Должен ли я использовать CUBLAS с функцией Sgemm для расчета?

Мне нужна максимально возможная скорость, поэтому я подумал о библиотеке CUBLAS, которая должна быть хорошо оптимизирована

Ответы [ 3 ]

3 голосов
/ 24 марта 2011

Для любого рода технических вычислений вы должны всегда использовать оптимизированные библиотеки, когда они доступны. Существующие библиотеки, используемые сотнями других людей, будут лучше протестированы и лучше оптимизированы, чем все, что вы делаете сами, и время, которое вы не тратите на написание (и отладку и оптимизацию) этих функций, может быть лучше потрачено на работу настоящая проблема высокого уровня, которую вы хотите решить вместо того, чтобы заново открывать вещи, которые уже реализовали другие люди. Это просто основная специализация рабочей силы; Сосредоточьтесь на вычислительной проблеме, которую вы хотите решить, и пусть люди, которые проводят свои дни профессионально, создавая подпрограммы для матриц GPGPU, сделают это за вас.

Только когда вы уверены, что существующие библиотеки не делают то, что вам нужно - возможно, они решают слишком общую проблему или делают определенные предположения, которые не выполняются в вашем случае - если вы выберете свою собственную.

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

1 голос
/ 26 сентября 2012

И начиная с CUBLAS5.0, cublasgeam может использоваться для этого. Он вычисляет взвешенную сумму 2 необязательно транспонированных матриц.

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

То, что вы хотите сделать, было бы тривиально реализовать в CUDA и с ограниченной пропускной способностью.

...