NVIDIA CUDA/OpenCL 設定メモ
Linux環境でNVIDIAのCUDA/OpenCLを使う場合、以下のような環境変数の設定に注意する必要がある。
pre>>
NV_COMPUTE_SDK_PATH="/path/to/NVIDIA_GPU_Computing_SDK"
SDK_INSTALL_PATH="/path/to/NVIDIA_GPU_Computing_SDK/C"
<<--
Linux環境でNVIDIAのCUDA/OpenCLを使う場合、以下のような環境変数の設定に注意する必要がある。
pre>>
NV_COMPUTE_SDK_PATH="/path/to/NVIDIA_GPU_Computing_SDK"
SDK_INSTALL_PATH="/path/to/NVIDIA_GPU_Computing_SDK/C"
<<--
まだリリースされて間もないせいか、
NVIDIAのOpenCL SDKを使っていると不可解なエラーに遭遇します。
掲題のようなエラーメッセージを出すのもその一例ですが、
以下のようなコード(一部抜粋)でエラーがでます。
c>>
float4 x = sphere->c;
dg->t = x.x;
<<--
しかし以下のように記述すると大丈夫です。
c>>
float x = sphere->c.x;
dg->t = x;
<<--
OpenCLコンパイラが生成したptxコードの中に'selp'というのが入るような場合に問題が発生するようです。
NVIDIAのOpenCL SDKの場合、*.clファイルをCLコンパイラがコンパイルして、ptxという中間言語に変換します。さらに、ptxをptxparse(PLANGというパッケージの一部らしい)が解析してllvmのbcに変換します。
このケースでは、CLコンパイラが吐き出すコードと、ptxparse側の認識が一致していない感じです。
とりあえず、バグが直るまでコンパイラの気持ちになって回避するしかありません。
NVidiaのOpenCL SDKには、少なくともkernel moduleとdriver component
の二つの要素があるらしい。
pre>>
Error: API mismatch: the NVIDIA kernel module has version 190.18,
but this NVIDIA driver component has version 185.18.08. Please make
sure that the kernel module and all NVIDIA driver components
have the same version.
<<--
たまにこんなエラーメッセージが出てきます。
kernel moduleというのはバージョン番号とファイル名の一致からすると
pre>>
/usr/lib64/libcuda.so.190.18
<<--
このへんのファイルらしい(Linux版)
driver componentというのはどこにある何を指しているのかが不明。