我可以手动固定存储器以便与CUDA一起使用吗?

时间:2015-11-04 15:47:26

标签: linux memory cuda

我有一个现有的Linux应用程序,我想用CUDA加速。应用程序从另一个进程流入数据,对该数据应用一些信号处理操作,并将数据流出到后续进程(这个意义上的“进程”是指操作系统意义上的术语)。

用于流式传输数据的IPC方法由我的应用程序运行的框架决定。也就是说,命名共享内存块在每个进程之间用作循环缓冲区:当我的应用程序在其输出中有可用数据时,它以循环方式将其写入共享内存块。

为了获得我的应用程序的CUDA版本的最大吞吐量,我想重叠以下所有内容:

  1. N个输入数据块复制到设备。
  2. 设备对N-1 - 输入数据块的处理。
  3. N-2个输出数据块从设备复制到主机。
  4. 据我所知,要实现与所有这些操作的重叠,我必须在主机上使用固定内存。但是,我的输入/输出共享内存缓冲区是由框架分配的,这是我无法控制的;我不能让它分配固定内存。我可以复制到中间缓冲区,但这会增加我的应用程序的内存占用,这是不可取的。理想情况下,我想改为固定现有的共享内存缓冲区。

    有没有一种方法,给定一个任意的虚拟内存块,我可以固定它,使其适合与异步重叠的CUDA内存副本一起使用?基于其手册页,mlock()函数听起来像它可能做我想要的。这里有什么陷阱吗?

0 个答案:

没有答案