调用多个内核,全局内存性能 - CUDA

时间:2012-04-14 18:38:50

标签: c++ cuda gpu

我有四个CUDA内核以下列方式处理矩阵:

convolution<<<>>>(A,B);
multiplybyElement1<<<>>>(B);
multiplybyElement2<<<>>>(A);
multiplybyElement3<<<>>>(C);

// A + B + C with CUBLAS' cublasSaxpy

每个内核基本上(除了卷积优先)执行矩阵每个元素乘以一个在其常量内存中硬编码的固定值(以加快速度)。

我应该通过调用类似

的内容将这些内核加入到单个内核中
multiplyBbyX_AbyY_CbyZ<<<>>>(B,A,C)

全局内存应该已经在设备上,所以可能没有帮助,但我不完全确定

2 个答案:

答案 0 :(得分:0)

如果我理解正确,你会问你是否应该将三个“multiplybyElement”内核合并为一个内核,其中每个内核读取整个(不同的)矩阵,将每个元素乘以常量,并存储新的缩放基质

鉴于这些内核将受内存带宽限制(实际上没有计算,只是每个元素的一个乘法),除非你的矩阵很小,否则不可能从合并内核中获得任何好处,在这种情况下你会使用效率低下因为内核将串行执行(相同的流)。

答案 1 :(得分:0)

如果合并内核意味着你只能对内存进行一次传递,那么你可能会看到3倍的加速。

您可以预先将固定值相乘,然后在单个内核中进行单次乘法运算吗?