6.1. 基本実装

Note

プラットフォーム、コンテキスト、コマンドキューの詳細についてはは、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)

(1)

プラットフォームのインスタンスを生成

(2)

コンテキストのインスタンスを生成。コンテキストがアクセスするデバイスについてはGPUに限定。

(3)

コマンドキューのインスタンスを生成

プラットフォーム、コンテキスト、コマンドキューはOpenCLプログラムに必須のオブジェクトですので、記述すべき行が3行で済むのは、C言語のOpenCL APIに対して相対的に優位といっても差し支えないでしょう。

もちろん読者は現時点では、プラットフォーム、コンテキスト、コマンドキューについては概念しか覚えがないはずですので、詳細についての解説は本書第3部にとっておきます。

Note

各クラスのコンストラクタの仕様を知りたい方はSection 15.1, “Platform”Section 15.4, “Context”Section 16.1.1, “CommandQueue”を参照ください。

この段階で読者が理解していただきたいのは、以下の依存性です。

Note

詳細はSection 13.6.1, “プラットフォームモデル”Section 13.6.2, “実行モデル(Execution Model)”等を参照ください。

この依存性の続きには以下の依存性も存在します。

つまりコマンドキューのインスタンスを生成するまでの3行のコードは最終的には、プログラム実行に不可欠なボイラープレートコード(Boilerplate Code)と言っても良いでしょう。

Important

第一部でカバーするPyOpenCLの機能では、プログラムオブジェクト、カーネルオブジェクトの明示的生成は不要です。本書第三部で仔細を説明いたします。

Copyright 2018-2019, by Masaki Komatsu