2011-11-27 73 views
2

从理论上讲,我们应该得到的性能增益,当我们使用CUDA,我实现高斯 - 塞德尔方法,并与流所需出奇时间比没有streams.Does更大的人有例子,其中我可以看到性能增益流(除样品给出的实例在同一时间作为内核处理将被执行SDK的目录不是如此有用)我们真的可以通过CUDA流获得性能提升吗?

回答

2

CUDA流使PCI Express的传输。由于Amdahl定律,只有进行数据传输和处理内核等量的工作负载将受益于CUDA流。要确定你的工作量是否将受益,配置文件或添加一些计时代码到你的应用程序,看看理论最大性能优势是什么。

注意的是,为了得到CUDA流的性能改进,你要“软件管道”的下载,内核启动,并上传。这样做:

foreach stream { 
    cudaMemcpyAsync(device[stream], host[stream], ... stream); 
} 
foreach stream { 
    LaunchKernel<<<...stream>>>(...); 
    // you can launch multiple kernels in stream, if desired. 
} 
foreach stream { 
    cudaMemcpyAsync(host[stream], device[stream], ... stream); 
} 

不是这个:

foreach stream { 
    cudaMemcpyAsync(device[stream], host[stream], ... stream); 
    LaunchKernel<<<...stream>>>(...); 
    cudaMemcpyAsync(host[stream], device[stream], ... stream); 
} 
1

是,在问题中,计算时间是显著和所有的数据是不是相互依存。然后,您可以将昂贵的计算时间隐藏在昂贵的内存传输中。

注意,CUDA可同时进行内存复制和内核执行,所以当一个流是做内存拷贝其他的都可以做计算。

相关问题