Sám jsem nikdy nezkompiloval projekt cuda, ale myslím, že budete muset propojit knihovnu s kompilátorem.
Nějaké rychlé googlování říká, že Nvidia má na to kompilátor, který zvládne všechno. Takže to stačí nainstalovat a měli byste jít. Říká se tomu NVVC. Po instalaci stačí spustit:
nvcc helloworld.cu -o hello.out
S externími knihovnami, jako jsou tyto, je téměř vždy potřebujete propojit. Nemusíte to dělat pro standardní knihovnu, protože linker již ví, kde ji najít.
Správný soubor hlavičky zahrnutí pro toto není cuda.h
ale cuda_runtime.h
, za předpokladu, že chcete použít gcc
jako kompilátor tohoto kódu. Jak ukazuje druhá odpověď, můžete použít pouze nvcc
(který je již nainstalován na vašem počítači), který by pro tento kód vůbec nevyžadoval žádné hlavičky include.
Pokud chcete použít nvcc
pravděpodobně byste se měli ujistit, že odpovídající PATH
je nastavena proměnná prostředí. Tyto a další užitečné informace jsou obsaženy v instalační příručce pro linux.
Pokud tedy kód upravíte takto:
#include <cuda_runtime.h>
int main ()
{
int deviceCount;
cudaError_t e = cudaGetDeviceCount(&deviceCount);
return e == cudaSuccess ? deviceCount : -1;
}
Měli byste být schopni jej úspěšně zkompilovat pomocí příkazu podobného tomuto:
gcc -I/usr/local/cuda/include -L/usr/local/cuda/lib64 has_cuda.c -lcudart -o has_cuda
Cesta za -I
přepínač by měl obsahovat cestu k cuda_runtime.h
na vašem stroji. Normálně by to bylo nastaveno jako výše, ale nejsem si jistý, zda cuda
na vašem počítači je nastaven symbolický odkaz a také to vypadá, že váš adresář pro začlenění může být na neobvyklém místě, tj.
/usr/local/cuda-8.0/targets/x86_64-linux/include
ale můžete použít find
stejně jako vy, abyste ji našli.
Podobně cesta za -L
přepínač musí být cesta k vašemu cuda lib64
adresář, který bude obsahovat libcudart.so a a jeho příbuzné. Opět by to normálně bylo symbolicky propojeno na cestu, kterou jsem ukázal, ale instalace vašeho počítače nemusí odpovídat mým očekáváním. Měli byste být schopni používat find
k nalezení správné cesty.
A jak je uvedeno v druhé odpovědi, pokud použijete nvcc
(které jste již našli), nebudete muset explicitně vybrat -I
a -L
cesta. Nejjednodušší způsob, jak to udělat, je přejmenovat soubor z has_cuda.c
na has_cuda.cu
, pak byste měli být schopni zkompilovat takto:
nvcc has_cuda.cu -o has_cuda
A konečně, Ubuntu 16.10 není v tuto chvíli oficiálně podporovaná distribuce pro CUDA, takže se mohou objevit některé neočekávané věci ohledně způsobu instalace na váš počítač. Doporučil bych vám, abyste si přečetli dříve propojenou instalační příručku, protože obsahuje užitečné informace o krocích nastavení po instalaci, jako je nastavení proměnných prostředí, a také o tom, jak "ověřit" instalaci CUDA.
Kdykoli spouštíte kódy CUDA a máte jakýkoli problém, ujistěte se, že používáte správnou kontrolu chyb cuda a spusťte své kódy pomocí cuda-memcheck, například takto:
cuda-memcheck ./has_cuda
I když nerozumíte hlášeným informacím o chybě, mohou být užitečné pro ty, kteří se vám snaží pomoci.