在CUDA中组织矩阵运算的最佳方法是什么(在性能方面)?
例如,我想计算C * C^(-1) * B^T + C
,C
和B
是矩阵。
我应该为乘法,换位等编写单独的函数,还是为整个表达式编写一个函数?
哪种方式最快?
答案 0 :(得分:1)
我建议你使用CUBLAS库。它通常比您自己编写的所有内容都要大得多,也更可靠。此外,它的API类似于BLAS库,它是数值线性代数的标准库。
答案 1 :(得分:0)
我认为答案在很大程度上取决于你的矩阵的大小。
如果你可以在共享内存中使用矩阵,我可能会使用一个块来计算它并将所有内容都放在一个内核中(可能更大,这个计算只是其中的一部分)。希望如果你有更多的矩阵,并且你需要多次计算上面的等式,你可以利用所有GPU计算能力并行完成。
但是,如果你的矩阵要大得多,你需要更多的块来计算它(在CUDA手册中检查矩阵乘法示例)。在进行等式的下一部分之前,需要保证所有块都完成乘法,如果是,则需要为每个操作调用内核。