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

How large should matrices be if I use BLAS/cuBLAS for it to perform better than plain C/CUDA?

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

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

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

所以我想知道:thumb/guidelines 是否有关于 matrices/vectors 的最小尺寸的任何规则,之后使用 BLAS 或 cuBLAS 会比普通 C/CUDA 表现更好,或者这完全取决于 application/BLAS 函数?

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

10-100 的运行时间features/columns:

所以对于我的实现,普通 CUDA 变慢的变化点是在 50 列。 cuBLAS 的 100 个特征的 运行 时间有一个跳跃,但这可能是一个人为因素,这些实验只有 运行 一次而且差异并不大。

当 运行 更多列 BLAS Lvl。 2 始终表现更好: