我目前正在使用CUDA,Thrust和cuBLAS在GPU上实现随机梯度下降。
在我最初的实现中,我使用普通的CUDA来执行矩阵向量运算,现在我试图通过使用cuBLAS来优化这种操作。
我目前观察到的是,对于大小为x行的矩阵,对于少量的cols,普通CUDA始终优于cuBLAS,显然无论行数多少。 然而,对于大量的cols,cuBLAS实现会胜出。
所以我想知道:是否有关于什么应该是矩阵/向量的最小维度的经验法则/指南,之后使用BLAS或cuBLAS将比普通C / CUDA表现更好,或者这完全取决于申请/ BLAS功能?
答案 0 :(得分:1)
我已经运行了一些基准测试,我将在此处发布: 结果是针对具有10000行的数据集运行10次SGD迭代的线性回归任务。此处提供了实施和更多结果:https://github.com/thvasilo/cuda-sgd-sese-project
10-100个功能/列的运行时:
因此,对于我的实现,普通CUDA变慢的变化点是50列。 CuBLAS的100个功能在运行时有一个跳跃,但这可能是一个神器,这些实验只运行一次,差异也不大。
当运行更多列BLAS Lvl时。 2始终如一地表现得更好: