简单的 CUBLAS 矩阵乘法示例?
Posted
技术标签:
【中文标题】简单的 CUBLAS 矩阵乘法示例?【英文标题】:Simple CUBLAS Matrix Multiplication Example? 【发布时间】:2011-11-30 00:21:36 【问题描述】:我正在寻找一个非常简单的 CUBLAS 矩阵乘法示例,它可以使用高性能 GPU 操作将 M 乘以 N 并将结果放在 P 中以用于以下代码:
float M[500][500], N[500][500], P[500][500];
for(int i = 0; i < Width; i++)
for(int j = 0; j < Width; j++)
M[i][j] = 500;
N[i][j] = 500;
P[i][j] = 0;
到目前为止,我发现使用 CUBLAS 进行任何类型的矩阵乘法的大多数代码(似乎?)都过于复杂。
我正在尝试设计一个基础实验室,学生可以在其中比较 GPU 上的矩阵乘法与 CPU 上的矩阵乘法的性能,大概是在 GPU 上提高了性能。
【问题讨论】:
您是否认为 CUDA SDK 中的 simpleCublas 示例“过于复杂”? 是的。我的意思是,如果这很简单,我想我们只需要处理它。我只是希望有某种代码具有明显的 CPU 等效性,这样我们就可以对两者进行计时并比较结果。 我是 500 级数据结构类的 GTA。因此,我们已经为它们提供了如此丰富的细节,用于编程各种树、堆和其他数据结构以及相关的 C++ 和实验约定,以至于让他们了解到 CUBLAS 的许多语法细节确实超出了相关信息的范围类。 CUBLAS 线性代数调用本身只遵循与standard BLAS 相同的语法/API,这绝对是事实上的线性代数 API 和库,自 1980 年代编写以来一直存在。使用 GPU 意味着使用具有非均匀内存空间的系统,因此会产生一些额外的 API 开销。因此,如果您认为其中任何一个都超出了您要教授的内容的上限,那么我认为您不走运。 好的。感谢您提供背景信息。我会继续环顾四周。我可能需要就 SO 提出更一般的问题。我所需要的只是一些尽可能简单的示例,我可以使用 CUDA 展示 GPU 在任何类型的算法任务上都优于 CPU。 【参考方案1】:SDK 包含 matrixMul,它说明了 CUBLAS 的使用。有关更简单的示例,请参阅CUBLAS manual 1.3 节。
matrixMul 示例还显示了一个自定义内核,当然它的性能不如 CUBLAS。
【讨论】:
【参考方案2】:CUBLAS 没有必要证明 GPU 的性能优于 CPU,尽管 CUBLAS 的性能可能会更胜一筹。如果给定足够大的数据集,许多简单的 CUDA 实现(包括矩阵乘法)似乎可以胜过 CPU,如下所述:
Simplest Possible Example to Show GPU Outperform CPU Using CUDA
【讨论】:
以上是关于简单的 CUBLAS 矩阵乘法示例?的主要内容,如果未能解决你的问题,请参考以下文章
使用 cublas gemm 函数 (cublasSgemm) 的乘法矩阵大小上限