我不知道CUDA 4.0是怎样的,但在3.2中,仅凭存储在其内部的地址,你无法确定它是CPU还是GPU指针。解决方法是创建一个名为CudaPtr的类,将指针隐藏在其中并提供基本功能(例如memset、memload、memstore、memalloc等,这些基本功能将使用CUDA工具)。然后,如果你有一个可以在主机或设备上操作的函数,你可以轻松地重载它以支持T*和CudaPtr。 更新:由于统一内存寻址和新的CUDA工具包,事情发生了一些变化。现在似乎可以通过cuPointerGetAttribute在运行时进行这样的区分。
cudaMalloc
和cudaMallocHost
的结果传递到同一个函数中,然后在之后确定哪个是哪个。我认为最好还是一开始就将它们分开处理。 - Rup