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

Memory 并发内核执行是否需要使用固定内存,memory,concurrency,cuda,locked,Memory,Concurrency,Cuda,Locked,CUDA可以利用几种不同形式的任务并行性。我们可以与内核执行并行地执行内存的来回复制。在这种情况下,我们必须使用cudaHostAlloc将主机内存分配为固定内存,并且可以使用流并行执行。但是,如果我只对使用流并行运行几个内核感兴趣,那么我必须使用固定内存还是可以使用普通的非固定内存(即使用malloc) 谢谢,只要您在不同的流中调用内核,CUDA就会尝试并行运行这些内核 内核只能引用有设备内存地址的内存;为主机内存获取设备内存地址的唯一方法是将其分配为映射的固定内存。如果启用了UVA,则会自动

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


谢谢,

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

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

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