マンデルブロ集合

この記事はOpenCL入門―GPU&マルチコアCPU並列プログラミング for MacOS Windows Linuxを参考に書いている。
マンデルブロ集合の計算結果に応じて色分けされた画像を、ビットマップ形式のファイルとして生成するプログラム
マンデルブロ集合とは、複素平面上の集合が作り出すフラクタルである。(Wikipedia参照)
$Thanksgiving days to hang out(←旧ときどき日記)-マンデルブロ
↑マンデルブロ集合をxy平面に表したもの
どのような集合かというと
Thanksgiving days to hang out(←旧ときどき日記)-マンデルブロ平面
で定義される複素数列 {zn}n∈N が n → ∞ の極限で無限大に発散しないという条件を満たす複素数 c 全体が作る集合がマンデルブロ集合である。ただこれではただの数列なので、これを平面に表すために、
zn を点 (xn, yn) に、c を点 (a, b) にそれぞれ置き代えて、
Thanksgiving days to hang out(←旧ときどき日記)-マンデルブロ漸化式
とすればいい。
今回はこのマンデルブロ集合を計算し、その書く要素計算結果ごとに色分けし、最後に集合の画像を出力するというプログラムを作成する。
このプログラムを構成するクラスは
$Thanksgiving days to hang out(←旧ときどき日記)
となっている。
プログラムの流れ
1.Mainが
 -Mandelbrot
-VdcMapper
-ClHelper  を作成
2.VdcMapper, ClHelperによって取得した材料をMandelbrotがセットする
3.メインが計算命令
4.Mandelbrotがカーネル作成、メモリオブジェクト作成、カーネル引数の設定、実行リクエスト
5.Calc.cl発動(計算)
6.メインが計算結果を取ってくる
7.画像出力のためにColortableで色をつける
8.Bitmapに渡して、画像出力
そして今回の並列処理について説明する。マンデルブロ集合を求める計算をOpenCLデバイスにしてもらうことになるが、その際に考えなければいけないことが3点ある。
1.カーネル関数
2.インデックス空間の次元
3.ワークアイテムの数
OpenCLデバイスは.clファイルを処理するが、カーネル関数にどのような処理をさせるか、インデックス空間をどのようにとるか、ワークアイテムをどのようにPEに割り振るかを考えなければいけない。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です