c++ - CUDA 和复制构造函数

标签 c++ object cuda copy-constructor

我一直在努力解决 CUDA 中的问题。我写了一个递归内核(最新允许)。 .cu 文件是一个包含许多对象的大项目的一部分。 内核的参数之一是 Piece 对象 ( Piece.cpp ),如下所示:

parallelKernel (Piece* piece, vector upcomingPieces)

当我需要获取递归调用时,我建立了下一 block 索引,所以我写了这样的东西:

Piece *nextPiece = upcomingPieces[nextPieceIndex];
parallelKernel (nextPiece, upcomingPieces);

但是我在编译时得到一个错误:

error: cannot pass an argument with a user-provided copy-constructor to a device-side kernel launch

现在,我一直在尝试编写一个复制构造函数,但我似乎做不好。任何人都可以对此提供更多见解吗?

最佳答案

CUDA 不能真正支持某些 C++ 构造,主要围绕全局/共享内存的构造函数(以及复制构造函数)。问题是——谁来执行构造函数?所有线程?只有一个线程?每个线程都是他自己的?

例如这些是无效的:

__shared__ int x = 0;
__shared__ MyClassWithNontrivialConstructor obj;

我猜你遇到了类似的问题。

upcomingPieces 是否有可能位于共享或全局内存中的某个位置? 如果是这种情况 - 考虑通过常量引用或指针传递参数。

关于c++ - CUDA 和复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13511829/

相关文章:

c++ - 使用 CxxTest 损坏单例数据

c++ - 何时以及如何对不同类型的文件进行读/写 block (即暂停您的程序)?

javascript - 如何将其合并为一个 javascript 对象?

CUDA 运行时 API 错误 30 : Repeated kernel calls

c++ - Alglib 与 Cuda

c++ - 在子类中重用工厂类型构造函数

c++ - C++ 中的 NI-VISA 库编程 - 超出范围错误

PHP 值对象自动创建

java - 将基于案例编号的对象列表拆分为新的对象列表

c++ - 推力与 cublas 的性能