Non ho mai compilato un progetto cuda da solo, ma penso che dovrai collegare la libreria al compilatore.
Alcune rapide ricerche su Google dicono che Nvidia ha un compilatore per questo che gestirà tutto. Quindi devi solo installarlo e dovresti essere a posto. Si chiama NVVC. Una volta installato basta eseguire:
nvcc helloworld.cu -o hello.out
Con librerie esterne come queste, è quasi sempre necessario collegarle. Non devi farlo per la libreria standard perché il linker sa già dove trovarlo.
Il file di intestazione include corretto per questo non è cuda.h
ma cuda_runtime.h
, supponendo che tu voglia utilizzare gcc
come compilatore per questo codice. Come sottolinea l'altra risposta, potresti semplicemente usare nvcc
(che è già installato sulla tua macchina) che non richiederebbe alcuna intestazione di inclusione per questo codice.
Se vuoi usare nvcc
probabilmente dovresti assicurarti che il PATH
appropriato variabile di ambiente è impostata. Questa e altre informazioni utili sono contenute nella guida all'installazione di Linux.
Quindi, se modifichi il tuo codice in questo modo:
#include <cuda_runtime.h>
int main ()
{
int deviceCount;
cudaError_t e = cudaGetDeviceCount(&deviceCount);
return e == cudaSuccess ? deviceCount : -1;
}
Dovresti essere in grado di compilarlo con successo usando un comando simile a questo:
gcc -I/usr/local/cuda/include -L/usr/local/cuda/lib64 has_cuda.c -lcudart -o has_cuda
Il percorso dopo -I
switch dovrebbe contenere il percorso di cuda_runtime.h
sulla tua macchina. Normalmente sarebbe impostato come sopra, ma non sono sicuro che il cuda
symlink è impostato sul tuo computer e sembra anche che la tua directory di inclusione potrebbe trovarsi in un posto insolito, ad es.
/usr/local/cuda-8.0/targets/x86_64-linux/include
ma puoi usare find
proprio come hai fatto tu per individuarlo.
Allo stesso modo, il percorso dopo -L
switch deve essere il percorso del tuo cuda lib64
directory, che conterrà libcudart.so e i suoi cugini. Ancora una volta, normalmente sarebbe un collegamento simbolico sul percorso che ho mostrato, ma l'installazione della tua macchina potrebbe non essere conforme alle mie aspettative. Dovresti essere in grado di usare find
per individuare il percorso corretto.
E come indicato nell'altra risposta, se usi nvcc
(che hai già individuato), non avrai bisogno di selezionare esplicitamente -I
e -L
sentiero. Il modo più semplice per farlo funzionare è rinominare il file da has_cuda.c
a has_cuda.cu
, allora dovresti essere in grado di compilare in questo modo:
nvcc has_cuda.cu -o has_cuda
Infine, Ubuntu 16.10 non è una distribuzione ufficialmente supportata per CUDA in questo momento, quindi potrebbero esserci alcune cose inaspettate nel modo in cui è stato installato sul tuo computer. Ti invito a leggere la guida all'installazione precedentemente collegata, poiché contiene informazioni utili sui passaggi di configurazione post-installazione, come l'impostazione delle variabili di ambiente e anche su come "verificare" l'installazione di CUDA.
Ogni volta che esegui codici CUDA e riscontri qualsiasi tipo di problema, assicurati di utilizzare il corretto controllo degli errori cuda ed esegui i tuoi codici con cuda-memcheck, in questo modo:
cuda-memcheck ./has_cuda
Anche se non comprendi le informazioni sull'errore riportate, potrebbero essere utili per coloro che cercano di aiutarti.