这应该很简单,但我找不到详尽的答案:
我需要用矩阵执行 A+B = C,其中 A 和 B 是两个未知大小的矩阵(它们可以是 2x2 或 20.000x20.000 作为最大值)
我应该使用带有 Sgemm 函数的 CUBLAS 来计算吗?
我需要可达到的最大速度,所以我想到了应该优化的 CUBLAS 库
对于任何类型的技术计算,您应该始终使用优化的库(如果可用)。现有的库,被数百人使用,将比你自己做的任何事情都得到更好的测试和更好的优化,而且你不花时间编写(以及调试和优化)功能自己可以更好地花在工作上您想要解决的实际高级问题,而不是重新发现其他人已经实施的事情。这只是劳动力的基本专业化;专注于您想要解决的计算问题,并让那些花费大量时间专业编写 GPGPU 矩阵例程的人来为您解决这些问题。
只有当您确定现有库不能满足您的需求时——也许它们解决了过于笼统的问题,或者做出了某些不适合您的假设——您才应该自己动手。
我同意其他人的观点,在这种特殊情况下,操作非常简单,DIY 是可行的;但是,如果您在添加完这些矩阵后还要对这些矩阵做任何其他事情,那么最好为您所在的任何平台使用优化的 BLAS 例程。
您想要做的事情在 CUDA 中实现起来很简单,并且会受到带宽限制。
从 CUBLAS5.0 开始,可以使用 cublasgeam。它计算 2 个可选转置矩阵的加权和。