2016-12-23 161 views
1

내가 성공적으로 내 PC에 CUDA 8.0 설치하고 내 우분투 16.10에서 다음 명령을 실행하여 해당 파일을 볼 수 있습니다 : 다음치명적인 오류 : cuda.h : 해당 파일이나 디렉토리

$ sudo find/-name nvcc 

/usr/local/cuda-8.0/bin/nvcc 

$ sudo find/-name cuda 

/usr/local/cuda 
/usr/local/cuda-8.0/targets/x86_64-linux/include/thrust/system/cuda 
/usr/share/doc/cuda 
/usr/include/nvidia-367/cuda 

, 내가 가지고 CUDA가 설치되어있는 경우 다음과 같은 소스 코드 (has_cuda.c)는 체크 아웃 :

#include<cuda.h> 

int main() 
{ 
    int deviceCount; 
    cudaError_t e = cudaGetDeviceCount(&deviceCount); 
    return e == cudaSuccess ? deviceCount : -1; 
} 

그러나이 코드를 실행하는 나에게 다음과 같은 오류 반환 :

$ gcc has_cuda.c 

has_cuda.c:1:17: fatal error: cuda.h: No such file or directory 
#include<cuda.h> 
      ^
compilation terminated. 
,536,913을 무슨 일 할 수

$ sudo find/-name cuda.h 

/usr/local/cuda-8.0/targets/x86_64-linux/include/cuda.h 
/usr/include/nvidia-367/cuda/cuda.h 
/usr/include/linux/cuda.h 
/usr/src/linux-headers-4.8.0-22/include/linux/cuda.h 
/usr/src/linux-headers-4.8.0-22/include/uapi/linux/cuda.h 
/usr/src/linux-headers-4.8.0-32/include/linux/cuda.h 
/usr/src/linux-headers-4.8.0-32/include/uapi/linux/cuda.h 

내가 아주 신인이에, 너무 : 63,210

나는 내 디렉토리에 cuda.h 찾았다 다음과 같은 장소에서 그들을 발견? 내가 cuda.h가 어디에 있는지 지적하기 위해 변수를 내 보내야합니까? 내가 어떻게 할 수 있니?

답변

2

필자는 직접 cuda 프로젝트를 컴파일 한 적이 없지만 컴파일러에 라이브러리를 연결해야한다고 말할 수 있습니다.

일부 빠른 검색은 엔비디아가 모든 것을 처리 할 수있는 컴파일러를 가지고 있다고 말합니다. 그래서 당신은 그것을 설치해야하고 당신은 잘 가게되어야합니다. NVVC라고합니다. 일단 바로 실행 설치 : 당신이 뭔가 컴파일러는 거의 항상 연결해야한다는 것을 어디 알고 있기 때문에 www.pdc.kth.se

그것은 아니다 : 여기

nvcc helloworld.cu -o hello.out 

더 그것을 설명하는 링크입니다. 링커는 이미 어디서 찾을 수 있는지 알고 있기 때문에 표준 라이브러리에서는이 작업을 수행하지 않아도됩니다.

+0

이 대답의 가장 중요한 점은 'nvcc'가 CUDA 코드로 취급하도록 지시하는'.cu' 확장자를 갖도록 소스 파일의 이름을 바꾸는 것입니다. 이것은 관련 라이브러리에 링크 할 것이지만'#include '을 맨 위의 중복으로 만드는 데 필요한 헤더 파일도 포함합니다 (자세한 내용은 Robert Crovella의 답변을 참조하십시오). – tera

4

gcc을이 코드의 컴파일러로 사용한다고 가정 할 경우 적절한 포함 헤더 파일은 cuda.h이 아니라 cuda_runtime.h입니다. 다른 대답이 지적했듯이 nvcc (이미 컴퓨터에 설치되어 있음)을 사용할 수 있으며이 코드에는 포함 헤더가 전혀 필요하지 않습니다.

