1

我有兴趣了解在计算矩阵乘法(C = A * B)时如何在 GPU 上映射cublasSgemm/例程。clAmdBlasSgemm

假设输入矩阵的维度 ::A_rows = 6144; A_cols = 12288; B_rows = 12288; B_cols = 15360;

和结果矩阵的维度 :: C_rows = 6144; C_cols = 15360;

假设我已经在主机上初始化了输入矩阵,并且我将矩阵数据复制到了设备内存中。之后,我调用以下程序cuBlasclAmdBlas例程在 GPU 上进行矩阵乘法。

void cublasSgemm (char transa, char transb, int m, int n, int k, float alpha, const float *A, int lda, const float *B, int ldb, float beta, float *C, int ldc);

其中 m = A_rows;和 n = B_cols;

所以我的疑问是:
1.)这些例程是如何在 GPU 上实现的?
2.) m 和 n 值是否映射在一个计算单元 (SM) 上?如果否,那么 m 和 n 的最大值是多少?
3.) 我们是否可以控制线程/块?

4

2 回答 2

1

对于主机端 CUBLAS API(请注意,我不知道为什么您会假设 clAmdBlasSgemm 相同),您的问题的简短回答如下:

  1. 现代 CUBLAS 是封闭源代码。有像Magma这样的代码库,你至少可以了解一下 CUBLAS是如何实现的。您还可以在 NVIDIA 提供的分析器之一中运行 CUBLAS 代码,以查看它在 GPU 上的作用。但关键是你不需要知道它是如何工作的。有一个 API 和一些非常详尽的文档。这就是你需要知道的。
  2. 您的示例问题需要大约 1.2Gb 的内存。如果您有一个具有这么多内存的 GPU,并且有足够的计算能力来避免显示驱动程序看门狗计时器,或者有一个计算专用的 GPU,它就会工作。内存和显示驱动程序时间限制(如果适用)是唯一的限制。
  3. 不。

请注意,还有一个用于 K20 Kepler 设备的 CUBLAS 设备 API,我上面提供的答案不适用于该库。

于 2013-02-13T10:46:34.970 回答
0

在继续之前,您必须阅读 Volkov 和 Demmel 的论文,看看这里:http ://www.cs.berkeley.edu/~volkov/查看他关于 SGEMM 的文章。自 2008 年以来,答案就在那里。

于 2013-05-12T18:21:08.417 回答