0

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

parallelKernel (Piece* piece, vector upcomingPieces)

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

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

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

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

现在,我一直在尝试编写一个复制构造函数,但我似乎无法做到正确。谁能提供更多有关此的见解?

4

1 回答 1

1

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

例如,这些是无效的:

__shared__ int x = 0;
__shared__ MyClassWithNontrivialConstructor obj;

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

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

于 2012-11-23T12:49:57.690 回答