1

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

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

// A + B + C with CUBLAS' cublasSaxpy

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

我是否应该通过调用类似的方法将这些内核合并为一个

multiplyBbyX_AbyY_CbyZ<<<>>>(B,A,C)

?

全局内存应该已经在设备上,所以这可能无济于事,但我不完全确定

4

2 回答 2

0

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

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

于 2012-04-14T20:15:47.057 回答
0

如果合并内核意味着您只能通过一次内存,那么您可能会看到 3 倍的加速。

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

于 2012-04-14T21:35:14.893 回答