自宅のcuda環境を2.3から3.2にアップグレードすべくcudaまわりをキレイに再インストールすることにした。
その時の備忘録。


cudatoolkit_3.2.16_linux_64_rhel5.5.run
devdriver_3.2_linux_64_260.19.21.run
gpucomputingsdk_3.2.16_linux.run
をそれぞれインストール。
インストール方法については
http://developer.nvidia.com/object/cuda_3_2_downloads.html#Linux
Linux Getting Started Guide(PDF)に詳しく書かれているのでそのとおりに作業してすんなり。
(2.3の時はここらへんのドキュメントをしっかり読んでなかったのでえらい苦労した、、、)

~/NVIDIA_GPU_Computing_SDK/CにcdしてmakeしてdeviceQueryなどが実行できることを確認。



コンパイル時の設定
適当にコードを書いてnvccコンパイルしようとすると

cutil.h: そのようなファイルやディレクトリはありません

が出る。


自分のコードの中で#include でcutilというヘッダーファイルを読み込んでいるが、このパスが見当たらないエラーということらしい。
ファイル自体は~/NVIDIA_GPU_Computing_SDK/C/common/inc/cutil.h
にあるので、以前は/usr/includeとかにコピーしていたが、どうやら/usr/local/cuda/bin/nvcc.profileにコンパイル時の環境変数を書けるらしい。

TOP = $(_HERE_)/..
HOME = /home/hogehoge/NVIDIA_GPU_Computing_SDK
LD_LIBRARY_PATH += $(TOP)/lib:$(TOP)/extools/lib:
PATH += $(TOP)/open64/bin:$(_HERE_):

INCLUDES += "-I$(TOP)/include" "-I$(TOP)/include/cudart" $(_SPACE_) "-I$(HOME)/C/common/inc"

LIBRARIES =+ $(_SPACE_) "-L$(HOME)/C/lib" "-L$(TOP)/lib$(_TARGET_SIZE_)" -lcudart

CUDAFE_FLAGS +=
OPENCC_FLAGS +=
PTXAS_FLAGS +=

と書いておいた。
赤字が追加した設定。
cudaまわりのincludeする必要があるディレクトリをINCLUDESに追記して、必要なライブラリをLIBRARIESに追記している。




その後再度コンパイルをしたが、

nvcc -o keisan keisan.cu
/tmp/tmpxft_000078bb_00000000-13_keisan.o: In function `main':
tmpxft_000078bb_00000000-1_keisan.cudafe1.cpp:(.text+0x1735): undefined reference to `cutGetCmdLineArgumenti'
tmpxft_000078bb_00000000-1_keisan.cudafe1.cpp:(.text+0x17ec): undefined reference to `cutCheckCmdLineFlag'
collect2: ld はステータス 1 で終了しました

が出る。

cutilというライブラリをコンパイル時は指定しないといけないので、
nvcc -o ./keisan keisan.cu -lcutil
とするが

/usr/bin/ld: cannot find -lcutil
collect2: ld はステータス 1 で終了しました

でエラーになる。

落ち付いて先ほどnvcc.profileで指定した$(HOME)/C/libの中を見るとlibcutil_x86_64.aという名前になっているので
nvcc -o ./keisan keisan.cu -lcutil_x86_64
と指定したらコンパイル成功。
名前が変わっている理由はよくわからん。



参考
CUDAで最新のTOOLKITを使用するとCUTILライブラリがリンクできない問題
http://d.hatena.ne.jp/den8/20101026/1288101236
[GPGPU][CUDA]パスで難航CommentsAdd Star
http://d.hatena.ne.jp/ryamada22/20091009/1255083882