Image processing CUDA:减轻多媒体数据主机到设备传输带来的开销?

Image processing CUDA:减轻多媒体数据主机到设备传输带来的开销?,image-processing,cuda,gpu,multimedia,large-data,Image Processing,Cuda,Gpu,Multimedia,Large Data,我正在从主机上的多媒体数据集中提取特征,我想在从所有图像中提取特征后执行一些处理任务 特别是,我想执行一系列操作,如距离计算和数据库索引或哈希的预处理,可能在GPU上加速。但是,与顺序处理相比,传输大型特征阵列的成本太高,并且降低了性能 有人能提出一种方法来处理需要传输大型数据集的大型数据密集型任务吗 通过使用异步内存拷贝和流,尝试重叠内存传输和计算,可以隐藏传输大型阵列的成本 要完全理解如何使用,请查看simpleStreams CUDA SDK示例。在这里,这只是一个大概的想法 让我们假设G

我正在从主机上的多媒体数据集中提取特征,我想在从所有图像中提取特征后执行一些处理任务

特别是,我想执行一系列操作,如距离计算和数据库索引或哈希的预处理,可能在GPU上加速。但是,与顺序处理相比,传输大型特征阵列的成本太高,并且降低了性能


有人能提出一种方法来处理需要传输大型数据集的大型数据密集型任务吗

通过使用异步内存拷贝和流,尝试重叠内存传输和计算,可以隐藏传输大型阵列的成本

要完全理解如何使用,请查看simpleStreams CUDA SDK示例。在这里,这只是一个大概的想法

让我们假设GPU必须通过名为
内核
函数对长度
M
的两个
int
数组
a
b
执行一些操作,并且这样一个操作的结果(同样长度
M
)存储在数组
c
。假设创建
2
流、
stream0
stream1
,并且每个流在
M/2
元素上运行。更详细地说,每个流加载和处理长度为
M/4
的数据块。让我们考虑下面的代码(这个代码只是为了说明我没有测试过):


在本例中(其目的只是勾勒出总体思路),假设设备没有并发双向数据传输能力。当此功能可用时,其他方案可能会更有效。

如果您的问题可能,您可以尝试使用异步内存传输和流来重叠内存传输和计算。看一看simpleStreams CUDA SDK示例。谢谢。我将尝试此示例,并尝试进行优化。尝试分析计时。。您将其与简单CPU版本进行比较,还是您已经有了一些类似openmp的并行处理?与简单的顺序实现相比,您肯定会获得更好的结果。@JackOLantern我认为您的评论是处理大型数据集的一种明智的、典型的方法。如果你能回答这个问题,我会投赞成票。谢谢。@RobertCrovella谢谢。我已将评论转换为答案。
for (int i=0; i<2; i++) {

    cudaMemcpyAsync(d_a+i*M/4, h_a+i*M/4, (M/4)*sizeof(int), cudaMemcpyHostToDevice, stream0));
    cudaMemcpyAsync(d_a+i*M/4+M/2, h_a+i*M/4+M/2, (M/4)*sizeof(int), cudaMemcpyHostToDevice, stream1));
    cudaMemcpyAsync(d_b+i*M/4, h_b+i*M/4, (M/4)*sizeof(int), cudaMemcpyHostToDevice, stream0));
    cudaMemcpyAsync(d_b+i*M/4+M/2, h_b+i*M/4+M/2, (M/4)*sizeof(int), cudaMemcpyHostToDevice, stream1));

    kernel<<<(M/4)/256,256,0,stream0>>>(d_a+i*M/4, d_b+i*M/4, d_c+i*M/4);
    kernel<<<(M/4)/256,256,0,stream1>>>(d_a+i*M/4+M/2, d_b+i*M/4+M/2, d_c+i*M/4+M/2);

    cudaMemcpyAsync(h_c+i*M/4, d_c+i*M/4, (M/4)*sizeof(int), cudaMemcpyDeviceToHost, stream0));
    cudaMemcpyAsync(h_c+i*M/4+M/2, d_c+i*M/4+M/2, (M/4)*sizeof(int), cudaMemcpyDeviceToHost, stream1));

}
stream0    stream1    
a H2D
           a H2D
b H2D
kernel     b H2D
c D2H      kernel
           c D2H
...