如果我使用BLAS / cuBLAS比普通的C / CUDA表现更好,矩阵应该有多大?

时间:2016-02-05 15:54:15

标签: c++ cuda blas cublas

我目前正在使用CUDA,Thrust和cuBLAS在GPU上实现随机梯度下降。

在我最初的实现中,我使用普通的CUDA来执行矩阵向量运算,现在我试图通过使用cuBLAS来优化这种操作。

我目前观察到的是,对于大小为x行的矩阵,对于少量的cols,普通CUDA始终优于cuBLAS,显然无论行数多少。 然而,对于大量的cols,cuBLAS实现会胜出。

所以我想知道:是否有关于什么应该是矩阵/向量的最小维度的经验法则/指南,之后使用BLAS或cuBLAS将比普通C / CUDA表现更好,或者这完全取决于申请/ BLAS功能?

1 个答案:

答案 0 :(得分:1)

我已经运行了一些基准测试,我将在此处发布: 结果是针对具有10000行的数据集运行10次SGD迭代的线性回归任务。此处提供了实施和更多结果:https://github.com/thvasilo/cuda-sgd-sese-project

10-100个功能/列的运行时:

enter image description here

因此,对于我的实现,普通CUDA变慢的变化点是50列。 CuBLAS的100个功能在运行时有一个跳跃,但这可能是一个神器,这些实验只运行一次,差异也不大。

当运行更多列BLAS Lvl时。 2始终如一地表现得更好:

enter image description here