Install NVIDIA CUDA on Ubuntu 17.04
The official download page only have package for 16.04 and 14.04,but actually Ubuntu 17.04 can install CUDA via apt directly. https://launchpad.net/ubuntu/zesty/+source/nvidia-cuda-toolkit Install
Assume you already have NVIDIA graphic driver installed and just need CUDA. Only the following command is needed.
sudo apt-get install nvidia-cuda-dev nvidia-cuda-toolkit nvidia-nsight
NOTE: Ubuntu 17.04 use GCC6,which is not supported by nvcc,the package will install clang-3.8 (the default clang version for 17.04 is clang 4.0,they can co-exist). Compile
Compile cuda code using nvcc -ccbin clang-3.8 hello-world.cu,remember to use cu as suffix instead of c other wise you will have error like the following
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). square.c:6:1: error: unknown type name ‘__global__’ __global__ void cube(float * d_out,float * d_in){
You can use the following code to test if you have correct installation
/* * Example from Udacity Intro to Parallel Programming https://www.udacity.com/course/intro-to-parallel-programming--cs344 * nvcc -ccbin clang-3.8 cube.cu */ #include <stdio.h> __global__ void cube(float * d_out,float * d_in){ int idx = threadIdx.x; float f = d_in[idx]; d_out[idx] = f * f * f; } int main(int argc,char ** argv) { const int ARRAY_SIZE = 64; const int ARRAY_BYTES = ARRAY_SIZE * sizeof(float); // generate the input array on the host float h_in[ARRAY_SIZE]; for (int i = 0; i < ARRAY_SIZE; i++) { h_in[i] = float(i); } float h_out[ARRAY_SIZE]; // declare GPU memory pointers float * d_in; float * d_out; // allocate GPU memory cudaMalloc((void**) &d_in,ARRAY_BYTES); cudaMalloc((void**) &d_out,ARRAY_BYTES); // transfer the array to the GPU cudaMemcpy(d_in,h_in,ARRAY_BYTES,cudaMemcpyHostToDevice); // launch the kernel cube<<<1,ARRAY_SIZE>>>(d_out,d_in); // copy back the result array to the cpu cudaMemcpy(h_out,d_out,cudaMemcpyDeviceToHost); // print out the resulting array for (int i =0; i < ARRAY_SIZE; i++) { printf("%f",h_out[i]); printf(((i % 4) != 3) ? "\t" : "\n"); } cudaFree(d_in); cudaFree(d_out); return 0; }
Reference
https://www.udacity.com/course/intro-to-parallel-programming--cs344
https://medium.com/@at15/install-nvidia-cuda-on-ubuntu-17-04-823300ab7bcc
原文链接:https://www.f2er.com/ubuntu/351474.html