【发布时间】:2016-05-15 16:10:56
【问题描述】:
我目前正在使用 CUDA、Thrust 和 cuBLAS 在 GPU 上实现随机梯度下降。
在我最初的实现中,我使用普通的 CUDA 来执行矩阵向量运算,现在我试图通过使用 cuBLAS 来优化这一点。
我目前观察到的是,对于大小为行 x 列的矩阵,对于少量列,普通 CUDA 始终优于 cuBLAS,显然与行数无关。 然而,对于大量的列,cuBLAS 实现胜出。
所以我想知道:关于矩阵/向量的最小维度应该是多少,是否有任何经验法则/指南,之后使用 BLAS 或 cuBLAS 将比普通 C/CUDA 表现更好,或者这完全取决于应用程序/BLAS 函数?
【问题讨论】:
-
请注意,BLAS2(矩阵向量)操作往往受到内存吞吐量的限制。如果可能,您会希望使用 BLAS3 操作。有许多不同的 BLAS2 操作,每个操作都有自己的性能特征(可能会因 GPU 架构而进一步不同),所以你的问题似乎太宽泛了。检查任何批处理操作是否适用于您的用例,因为它们为小型矩阵提供了更好的性能,否则只使用部分机器资源。
-
您所做的正是您链接到的问题 - 为您的问题规模域和硬件进行基准测试,并使用该数据来驱动您的启发式方法。我非常很想把它作为那个问题的重复来结束。
-
@talonmies 我想知道是否有人已经有这方面的经验。我已经运行了基准测试并作为答案发布,我希望没问题。