CUDA流比通常的内核慢

时间:2012-12-09 09:54:50

标签: performance asynchronous cuda cuda-streams

我正在尝试理解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毫秒。

有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:2)

在这个片段中,您只想处理一个流(stream_1),但实际上,当您没有明确地操纵流时,CUDA会自动为您做什么。

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