我正在尝试利用 GPU (nVidia Quadro NVS140M) 的强大功能来加快我项目中的一些矩阵计算。我正在阅读一些文档(编程指南、最佳实践指南和参考手册),但不确定我应该关注哪些部分。如果我能在这方面得到一些建议,那就太好了。
另外,我想知道是否有第三方维护的 SDK,例如 CuBLAS.net,可以在我坚持使用 cublas 提供的功能帮助我实现项目目标之前简化 cublas 开发过程。再次,提前感谢您的评论。
CUDA 工具包和 SDK 下载附带的大多数文档通常是关于 CUDA 的,而不是专门关于 CuBLAS 的。如果您只想使用 CuBLAS,请从文件开始CUBLAS_Library_2.3.pdf
——您不需要编写自己的 CUDA 内核。如果您已经在使用 CPU BLAS,CuBLAS 应该不难上手。(如果你不是,那么考虑在 CuBLAS 之前尝试一个优化的 CPU,因为它更容易编程)。
如果您在 .NET 上进行编码,那么使用 CuBLAS 的最简单方法可能是通过平台调用调用 cublas.dll。请务必明确哪些阵列位于主机 (CPU) 内存中,哪些位于设备 (GPU) 内存中。
请记住,CUDA 和 CuBLAS 不是灵丹妙药。性能取决于很多因素(尤其是通过 PCIe 总线的传输),简单地将 CUBLAS 调用交换为 CPU-BLAS 调用可能不会给您带来加速。您可能必须对自己的代码进行更多实质性更改才能获得性能改进。您提到的其他指南对于理解 CUDA 架构及其瓶颈非常有用。
编辑:我不清楚用户代码和内核代码之间的界限。CUBLAS 是一个预构建、优化的 CUDA 内核库。如果您只需要 BLAS 功能,则不需要编写自己的内核。相反,只需调用 CUBLAS 函数。在性能调整时,您不需要调整 CUBLAS 内核,但您可能需要更改调用它们的方式和时间,以及使用内存的方式,以最大限度地减少通过 PCI Express 总线的传输次数。