0

我是 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)
);
...

所以我的问题是:

  1. ver1在 NSight 中,我可以看到和的成员变量的值ver2;但是在这个块中代码的最后一行之前,当我展开 的层次结构时d_vecGlobalVec,我可以看到这些值中的任何一个 - 对应的字段(例如,这个向量中的第一个元素)只是空的。为什么会这样?显然,ver1并且ver2在主机备忘录上,而在d_vecGlobalVec设备上的值。

  2. 2.

NSight 团队的一名成员发布了信息。

那么,总的来说,这是否意味着我应该能够在主机和设备代码之间进出,并且能够看到主机/设备变量,就好像它们之间没有障碍一样?

系统:

英伟达 GeForce GT 650M 1024 MB

Mac OS X Lion 10.7.4 (11E2620)

4

1 回答 1

1

确保实际调用了您的设备代码。检查所有返回代码并确认该设备实际在输出上工作。有时,如果thrust 认为它更有效,它可能会在主机上运行代码。

我真的建议更新到 10.8 - 它具有最新的驱动程序,对 NVIDIA GeForce 6xx 系列的支持最好。

另请注意,为了获得最佳体验,您需要使用不同的 GPU 进行显示和 CUDA 调试 - 否则 Mac OS X 可能会干扰并终止调试器。

于 2013-02-04T23:03:32.283 回答