2012-11-22 2 views
0

저는 CUDA의 문제로 고심하고 있습니다. 재귀 적 커널을 작성했습니다 (최신 허용). .cu 파일은 많은 개체가있는 큰 프로젝트의 일부입니다. 커널의 매개 변수의 하나는이 같은 조각 개체 (Piece.cpp)이다 : 나는 재귀 호출을받을 필요가있을 때CUDA & Copy-constructor

parallelKernel (Piece* piece, vector upcomingPieces) 

, 나는 다음 작품 인덱스를 구축, 그래서 나는 이런 식으로 뭔가를 썼다 : 나는 복사 생성자를 작성하는 것을 시도하고있다, 그러나 나는 바로 그것을 얻을 수없는 것, 이제

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

:

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

는하지만 컴파일시 오류가 발생합니다. 아무도 이것에 대해 더 많은 통찰력을 제공 할 수 있습니까 ??

+0

문제는 사용자가 제공 한 copy ctr이 존재하지만 작동하기 위해 존재하지 않아야한다는 것입니다. –

답변

1

CUDA는 실제로 특정 C++ 구조체를 지원할 수 없으며 주로 전역/공유 메모리의 생성자 (복사 생성자는 물론) 주변을 지원합니다. 문제는 - 누가 생성자를 실행할 것인가? 모든 스레드? 그냥 한 스레드? 모든 스레드가 자신을 위해?

예를 들어이 유효하지 않습니다 :

__shared__ int x = 0; 
__shared__ MyClassWithNontrivialConstructor obj; 

난 당신이 비슷한 문제를 타격 같아요.

언제든지 upcomingPieces 어딘가에 공유 또는 전역 메모리에 있습니까? 이 경우 매개 변수를 const 참조 또는 포인터로 전달하는 것을 고려하십시오.