clCreateCommandQueueWithPropertiesで-30(INVALID_VALUE)となる問題
OpenCLのC++バインディングでCommandQueue
を作るときにエラーが出てしばらく詰まったのでメモ。
環境
- nvidia/opencl:devel
- GeForce GTX 960
- OpenCL 1.2 CUDA
問題
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ようで反応も悪くなかった。嬉しかったのは、これどうやっているの?と聞いてくれた人がそこそこいた事。こういう技術的なことを聞かれて説明するのは楽しい。
5/30
試験勉強してた
5/31
試験勉強と先輩のおごりで馬肉食べてた
6/1
LIFTの論文を読んでた。LIFTとはGPUをターゲットとした関数型3なIRらしい。MapやReduceを始めとした集合操作関数を組み合わせて処理を書いていくそう。slideを使えば行列のステンシル計算もできる。これだけ見ると表現力は結構ありそうなんだけどどうなんだろうか。コンパイルの処理はぱっと見ゴリゴリに最適化をしているわけではなさそうだがパフォーマンスは手で書いた場合とあまり変わらなさそう。もしかしたらこれ関係で卒論はやるかも。
6/2
休んでた(何もしてない)
6/3
5/14-5/20
5/14
芸術の課題とFactorioやってた
PVから漂うワクワク感
工場のラインを作っていくゲームなんだけどその過程がプログラミングに似ていて、
という流れでプレイする。で、想像どおりに動くと楽しくて無限に遊んでしまうので忙しい時はやらない方がいい。
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
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.h
1)を読んだりしてファイルの構造を把握する。で、実際に解析するツールを講師である坂井弘亮さんがライブプログラミングで作成してて軽やかにドキュメントを引いたりコーディングしてておおーってなった。
その帰りのバスを乗り間違えたついでに中野ブロードウェイに行ってみたのだが圧倒された2。
5/13
課題ととーいっくの勉強