我是CUDA开发人员的新手,我在MacPro上使用了NSight 5。
我正在使用两个粒子(ver1
和ver2
进行非常简单的模拟,这两个粒子具有指向另一种类型结构的指针 - links
)
编译的代码但到达此块结尾时似乎遇到了问题,并且从未进入integrate_functor()
:
...
thrust::device_vector<Vertex> d_vecGlobalVec(2);
d_vecGlobalVec[0] = ver1;
d_vecGlobalVec[1] = ver2;
thrust::for_each(
d_vecGlobalVec.begin(),
d_vecGlobalVec.end(),
integrate_functor(deltaTime)
);
...
所以我的问题是:
在NSight中,我可以看到ver1
和ver2
的成员变量的值;但是在此块中代码的最后一行之前,当我展开d_vecGlobalVec
的层次结构时,我可以看到这些值中的任何一个 - 相应的字段(例如,此向量中的第一个元素)只是空的。为什么会这样?显然,ver1
和ver2
在主机备忘录上,而d_vecGlobalVec
中的值在设备上。
NSight团队成员发布了this。
因此,一般来说,这是否意味着我应该能够在主机和设备代码之间进出,并且能够看到主机/设备变量,就好像它们之间没有障碍一样?
系统:
NVIDIA GeForce GT 650M 1024 MB
Mac OS X Lion 10.7.4(11E2620)
答案 0 :(得分:1)
确保您的设备代码实际被调用。检查所有返回代码并确认该设备实际上对输出有效。如果它认为它更有效,有时推力可能会在主机上运行代码。
我真的建议更新到10.8 - 它有最新的驱动程序,支持NVIDIA GeForce 6xx系列。
另请注意,为获得最佳体验,您需要使用不同的GPU进行显示和CUDA调试 - 否则Mac OS X可能会干扰并终止调试器。