clCreateCommandQueueWithPropertiesで-30(INVALID_VALUE)となる問題

OpenCLC++バインディングCommandQueueを作るときにエラーが出てしばらく詰まったのでメモ。

環境

問題

https://blog.miz-ar.info/2017/05/opencl-with-cxx-0/ を参考に簡単なGPUプログラムを組んでみて、コンパイルは通ったのだが実行時に表題のclCreateCommandQueueWithProperties(コードは-30)でエラーが出てしまう。先のリンクのコードをコンパイルして実行しても結果は同じなので環境を疑った。

だが原因は、コンパイル時にCL_HPP_TARGET_OPENCL_VERSIONを指定しろと怒られたのでてきとーにバージョンを200にしてしまったのがいけなかったようだ。OpenCLのバージョンはclinfoで調べられるのできちんと指定してあげる(この時CL_HPP_MINIMUM_OPENCL_VERSIONより大きいとまた怒られるのでこれも指定する)。

#define CL_HPP_MINIMUM_OPENCL_VERSION 100
#define CL_HPP_TARGET_OPENCL_VERSION 120