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言語的には正しい気もするので、ここも自分の思い込みか。
思い込みはいかん。
やっと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言語的には正しい気もするので、ここも自分の思い込みか。
思い込みはいかん。
コメント