2012-11-22 35 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參考或指針傳遞參數。