【发布时间】:2012-07-26 13:04:54
【问题描述】:
CUDA 可以利用几种不同形式的任务并行性。我们可以在内核执行的同时来回复制内存。在这种情况下,我们必须使用 cudaHostAlloc 将主机内存分配为固定内存,并且流可用于并行执行事物。但是,如果我只对使用流并行运行几个内核感兴趣,我必须使用固定内存还是可以使用正常的未固定内存(即使用 malloc)?
谢谢,
【问题讨论】:
标签: memory concurrency cuda locked
CUDA 可以利用几种不同形式的任务并行性。我们可以在内核执行的同时来回复制内存。在这种情况下,我们必须使用 cudaHostAlloc 将主机内存分配为固定内存,并且流可用于并行执行事物。但是,如果我只对使用流并行运行几个内核感兴趣,我必须使用固定内存还是可以使用正常的未固定内存(即使用 malloc)?
谢谢,
【问题讨论】:
标签: memory concurrency cuda locked
只要您在单独的流中调用内核,CUDA 就会尝试并行运行这些内核。
内核只能引用有设备内存地址的内存;获得主机内存的设备内存地址的唯一方法是将其分配为映射的固定内存。如果启用了 UVA,这会自动发生;否则,您必须使用 cudaDeviceMapHost 调用 cudaSetDeviceFlags(),并使用 cudaHostAllocMapped 标志调用 cudaHostAlloc()。
因此,如果目标是让同时运行的内核引用固定内存,那么您的问题的答案是肯定的,您必须使用固定内存并且必须映射该内存。
【讨论】: