首页 文章

并发内核执行需要使用固定内存

提问于
浏览
1

可以通过CUDA利用一些不同形式的任务并行性 . 我们可以与内核执行并行执行复制内存 . 在这种情况下,我们必须使用cudaHostAlloc将主机内存分配为固定内存,并且可以使用流来并行执行事物 . 但是,如果我只对使用流并行运行几个内核感兴趣,我必须使用固定内存,还是可以使用普通的unpinned内存(即使用malloc)?

谢谢,

1 回答

  • 2

    只要您在单独的流中调用内核,CUDA就会尝试并行运行这些内核 .

    内核只能引用有设备内存地址的内存;获取主机内存的设备内存地址的唯一方法是将其分配为映射固定内存 . 如果启用UVA,则会自动执行此操作;否则你必须使用cudaDeviceMapHost调用cudaSetDeviceFlags(),并使用cudaHostAllocMapped标志调用cudaHostAlloc() .

    因此,如果目标是同时运行以引用固定内存的内核,那么您的问题的答案是肯定的,您必须使用固定内存并且必须映射该内存 .

相关问题