2.3. カーネルプログラミング言語

Platform APIとRuntime APIはホストプログラムと呼ばれるリソースの管理や制御を行うのにたいして、カーネルプログラミングは、CPU/GPU等のデバイス上で実際の処理を担当します。

カーネルプログラミング言語はOpenCL-C言語と呼ばれており、ホストプログラムのソースとなるC言語を補完してくれる、ISO-C99規格から派生した外部言語です。

OpenCLをサポートするデバイス対して命令をするコマンドを実行させるには、カーネルという関数をOpenCL-C言語でコーディングするのが、カーネルプログラミング言語の語源です。

OpenCL-C言語ではC言語がCPUなどのGeneral Purpose RegisterやComputingだけができる、以下のような複雑な処理機能は規格から省かれています。

それ以外にも、structやunionはカーネル関数の引数として渡すのを除き処理ができないようになっています。

反対にOpenCL-C言語には、C言語を拡張した機能もあります。

またヘテロジニアス環境がサポートしなくてはならないデバイスが膨大なため、浮動小数点演算の規格はC言語よりも緩和した基準を指定しています。

CPUの世界ではベンダーがIEEE-754と854規格に準拠させるため問題となりませんが、DSP/FGPA/GPU等のデバイス全てでサポートするのは困難なため、クロノスグループは基準を緩和させることにしました。

これらについて一部は本書でも解説しますが、IEEE754が浮動小数点演算で使われるということを抑えておき、浮動小数点での正確な操作が不可欠な場合は規格書を読むようにしてください。

Copyright 2018-2019, by Masaki Komatsu