投稿

9月, 2015の投稿を表示しています

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

gdb + emacs = IDE

OpenCLをトライ中。 AMDのOpenCL SDK V3.0を使っている。Ubuntu上で試しているが、開発環境はテキストエディタとMakefileとGDB。昔はこの組み合わせなので異論はないが、素でGDBを使うのは面倒くさい。 emacsとGDBの組み合わせで簡単にできるはずとググって以下のページ。 http://d.hatena.ne.jp/higepon/20090505/p1 この通りに.emacsを直してM-x gdbすればかなり簡単にGDBを使える。とりあえずソースコードを見ながら直接ブレークポイントを張って変数の内容がオンマウスで見えてマウスだけでステップ実行できるのでIDE気分。