プラットフォーム、コンテキスト、コマンドキューの詳細についてはは、Section 13.6.1, “プラットフォームモデル”、the section called “コンテキスト”、the section called “CommandQueue”の項目を参照ください。
PyOpenCLでの開発には前提として、プラットフォーム、デバイス、コンテキスト、コマンドキュー等の役割等、OpenCLアーキテクチャの理解は必須であるものの、コーディング自体は極めてシンプルにできます。
例えばGPUデバイスに命令やデータを送るためのコマンドキューオブジェクトを生成する場合は、以下のように3行の記述で可能です。
import pyopencl as cl platforms = cl.get_platforms() #(1) ctx = cl.Context([platforms[0].get_devices(cl.device_type.GPU)[0]]) #(2) queue = cl.CommandQueue(ctx) #(3)
プラットフォーム、コンテキスト、コマンドキューはOpenCLプログラムに必須のオブジェクトですので、記述すべき行が3行で済むのは、C言語のOpenCL APIに対して相対的に優位といっても差し支えないでしょう。
もちろん読者は現時点では、プラットフォーム、コンテキスト、コマンドキューについては概念しか覚えがないはずですので、詳細についての解説は本書第3部にとっておきます。
各クラスのコンストラクタの仕様を知りたい方はSection 15.1, “Platform”、Section 15.4, “Context”、Section 16.1.1, “CommandQueue”を参照ください。
この段階で読者が理解していただきたいのは、以下の依存性です。
この依存性の続きには以下の依存性も存在します。
つまりコマンドキューのインスタンスを生成するまでの3行のコードは最終的には、プログラム実行に不可欠なボイラープレートコード(Boilerplate Code)と言っても良いでしょう。
第一部でカバーするPyOpenCLの機能では、プログラムオブジェクト、カーネルオブジェクトの明示的生成は不要です。本書第三部で仔細を説明いたします。
Copyright 2018-2019, by Masaki Komatsu