在调用cublasSgemm / clAmdBlasSgemm例程时,如何在GPU上映射线程/块?

时间:2013-02-13 07:16:56

标签: cuda opencl gpgpu blas cublas

我很想知道在计算矩阵乘法(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.)我们是否控制了线程/块?

2 个答案:

答案 0 :(得分:1)

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

  1. 现代CUBLAS是封闭源。有一些代码库,如Magma,您可以查看这些代码库,至少可以了解CUBLAS 可能的实现方式。您还可以在其中一个NVIDIA提供的分析器中运行CUBLAS代码,以查看它在GPU上的作用。但关键是你不需要知道它是如何工作的。有一个API和一些非常全面的文档。这就是你需要知道的全部。
  2. 您的示例问题需要大约1.2Gb的内存。如果你有一个拥有那么多内存的GPU,并且有足够的计算能力来避免display driver watchdog timer或计算专用GPU,那么它将会起作用。内存和显示驱动程序时间限制(如果适用)是唯一的限制。
  3. 没有
  4. 请注意,K20 Kepler设备还有一个CUBLAS设备API,我上面提供的答案不适用于该库。

答案 1 :(得分:0)

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