240 likes | 358 Views
13 章. 高橋敏行. マンデルブロ集合. フラクタル. 次元を持った無限に複雑なオブジェクト ブノワマンデルが概念を導入 天気予報 やデータ圧縮の基礎として利用 複素数 の反復計算により生成される. マンデルブロ集合. 複素数 平面 X-Y 上の以下の式の反復で得る 最大 反復数に達するか Z が無限大に発散するまで反復. マンデルブロ集合. 反復回数が多いほど,フラクタル画像の精度が高くなる 精度が高いほど,計算コストがかかる 従来のシリアル方式では多くの時間がかかる. C 言語を用いた表現. 最初は C 言語を用いて高レベルでモデル化
E N D
13章 高橋敏行
フラクタル • 次元を持った無限に複雑なオブジェクト • ブノワマンデルが概念を導入 • 天気予報やデータ圧縮の基礎として利用 • 複素数の反復計算により生成される
マンデルブロ集合 • 複素数平面 X-Y 上の以下の式の反復で得る • 最大反復数に達するか Zが無限大に発散するまで反復
マンデルブロ集合 • 反復回数が多いほど,フラクタル画像の精度が高くなる • 精度が高いほど,計算コストがかかる • 従来のシリアル方式では多くの時間がかかる
C言語を用いた表現 • 最初は C 言語を用いて高レベルでモデル化 • 例として,マンデルブロ集合の1つの領域を表す画像を生成する (XH,YH) (XL,YL) 0
C言語を用いた表現 • 2つの関数で構成される • main 関数 • mandelbrot 関数 • main関数 • mandelbrot 関数の呼び出し • XとYのスケーリング値の計算
スケーリング YH-YL 拡大 Cの領域 XH-XL スケーリング: dx=(XH-XL)/XSIZE dy=(YH-YL)/YSIZE 描画領域 XSIZE YSIZE
13-2 2 main関数
13-2 2 main関数 スケーリング
mandelbrot 関数 • 出力ファイルを開き,ヘッダ情報を生成 • 出力サイズ内の各ピクセルで計算 値が無限大に発散か,反復数最大まで • 反復値に基づいてピクセルへ色を割り当て 単純のため,グレースケールにて表現
13-2 1 1.ヘッダ情報を生成
13-2 2 2.各ピクセルの計算 (後述) 3.色の割り当て
mandelbrot 関数 • 2.各ピクセル計算の詳細 • ◯_real は実部,◯_imagは虚部の変数
13-2 2 C の実部と虚部をずらす
浮動小数点⇒固定小数点 • 浮動小数点演算は,ハードウェアでレンダリングすると非効率 • C-to-コンパイラは浮動小数点をサポートしてない • 32ビットの固定小数点を使用する • 整数8ビット,小数24ビットとする • Impulse C ライブラリには,固定小数点演算のためのサポートがある fix_mandelbrot 関数
ストリーミングバージョン • FPGAへの移植 • 設定データを転送できるようにする (X-Y 平面を定義する入力値) • ピクセルデータを転送できるようにする
ストリーミングバージョン プロセス 入力ストリーム config_stream 出力ストリーム pixel_stream
ストリームを含む関数の宣言 13-4 1 32ビット整数型で ローカル変数の宣言 2と4を定数の固定小数点として割り当て コンフィギュレーション ストリームを開く ピクセルストリームを開く
13-4 2 ピクセルストリーム へ書き出し (後述) ストリームを閉じる
ストリーミングバージョン • ピクセルストリーム → 24 ビット B<<16 BlueMask BlueMask GreenMask G<<8 GreenMask RedMask RedMask R pixel_stream 8 ビット (R) 8 ビット (G) 8 ビット (B)
以降では より多くの並列処理を導入 プロセスを改善する