cuda统一内存和指针别名

时间:2016-12-14 16:09:38

标签: cuda

我用cuda刷新了我的思绪,特别是统一的记忆(我最后一个真正的cuda dev是3年前),我有点生锈。

pb:

我正在使用统一内存从容器创建任务。但是,经过几天的调查,我得到了一次崩溃, 我无法说崩溃在哪里(复制构造函数),但不是为什么。因为所有指针都是正确分配的。

我没有与Nvidia帖子(https://devblogs.nvidia.com/parallelforall/unified-memory-in-cuda-6/)收缩 关于C ++和统一内存

//on the server
const user = Meteor.users.findOne(userId);
Accounts._checkPassword(user, "wrongPassword");
// results in:
{ userId: 'theuserid',
  error: 
   { [Error: Incorrect password [403]]
     error: 403,
     reason: 'Incorrect password',
     details: undefined,
     message: 'Incorrect password [403]',
     errorType: 'Meteor.Error' } }

Accounts._checkPassword(user, oldPassword);
// results in the following if the password is correct
{ userId: 'theuserid' }

客观地说,我可以将一个对象作为参数传递给正确分配内存的参数。但是,看起来不可能使用第二学位 间接(这里是容器)

我在做一个概念上的错误,但我没有看到。

最佳,

Timocafe

我的机器:cuda 7.5,gcc 4.8.2,特斯拉K20 m

1 个答案:

答案 0 :(得分:1)

虽然存储器被分配为统一存储器,但容器本身在主机代码中声明并分配在主机存储器中:container<task> c(2);。您不能将其作为对设备代码的引用传递,并且在内核中取消引用它很可能会导致非法的内存访问。

您可能希望使用cuda-memcheck来识别此类问题。