OpenCLではまった
OpenCL勉強中。 やっとHelloWorldを改造したプログラムが動いた。 とりあえずclBuildProgramでビルドエラー(エラーコード-11)になる。なるが原因がわからない。clGetProgramBuildInfoでエラーログを取得すれば詳細がわかるはずと思って試してもエラーログが取れない。 ここで思いっきり思い違いをしていた。エラーログを取得するの意味を自分はエラーログファイルのパス名を取得できると思い込んでいた。そのためchar型の256バイトぐらいの配列を渡していた。これだとエラーになって取得できない。 いろいろググりながら試したところstackoverflowのサンプルが気になる。 http://stackoverflow.com/questions/9464190/error-code-11-what-are-all-possible-reasons-of-getting-error-cl-build-prog 真面目にサイズを取得してその分のサイズをアロケートして再度呼び出している。試しにバッファのサイズを1024にして呼び出すとエラーにならず、ログそのものが得られた。 思い込みと手抜きはイカンなー。 で、ビルドできない原因はわかった。エラーを見るとcl_ucharなんて型は知らんと言うている。いやいやホスト側のコードはこの型でビルドは通るし(CL.hに定義があるんやろうけど)。KhronosのspecificationのPDFを確認する。 https://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/scalarDataTypes.html 確かにType in OpenCL language側は単にunsigned charになっている。C言語的には正しい気もするので、ここも自分の思い込みか。 思い込みはいかん。