2011-09-10

CUDAのカーネル関数を長時間実行するとエラーになる問題

自宅に設置したスーパーワークステーションの環境設定も終わって、早速CUDAプログラミングで遊んでみた。Massiveな並列計算をする前に、GPU自体の計算ってどのくらい速いかを見てやろうと思ってテストプログラムを作ってみた。

__global__ void kernel_test()
{
    // 重い計算
}

    // ...
    kernel_test<<<grid, block>>>();
    cudaMemcpy(/* ... */);
    // ...

計算のパラメータとして定数Nを用意してやっていろいろ変えて遊んでみた。小さいNの時は問題なく動くのだが、Nをちょっと大きくすると以下のようなエラーが出てうまくいかない。

Cuda error in file 'test.cu' in line 8 : the launch timed out and was terminated.

変だなーと思って会社のCUDAマシンで実行したところ問題ない。う〜む壊れているのかと思っていろいろ検索してみたところ原因が判明。家のマシンはTeslaが2枚ささっているのだが、そのうち1つをディスプレイデバイスとして使っている。このデバイス上で一定時間カーネル関数が実行されたままになるとwatch dog timerによって実行が中断されるとのこと。

CUDA SDKに倣ったプログラム環境でcutilを用いている以下のような場合:

#include <cutil.h>
int main(int argc, char *argv[])
{
    CUT_DEVICE_INIT(argc, argv);
    // ...
}

コマンドライン引数として--device=1を与えることで2枚目のディスプレイにつながっていないTeslaを利用するように指定できる。

References

CUDA program causes nvidia driver to crash - Stack Overflow

0 件のコメント:

コメントを投稿