2010-11-23 8 views
1

안녕하세요 ... 저는 CUDA C로 프로그래밍 한 VS2008을 사용하고 있습니다. 3.2 툴킷이 설치되어 있고 작동하고 있습니다. .. 그것이 작동해야하므로,구조체에 문제가 있습니다. CUDA C/C++ 및 VS 2008

#ifndef _cuda_rng_cu_included_ 
#define _cuda_rng_cu_included_ 

#include <stdio.h> 


static void HandleError(cudaError_t err, 
         const char *file, 
         int line) { 
    if (err != cudaSuccess) { 
     printf("%s in %s at line %d\n", cudaGetErrorString(err), 
       file, line); 
     exit(EXIT_FAILURE); 
    } 
} 
#define HANDLE_ERROR(err) (HandleError(err, __FILE__, __LINE__)) 

//some other struct 

내가 예에 의해 도서 CUDA에서이 코드를 가지고 있지만, 내가 구축 쳤을 때 나는 (이 오류를 얻을 :

지금 내 문제는 내가이있는 파일을 가지고있다) 제 :

error C2065: 'cudaError_t' : undeclared identifier

하고 오류 쓰나미가 첨부되어

입력 uint2 같이 발견되지 않는 변수를 선언하고 있지.

무엇이 문제 일 수 있습니까? cudaError_t는 $ (CUDA_PATH_V3_2) \ include에 정의되어 있으며이 경로는 필자의 필수 include 디렉토리에 있습니다.

파일 속성에 같은 설정 : 내가 모두 구조체가있는 경우 정상적인 C 사이의 링커 ++ 및 CUDA C.처럼 작동하는 방법을 생각하지 않았기 때문에 나는 그 #ifndef를 넣어 Tool: CUDA Runtime API

CUDA C (__global__` __device__) 및 일부 정상적인 방법. 이 파일의 이름을 .cu이라면이 구조체를 사용하는 일반 C++ 코드에서 선언되지 않았 음을 나타내는 오류가 출력됩니다.

나는 수동으로 driver_types.h 및 기타 헤더를 ​​포함 시키려고했으나 컴파일러에서 찾지 못했습니다.

죄송합니다. 내가 명확하지 않으면 죄송합니다.

답변

3

확장자가 .cu 인 파일은 nvcc에서 처리하며 CUDA 유형이 선언 된 CUDA 관련 헤더가 자동으로 포함됩니다. .c/.cpp으로 이름을 지정하면 유형을 가져 오기 위해 관련 머리글을 포함시켜야합니다. 런타임 API를 사용 중이므로 cuda_runtime_api.h을 포함 해보세요.

경로를 찾지 못했다는 사실은 경로가 올바르게 설정되지 않았 음을 나타냅니다. 포함 경로에 $ (CUDA_PATH) \ include를 추가하십시오 (자세한 내용은 this post 참조).

는, 구조체 단지 유형 당신은 __global__ 또는 __device__ 같은 구조체 (또는 클래스)를 선언 할 필요가 없습니다

입니다 와 유형이 교차입니다 ... 문제는 여기에 있다는 것을 말해 두 겠는데 플랫폼. 이러한 선언이 필요한 곳은 저장소가 암시 된 곳입니다. 즉 구조체의 인스턴스를 만들거나 장치 용으로 컴파일해야하는 코드를 만들 때입니다. 당신은 단순히 구조체를 선언하는 경우

는 당신은 헤더 파일에 선언 할 수 있어야하며 아무 문제없이 모두 .cpp.cu 파일에 포함, 그렇지 않은 경우하는 모든 수단에 의해 자세한 내용과 별도의 질문을 게시 .

+0

나는이 게시물을 한 번 보았고, 나는이 새로운 프로젝트에서 그것을 잊어 버렸다. 그러나 여전히 효과가 없습니다. 이제는 cuda.h, cuda_runtime.h 및 기타를 포함 할 수 있으며 선언되지 않은 식별자는 사라집니다. 하지만 이제 다른 오류가 발생합니다 :' 'threadIdx': 선언되지 않은 식별자'. 젠장.내가 리눅스 에서이 일을해야한다고 느낀다 ... – hfingler

+0

threadIdx에 관한 오류를 얻는 함수의 선언은 무엇입니까? 전역으로 선언되어야합니다. – user434507

+0

@ user434507, 그것은'__device__' 함수에 있습니다. 그것은 작동해야합니다, 나는 웹 사이트 에서이 코드를 가지고, 그것은 장치에 난수를 생성, 그것은 Rand48라고. 나는 그것을 다음에서 얻었습니다 : http : //forums.nvidia.com/index.php? showtopic = 64545' – hfingler

0

포함 경로가 올바르게 설정 되었습니까? 그러면 컴파일러가 포함 파일을 찾지 못하는 이유를 설명 할 수 있습니다.