CUDA実行時の”unspecified launch failure.”について

CUDAでプログラミングしてるとたぶん一度はこのエラーを見ることがあると思う。

Cuda error in file 'utils/MemoryUtils.h' in line 28 : unspecified launch failure.

このソースの28行目は

	CUDA_SAFE_CALL(cudaMemcpy(hostMemoryPointer.get(), deviceArray, arrayLength * sizeof(T),
					cudaMemcpyDeviceToHost));

のようになっており、これと同様なメモリ操作関数でもよく起こる。

実はこのエラーはこのコードとほとんど関係なく、大抵メモリアクセスエラーが原因だ。どうやらGPU側のエラーは即座に実行例外として表示されないらしく、ホスト側からメモリーを操作しようとした時点でエラーが発生するため、このようにメモリをコピーしようとしたときにエラーが出たように表示されてしまう。
よってこのようなエラーが発生した場合はメモリの確保量が足りない、またはアドレスを間違えていないかをチェックするのが定石だと言えよう。