自分で cuda プロジェクトをコンパイルしたことはありませんが、ライブラリをコンパイラにリンクする必要があると思います。
いくつかの簡単なグーグルは、Nvidiaにはすべてを処理するコンパイラがあると言っています。したがって、それをインストールするだけで、準備完了です。 NVVCといいます。インストールしたら、実行するだけです:
nvcc helloworld.cu -o hello.out
このような外部ライブラリでは、ほとんどの場合、それらをリンクする必要があります。リンカはすでにライブラリの場所を認識しているため、標準ライブラリに対してこれを行う必要はありません。
このための適切なインクルード ヘッダー ファイルは cuda.h
ではありません しかし cuda_runtime.h
、 gcc
を使用したい場合 このコードのコンパイラとして。他の回答が指摘しているように、 nvcc
を使用できます (既にマシンにインストールされています) このコードのインクルード ヘッダーはまったく必要ありません。
nvcc
を使用する場合 おそらく、適切な PATH
を確認する必要があります 環境変数が設定されています。この情報およびその他の有用な情報は、Linux インストール ガイドに含まれています。
したがって、コードを次のように変更すると:
#include <cuda_runtime.h>
int main ()
{
int deviceCount;
cudaError_t e = cudaGetDeviceCount(&deviceCount);
return e == cudaSuccess ? deviceCount : -1;
}
次のようなコマンドを使用して、正常にコンパイルできるはずです:
gcc -I/usr/local/cuda/include -L/usr/local/cuda/lib64 has_cuda.c -lcudart -o has_cuda
-I
の後のパス スイッチには cuda_runtime.h
へのパスが含まれている必要があります あなたのマシンで。通常は上記のように設定されますが、 cuda
が symlink があなたのマシンにセットアップされています。また、インクルード ディレクトリが異常な場所にあるようです。つまり、
/usr/local/cuda-8.0/targets/x86_64-linux/include
find
を使用できます
同様に、-L
の後のパス switch は cuda lib64
へのパスである必要があります ディレクトリには libcudart.so とそのいとこが含まれます。繰り返しますが、これは通常、私が示したパスでシンボリック リンクされますが、マシンのインストールは私の期待に沿わない可能性があります。 find
を使用できるはずです 正しいパスを見つけます。
他の回答に示されているように、 nvcc
を使用する場合 -I
を明示的に選択する必要はありません。 と -L
道。これを機能させる最も簡単な方法は、ファイルの名前を has_cuda.c
から変更することです has_cuda.cu
へ 、次のようにコンパイルできるはずです:
nvcc has_cuda.cu -o has_cuda
最後に、Ubuntu 16.10 は現時点で CUDA の公式にサポートされているディストリビューションではないため、マシンへのインストール方法について予期しないことがいくつかある可能性があります。以前にリンクされたインストール ガイドを読むことをお勧めします。このガイドには、環境変数の設定や、CUDA インストールを「検証」する方法など、インストール後のセットアップ手順に関する有用な情報が含まれています。
CUDA コードを実行していて何らかの問題が発生した場合は、必ず適切な cuda エラー チェックを使用し、次のように cuda-memcheck でコードを実行してください。
cuda-memcheck ./has_cuda
報告されたエラー情報を理解していなくても、助けようとしている人にとっては役に立つかもしれません.