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