2010-08-16 6 views
1

많은 cpp 기능 (stl 벡터 클래스 포함)이 cu 파일에서 작동하지 않는다는 것을 배웠습니다. 호스트 코드에서 사용하는 경우에도.CUDA 및 STL 벡터

STL을 사용하는 C++ 클래스를 사용해야하므로 커널을 호출하는 CU 파일을 컴파일 할 수 없습니다. (필자는 CU 파일에 어떤 STL 기능을 사용하지 않는,하지만 난이 문제가 포함 생각합니다.)

내가 분명히 작동하지 않는

cuda_add_executable(
Blah 
Blah.cu 
BlahKernel.cu 
HostCodeWithVector.cpp 
) 

으로 cmake를 사용하여이 구축 노력 . 이제는 nVcc 대신 gcc를 사용하여 HostCodeWithVector.cpp를 만들 수 있고 링크가 있다면 어떻게 될까요?

+0

예 추력에 대해 알고 있지만 기존 코드를 다시 작성하고 싶지는 않습니다. – Nils

답변

2

__host__은 CPU에서 실행되기 때문에 컴파일러 (MSVC, gcc)를 사용하여이 부분을 컴파일 한 다음 nvcc 결과와 연결할 수 있습니다. 따라서 CU 파일에 GPU interop 만 남기고 다른 모든 것은 CPP에 넣어야합니다.

+0

좋아 .. 어떻게이 쉐이크를 말할 수 있니? ..? – Nils

+0

@Nils는 gcc 및 nvcc의 설명서를 읽습니다. 객체 파일을 생성하게합니다. 그런 다음 링커를 gcc에서 가져 와서 링크하십시오. – Andrey

+0

Thx를 통해 UU 대답, 문제는 (여전히!) Mac에서 CUDA와 STL과 함께 작동하지 않는 64 비트를 구축하려고했다. 나는 그것을 올바르게 생각했다. "CUDA 이외의 모든 C 파일은 표준 빌드 규칙을 사용하여 컴파일되며 CUDA 파일은 nvcc와 호스트 컴파일러를 사용하여 파일을 개체화하도록 컴파일됩니다." http://cmake.org/cmake/help/cmake-2-8-docs.html이라고 말합니다. – Nils