我从主机上的多媒体数据集中提取功能,我想在从所有图像中提取功能后执行一些处理任务。
特别是,我想执行一系列操作,如距离计算和数据库索引或散列的预处理,可能在GPU上加速。但是,与顺序处理相比,传输大型特征数组会花费太多,并且会降低性能。
任何人都可以提出一种方法来处理需要传输大型数据集的大型数据密集型任务吗?
答案 0 :(得分:1)
通过使用异步内存副本和流来尝试重叠内存传输和计算,可以隐藏传输大型数组的成本。
要完全理解如何,查看simpleStreams CUDA SDK示例非常有用。在这里,它只是概述了一般的想法。
让我们假设GPU必须通过名为{的int
函数对长度为a
的{{1}}个数组b
和M
执行某些操作{1}}并且此类操作的结果(长度为__global__
)也存储在数组kernel
中。假设创建M
个流,c
和2
,并且每个流都在stream0
元素上运行。更详细地说,每个流以长度为stream1
的块加载和处理数据。让我们考虑以下代码(此代码仅供参考,因为我没有测试过它):
M/2
假设为了说明,每个操作将花费相同的时间,那么内存传输和计算之间的重叠将类似于:
M/4
在这个例子中(其目的只是概述一般概念),假设该设备没有并发的双向数据传输能力。当此功能可用时,其他方案可能会更有效。