2012-11-22 37 views
0

我一直在CUDA中遇到问题。我写了一个递归内核(最新允许)。 .cu文件是包含多个对象的大型项目的一部分。 一个内核的参数是一块物体(Piece.cpp)是这样的:CUDA&Copy-constructor

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 

现在,我一直在试图写一个拷贝构造函数,但我似乎无法得到它的权利。任何人都可以提供更多关于此?

+0

问题是,虽然用户提供的复制ctr存在,并且可能不应该存在它的工作。 –

回答

1

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

例如,这些是无效的:

__shared__ int x = 0; 
__shared__ MyClassWithNontrivialConstructor obj; 

我猜你打一个类似的问题。

是否有机会upcomingPieces躺在共享或全局内存的某处? 如果是这种情况 - 考虑通过const参考或指针传递参数。