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

5/28-6/3

5/28

EOPL Section 4.2.1 ~ Section 4.2.3

5/29

芸術の課題作品の展示会があった。自分が作ったのは「遠くが見えないカメラ」で、文字通り遠くにモザイクがかかるカメラ(というよりフィルタ)だ。Androidアプリとして実装されており、深度センサなどは使わずにカメラとジャイロセンサーのみを用いて遠近の測定を行っている。

仕組みは割と単純で、遠くのものほどジャイロセンサーの傾きに対してカメラで撮った物体の移動量が大きいことを利用している1。フレーム間の移動量(オプティカルフローというらしい)とジャイロセンサーの傾きの比を取ってあるしきい値以上になったらそのブロックにモザイクをかける。これで上手くいくと思ったが、近くのものに対してもモザイクがかかってしまう。移動量/傾きという比をとっている以上、細い傾きに対して敏感になっているっぽい。ちゃんとやるんだったら入力の特性を測るべきなんだろうけど気力と時間がなかったのでそのまま出した。

当日はそれっぽく(?)動いていた2ようで反応も悪くなかった。嬉しかったのは、これどうやっているの?と聞いてくれた人がそこそこいた事。こういう技術的なことを聞かれて説明するのは楽しい。

f:id:long_long_float:20180606035950p:plain

5/30

試験勉強してた

5/31

試験勉強と先輩のおごりで馬肉食べてた

6/1

LIFTの論文を読んでた。LIFTとはGPUをターゲットとした関数型3なIRらしい。MapやReduceを始めとした集合操作関数を組み合わせて処理を書いていくそう。slideを使えば行列のステンシル計算もできる。これだけ見ると表現力は結構ありそうなんだけどどうなんだろうか。コンパイルの処理はぱっと見ゴリゴリに最適化をしているわけではなさそうだがパフォーマンスは手で書いた場合とあまり変わらなさそう。もしかしたらこれ関係で卒論はやるかも。

6/2

休んでた(何もしてない)

6/3

ぷにケットに行ってた。コミケ以外の即売会に行くのは初めてなんだけどなかなか良かったので次も行こうと思う。


  1. 言われるまで気が付かなかったがスマートフォンを平行に動かすと正しく取れないという… あと特徴点の移動量を取っている以上、白い壁などでは通用しない

  2. 白い机の上(=近く)で展示していたので上手い具合にモザイクがかからなかったというオチ?

  3. 一応ラムダ計算をベースにしている

5/14-5/20

5/14

芸術の課題とFactorioやってた

PVから漂うワクワク感

工場のラインを作っていくゲームなんだけどその過程がプログラミングに似ていて、

  1. ライン設計(やらないこともある)
  2. 建設
  3. 動くのを眺めながらニヤニヤする
  4. どこかにボトルネックがあるとラインを組み直したり工場を増設したりする(≒リファクタリング)
  5. 3にもどる

という流れでプレイする。で、想像どおりに動くと楽しくて無限に遊んでしまうので忙しい時はやらない方がいい。

5/15

虚無

5/16

[WIP] Improve RemoveConstantLoadInLoops by long-long-float · Pull Request #98 · doe300/VC4C · GitHubの続きとレポートとFactrio

5/17

システムプログラミングの課題(シグナルでいろいろするやつ)とTOEICの勉強

5/18

[WIP] Improve RemoveConstantLoadInLoops by long-long-float · Pull Request #98 · doe300/VC4C · GitHubの続き

5/19

TOEICの勉強

5/20

芸術の課題のためにAndroidアプリの開発環境をセットアップしてた。なにかする度にもりもりパッケージのインストールをしてきて笑った。

TOEICは、まあ。

5/7-5/13

最近、過去を振り返って何もしていないのでは?と絶望することが増えてきたのでここに1週間ごとに何をしたか記録をしていこうと思う。

5/7

芸術(という講義)の課題をやってた。題目が割と面白くてドラえもんひみつ道具を実装する、というものだった。ただ実装するだけではなく、何か疑問を投げかける等の意味を持たせないといけない。タイムマシンを例にとると、これが普及した社会において人々の考え方は今現在とどのように異なるか、というのを考えてそれを作品として表現する。

5/8

研究室にあった「ハルロック」を読んでた。思い立ったらすぐに手を動かすという姿勢は憧れる(最近そういうのができていないので)。あと使用技術についてちゃんとぼかさずに書いてあるのは偉いと思った。どうやって作ったかを描かずにポン、というのが多い気がするので。あまりにも詳しいので高専時代を思い出した。

5/9

github.com

EOPLを読んでた。

5/10

シェルを実装する課題をやってた。リダイレクト(>, >>, <)や逐次実行(;), 論理演算子(&&, ||)を使えるようにした。論理演算子の挙動で面白いのは、演算子にはC言語のような優先順位がなくただ&&は直前のコマンドが成功すれば右を実行、||は直前のコマンドが失敗すれば右を実行するというのだ(演算子によらず左結合)。

なのでtrue || false && echo helloを実行すると、まずtrueが実行され、次に|| falseの直前のコマンドが成功なのでfalseは実行されず、&& echo helloは直前のコマンド(true)が成功なのでecho helloが実行される。

5/11

前日の続き(サブシェルの実装)

5/12

jus 勉強会 ELF入門 - connpassに行ってた。ELFの簡易的な解析プログラムを作ってみるというもので、アプローチとしてはドキュメントを読むということから始めずにELFファイルをバイナリエディタで読んだり提供されているELFライブラリのヘッダ(/usr/include/elf.h1)を読んだりしてファイルの構造を把握する。で、実際に解析するツールを講師である坂井弘亮さんがライブプログラミングで作成してて軽やかにドキュメントを引いたりコーディングしてておおーってなった。

その帰りのバスを乗り間違えたついでに中野ブロードウェイに行ってみたのだが圧倒された2

5/13

課題ととーいっくの勉強


  1. システムによって場所は異なる

  2. ある意味、秋葉原よりサブカルチャーしてた