nvcc을 사용하려면 적절한 PATH 환경 변수가 설정되어 있는지 확인해야합니다. 이 정보 및 기타 유용한 정보는 linux install guide에 있습니다. 이 같은 코드를 수정

그래서 경우 :

gcc -I/usr/local/cuda/include -L/usr/local/cuda/lib64 has_cuda.c -lcudart -o has_cuda 

-I 스위치 다음 경로가 포함되어 있어야합니다

#include <cuda_runtime.h> 

int main() 
{ 
    int deviceCount; 
    cudaError_t e = cudaGetDeviceCount(&deviceCount); 
    return e == cudaSuccess ? deviceCount : -1; 
} 

는 성공적으로 같은 명령을 사용하여 컴파일 할 수 있어야한다 귀하의 컴퓨터에 cuda_runtime.h 경로. 일반적으로, 즉 위와 같이 설정 될 수 있지만, cuda 심볼릭 링크가 컴퓨터에 설정되어있는 경우 잘 모르겠어요, 그리고 디렉토리가 예상치 못한 장소에있을 수 있습니다 포함처럼도 보이는 즉

/usr/local/cuda-8.0/targets/x86_64-linux/include 

하지만, 당신은 그것을 찾으려고했던 것처럼 find을 사용할 수 있습니다.

마찬가지로, -L 스위치 뒤의 경로는 libcudart.so와 그 사촌을 포함하는 cuda lib64 디렉토리의 경로 여야합니다. 다시 말하지만, 일반적으로 내가 보여준 경로에서 심볼릭 링크를 사용하지만 컴퓨터 설치가 제 기대치에 미치지 못할 수도 있습니다. find을 사용하여 올바른 경로를 찾을 수 있어야합니다.

다른 대답에 표시된대로 nvcc (이미 위치한 위치)을 사용하는 경우 명시 적으로 -I-L 경로를 선택할 필요가 없습니다. 가장 쉬운 방법은 다음과 같이 컴파일 할 수 있어야한다,이 작품은 has_cuda.cuhas_cuda.c에서 파일의 이름을 변경하는 것입니다 만들려면 :

nvcc has_cuda.cu -o has_cuda 

을 마지막으로, 우분투 16.10는 현재 CUDA에 대해 공식적으로 지원되는 배포판이 아닌, 그래서 당신의 컴퓨터에 설치되는 방법에 대해 예기치 않은 일이있을 수 있습니다. 환경 변수 설정 및 CUDA 설치를 "확인"하는 방법과 같은 설치 후 설정 단계에 대한 유용한 정보가 들어 있으므로 이전에 링크 된 설치 안내서를 읽어 보시기 바랍니다.

때마다 당신이 CUDA 코드를 실행하고, 문제의 어떤 종류가있는, 확인과 같이, proper cuda error checking를 사용하고 CUDA-memcheck으로 코드를 실행하십시오 : 당신이 이해하지 않는 경우에도

cuda-memcheck ./has_cuda 

보고 된 오류 정보는 도움을 줄 수있는 사람들에게 유용 할 수 있습니다.

+0

나는 그것을 사용할 때마다 nvcc를 찾을 수 있지만 다음 오류가 있습니다. $ nvcc has_cuda.c 'nvcc'프로그램이 현재 설치되어 있지 않습니다. 다음을 입력하여 설치할 수 있습니다. sudo apt install nvidia-cuda-toolkit. – mad

+0

cuda-memcheck의 유사한 오류 : cuda-memcheck ./has_cuda 'cuda-memcheck'프로그램이 현재 설치되어 있지 않습니다. 다음을 입력하여 설치할 수 있습니다 : sudo apt install nvidia-cuda-toolkit – mad

+0

PATH 환경 변수에 CUDA bin 디렉토리를 추가해야합니다. 이 지침은 내가 링크 된 설치 안내서에 포함되어 있습니다. –