0

我正在尝试理解 CUDA 流,并且我已经用流制作了我的第一个程序,但是它比通常的内核函数慢...

为什么这段代码比较慢

cudaMemcpyAsync(pole_dev, pole, size, cudaMemcpyHostToDevice, stream_1);    
addKernel<<<count/100, 100, 0, stream_1>>>(pole_dev);
cudaMemcpyAsync(pole, pole_dev, size, cudaMemcpyDeviceToHost, stream_1);
cudaThreadSynchronize();  // I don't know difference between cudaThreadSync and cudaDeviceSync
cudaDeviceSynchronize();  // it acts relatively same...

比:

cudaMemcpy(pole_dev, pole, size, cudaMemcpyHostToDevice);
addKernel<<<count/100, 100>>>(pole_dev);
cudaMemcpy(pole, pole_dev, size, cudaMemcpyDeviceToHost);

我认为它应该运行得更快......变量计数的值是 6 500 000(最大值)......第一个源代码需要 14 毫秒,第二个源代码需要 11 毫秒。

谁能给我解释一下,好吗?

4

1 回答 1

2

在这个片段中,您喜欢只处理单个流 ( stream_1),但这实际上是 CUDA 在您不显式操作流时自动为您做的事情。

要利用流和异步内存传输,您需要使用多个流,并通过每个流拆分数据和计算。

于 2012-12-09T09:58:38.947 回答