2017-08-17 55 views
-1

我已經寫了下面的代碼NVCC不執行內核代碼在Ubuntu 17.10

#include "cuda_runtime.h" 
#include "device_launch_parameters.h" 
#include <stdio.h> 
#include<iostream> 
using namespace std; 

__global__ void hello() 
{ 
    printf("Hello"); 
} 

int main() 
{ 
    hello<<<1, 7>>>(); 
    cudaDeviceSynchronize(); 
    return 0; 
} 

代碼編譯與nvcc -o test test.cu,並生成一個警告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). 我繼續與執行./test並沒有在輸出所有。 代碼中是否有錯誤?謝謝

+1

CUDA代碼,最好使用[適當的cuda錯誤檢查](https://stackoverflow.com/questions/14038589/what-is-the-canonical-way-to-check-for-errors-using-the-cuda -runtime-api),並在**向別人尋求幫助之前用'cuda-memcheck',**運行你的代碼。即使您不瞭解錯誤輸出,它也可能對嘗試幫助您的其他人有用。如果你用'cuda-memcheck。/ test'運行你的代碼會發生什麼? –

+0

感謝問題在系統重新啓動後解決。編譯器可能有問題 – Uttaran

回答

1

你說你的問題在重新啓動後解決了:重新啓動,或者在安裝nvidia驅動程序/ CUDA之後至少需要X重新啓動。

不管怎麼說,這是一個很好的做法,從CUDA API調用檢查錯誤,並在年底重啓設備(如支持CUDA memecheck工具,否則可能會錯過錯誤):只要您有麻煩

#include "cuda_runtime.h" 
#include "device_launch_parameters.h" 
#include <stdio.h> 
#include<iostream> 
using namespace std; 

#define cudaErr(ans) { gpuAssert((ans), __FILE__, __LINE__); } 
inline void gpuAssert(cudaError_t code, const char *file, int line, bool abort = true) 
{ 
    if (code != cudaSuccess) 
    { 
     fprintf(stderr,"GPUassert: %s %s %d\n", cudaGetErrorString(code), file, line); 
     if (abort) { 
      exit(code); 
     } 
    } 
} 

__global__ void hello() 
{ 
    printf("Hello"); 
} 

int main() 
{ 
    hello<<<1, 7>>>(); 
    cudaErr(cudaDeviceSynchronize()); 
    cudaErr(cudaDeviceReset()); 
    return 0; 
}