OpenCLって?

WebCLってのが出たみたいですけど、
そもそもOpenCLって何?っていうところだったので、
ちょっと調べてみました。
(その前にもわかっていないこと多々あるけど)


GPUコンピューティングを実現する仕組み

GPUだけでなくCellやDSPなどでも利用できる

・下記3つの仕組みが必要
1、「OpenCL Platform Layer」(OpenCLプラットフォームレイヤー)
OpenCLをサポートするプラットフォームの情報を得たり,
OpenCLで作成したプログラムを動作させるためのリソースを得たりといった,
OpenCLを利用するために無くてはならない足回りを実現する部分
2、「OpenCL Compiler」(OpenCLコンパイラ
プログラマーは,「演算デバイス上で動作するプログラム」を
作るためのプログラミング言語OpenCL C言語」で
ソースコードを書くことになるが,そのソースコードを,
演算デバイス上で実行できるバイナリ
(※誤解を恐れず言い換えると,実行ファイルのようなモノ)に変換するもの
3、「OpenCL Runtime」(OpenCLランタイム)
制御用デバイスから,演算デバイス上で実行できるバイナリを
演算デバイスに読み込ませ,実行を指示し,実行した結果を
制御用ホストに取り込むためのソフトウェア的なインタフェースを提供するもの

OpenCL C言語を元に作られた演算デバイス側のバイナリは,演算デバイスによって異なる
互換性が保たれるのは,あくまでもOpenCL C言語で書かれたソースコードの段階まで

コンパイラは各ベンダが提供


APIは2種類ある
1、clCreateProgramWithBinary():演算デバイスのアクセラレーションをバイナリで提供するAPI
2、clCreateProgramWithSource():実行時にソースコードを渡して,その場でバイナリにコンパイルするAPI

各ベンダのコンパイラを使って、あらかじめバイナリを用意しておくこともできるし、
ソースコードをそのまま渡すこともできる。

・CPUとGPUで得意な演算の違いって何?
GPUは倍精度の浮動小数点演算が不得意である。GPUが扱う多くの画像演算では、
整数演算や単精度の浮動小数点演算で足りてしまうために
浮動小数点演算器は仮数部が24ビット程度とそれほど広くなく、
倍精度の浮動小数点演算を行うには分割して幾度も演算器を使う必要がある。
→ただし、最近のGPGPUはここいらへんの性能も上がってきている?


・CPUとGPUの違い
プロセッサ数が全然違う。
CPUは複雑な処理ができるけどプロセッサ数少なめで、GPUは単純な処理しかできないけどプロセッサ数多め

1コアのCPUが1ピクセルしか処理できないのに対し、
100コアあるGPUであれば一気に100ピクセル分処理できる
→もちろんGPUの方がクロックは低いが、やはりコア数の多さは大きい
http://1000vars.net/archives/239

・FPUとGPUの関係
GPU自体が多くのFPUを積んでいる
→ということはGPUのFPUは倍精度の演算が苦手?
→FPUってそんな苦手とかってあるの?どれも倍精度までいけるんじゃなくて?

倍精度対応の積和算器(DFMA:Double Floating-point Mul and ADD unit)が必要らしい
基本はGPGPUモードの時だけ使う模様
DirectXOpenGLの双方でもFP64を効果的に扱える仕組みが提供されていないので、使いようがないらしい


◆残課題
・画像処理はなんで32ビットで事足りるのか
・浮動少数点演算器
OpenClコンパイラとランタイムのありかは?

◆参考サイト
・これで分かるOpenCLNVIDIAOpenCLセミナーから,OpenCLの正体と可能性を再確認する
http://www.4gamer.net/games/032/G003263/20091104040/

OpenCLウィキペディア
http://ja.wikipedia.org/wiki/OpenCL

OpenCLプログラミング
http://wiki.livedoor.jp/mikk_ni3_92/d/OpenCL%CA%D402

・なぜGPUコンピューティングが注目を浴びているか
http://www.yasuoka.mech.keio.ac.jp/gpu/gpu0.php

GeForce vs ATI Radeon - アーキテクチャ解説で紐解くGPU戦争"夏の陣" (前編)
FP64倍精度演算機能の比較
http://journal.mycom.co.jp/special/2008/gpu01/005.html

FPGAを使った数値演算回路実現の勘所(3) ―― 浮動小数点演算器の構成を考える Part 1
http://www.kumikomi.net/archives/2010/08/ep24suc3.php