OpenCL を始める前に
About
OpenCLを始める前に、最低限知っておくべき知識やその方向性をまとめておきます。OpenCLの関連コンテンツは、元よりプログラミングの初心者を対象としていませんから、知っていてもおかしくない程度のものもあるかもしれません。しかしながら、C#によるプログラミングではほとんど意識しない概念や仕組みがありますし、可能な限り門を広く開ける意味もあって、この記事は用意されています。
必要な用語と概念
- ホスト/ホストプログラム(host)
- OpenCLを呼び出す側の主たるプログラムです。
- プラットフォーム(platform)
- あるプログラムなどを動かすための(動作)環境です。ハードウェアやソフトに限りませんが、ここではOpenCLを動かすための環境を指します。
- コンテキスト(context)
- プログラミングにおける'context'は、直訳ではなく、制御情報あるいは情報そのものです。
- カーネル(kernel)
- プログラムとハードウェア間の処理を行う部分・機能です。具体的にメモリをどのように扱うかなどを指定し、制御することができます。
- コマンド/コマンドキュー(command/command queue)
- 処理を実行させるための命令です。カーネルに処理を実行させるときは、コマンド(キュー)を利用します。
- (非)ブロッキング操作(blocking)
- 入出力の完了を待って処理を抜ける処理(操作)は、ブロッキングです。反対に入出力の完了を待たずに処理を抜ける処理(操作)は、非ブロッキングです。
C#プログラミングの知識
- DllImport属性
- C++ などで実装された DLL/dll(Dynamic Link Library) に定義されるメソッド(関数)を、C#(.NET) で利用できるようにします。
- 値渡し / 参照渡し(ref,out)
- メソッドに引数を渡す方法は大きく2種類、'値渡し'と'参照渡し'があります。両者の違いを理解できる必要があります。また C# における、ref と out の違いも理解しておく必要があります。
- IntPtr / ポインタ
- C#を用いた一般的なプログラミングでは利用しないポインタについてある程度の知識が必要です。C/C++ 言語を用いたプログラミングを行ったことがある人は特に問題ないと思われます。
時間の概念
例えばリアルタイムに処理をしたいとして、ゲームなどの画面の更新速度は秒間30回更新(=30fps)です。これらの時間について、必要なら覚えておく必要があります。
- 1秒 = 1000ミリ秒
- 0.1秒 = 100ミリ秒
- 30fps = 0.33…秒 = 33ミリ秒
公式のリファレンス
公式のリファレンスは次のページから参照することができます。OpenCL を利用するにあたって必ず参照することになります。