忍者ブログ

Memeplexes

プログラミング、3DCGとその他いろいろについて

C#でOpenCL入門 チュートリアル一覧

 C#でOpenCLを使うシリーズの一覧をまとめます。
まだメモリフェンスだとか重要な機能を説明していないような気もしますが、どうもいじってみたところ、使わなくてもそれなりのことが出来るような気がします。
(メモリフェンスがなければ失敗するようなプログラムを書こうとしたのですが、仕様にない動作?により上手く動いてしまいました。環境によるのかもしれませんんが)

というわけでここで一区切り。
全部で12の記事になりました:

  1. プラットフォーム
  2. デバイス
  3. コンテキスト
  4. コマンドキュー
  5. バッファ
  6. プログラム
  7. カーネル
  8. データ並列
  9. コンパイルエラー捕捉
  10. グループID、ローカルID
  11. 非バッファ引数
  12. スレッドとグループの個数

感想

以前、似たような技術であるDirectX11のコンピュートシェーダーを扱いました。
それと比べるとOpenCLは簡単かつ柔軟な印象を受けました。

まずインターフェースが綺麗です。
DirectXではなんだか初期化が面倒くさいですがOpenCLはそんなことはありません。
まぁ「そんなことはありません」というと正確ではないかもしれませんが、グラフィックスは無視してGPGPUだけを考えているためか、ましなほうです。
また、スレッドグループのスレッド個数もDirectX11ではHLSLにハードコーディングしなくてはいけませんが、OpenCLではCPU側から柔軟に変更できます(意味があるかはあまりわかりませんが、柔軟といえば柔軟です)。

というふうにOpenCLのいいところだけ書きましたが、APIがC言語で書かれているので、C#との相互運用がちょっとめんどくさいですね。
誰かC#用OpenCLラッパーライブラリを書いてくれればだいぶ使いやすくなりそうです。

APIもラッパーを書きやすいタイプな気がします。
Managed Wrapper for OpenCLなんてのが出たらいいんですけどね。

拍手[1回]

PR