2017-09-27 11 views
0

online이라는 자습서를 따르려고합니다. 나는 커맨드 라인에서 컴파일 우분투 17을 사용하고 있습니다.CUDA에서 추가하는 중에 잘못된 숫자가 반환되는 경우

#include <stdio.h> 
#include <iostream> 

__global__ void add(int a, int b, int *c) 
{ 
    *c = a + b; 
} 

int main() 
{ 
    int a,b,c; 
    int *d_c; 
    int size = sizeof(int); 

    a = 2; 
    b = 7; 

    cudaMalloc((void **)&d_c,size; 
    add<<<1,1>>>(a,b,d_c); 
    cudaMemcpy(&c,d_c,size,cudaMemcpyHostToDevice); 
    std::cout << a << " + " << b << " = " << c << std::endl; 
    cudaFree(d_c); 

    return 0; 
} 

나는 nvcc 컴파일 할 때 나는 다음과 같은 오류 얻을 :

nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).

내가 경고를 무시하고 평소와 같이 a.out을 달리고, 내가 출력을 얻을 :

2 + 7 = 1

지난 번에 수학을했는데 이것이 잘못되었습니다. 내가 잘못하고 있는지 잘 모르겠다. 아니면 내가 따르고있는 튜토리얼이 너무 오래되었거나 경고와 관련이 있다면? 도움이나 리드가 도움이 될 것입니다. 나는 또한 을 설치할 때까지 nvcc으로 컴파일 할 수 없다고 언급 할 것입니다. 나는 그들이 정확하게 여기에서 찾은 these instructions을 사용하여 그들을 함께 연결했다고 믿는다.

나는 또한 this solution을 보았습니다. 그러나이 도움말이 특히 도움이되는 것을 발견하지 못 했으므로 제대로 컴파일되고 있는지, 필자의 터미널에 올바르게 인쇄되지 않는지에 대해 잘 알고 있습니다.

도움을 주시면 감사하겠습니다.

답변

2

cudaMemcpy()으로 전화하면 올바르지 않습니다. 결과를 장치 (GPU) 메모리에서 호스트 (CPU) 메모리로 복사해야합니다. 사용하는 올바른 kind 플래그는 cudaMemcpyDeviceToHost입니다 : 미래의 디버깅을 단순화하기 위해

cudaMemcpy(&c, d_c, size, cudaMemcpyDeviceToHost); 

proper CUDA API error checking을 구현뿐만 아니라 체계적으로 cuda-memcheck, cuda-gdb, Valgrind의와 그 소리 소독제와 프로그램을 실행하는 방법에 대한 생각합니다.

+0

답변 해 주셔서 감사합니다. 그러나, 나는'cudaMemcpyDeviceToHost'를 사용하기 위해 코드를 업데이트했으며, 여전히 1의 결과를 얻습니다. 에러 검사를 해보도록하겠습니다. 나는 그 스레드에서 몇 번 피크를 보았지만 그것을 시도하고 구현하려고 생각하지 않았습니다. – Sailanarmo

+0

그냥 내 오류를 발견, 오류 검사로 나를 이끌어 주셔서 정말 고마워. GPU 어서 트가 반환되었습니다. 'CUDA가 가능한 장치가 발견되지 않았습니다. hello.cu 29' 나는 왜 이것이 일어나고 있는지 알아볼 것입니다. – Sailanarmo

+0

즉시 오류 검사를 구현하는 것이 좋습니다. 때때로 사람들에게 그렇게하도록 설득하는 데 시간이 걸릴 수도 있습니다. 따라서 CUDA 런타임이 CUDA 가능 장치를 찾을 수 없기 때문에 커널 기능이 실행되지 않습니다. 최근 Nvidia 카드 (Computerm Capability> = 2.0 인 Fermi 이상, [이들 중 하나] (https://developer.nvidia.com/cuda-gpus))와 [드라이버가 올바르게 설치되어 있음]이 있는지 확인하십시오. (http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html). 이들을 분류 한 후에 고정 코드가 작동해야합니다. – Drop