在C / CUDA中,如果我传递了一个指针,我怎样才能以编程方式确定指针是指向CPU还是GPU上的内存?为此目的是否有CUDA功能?
答案 0 :(得分:3)
我不知道CUDA 4.0是怎么回事,但在3.2中你根本不能根据存储在其中的地址来推断它是CPU还是GPU指针。
解决这个问题的方法是创建一个类CudaPtr<T>
,在那里隐藏指针并提供基本功能(例如memset
,memload
,memstore
,{{1反过来使用CUDA的东西。)
然后,如果您有一个可以在主机或设备上运行的功能,您可以轻松地将其重载为memalloc
和T*
。
更新:由于统一内存寻址和新的CUDA工具包的事情发生了一些变化。现在,您似乎可以通过cuPointerGetAttribute
在运行时进行此类区分