高速化の詳細

◇複数スレッド計算

スレッドはプログラム内で行う処理を並列化するプログラミング技術です。特に最近増えているマルチコアやマルチプロセッサのパソコンでは、それぞれのスレッドが各コア(プロセッサ)に割り当てられるため稼働率が向上し、処理を高速化することができます。

<効果>
シングルコア(シングルプロセッサ)のパソコンではほとんど効果はありませんが、マルチコア(マルチプロセッサ)のパソコンでは2倍近く、またはそれ以上の速度向上が期待できます。

<精度への影響>
精度に対する影響はありません。

◇集合内予測

マンデルブロ図形の計算は、各ドット毎に条件が満たされるまで反復計算を行い、反復数上限まで繰り返しても条件が満たされなければ、そのドットはマンデルブロ集合内であるとみなし黒く塗りつぶします。従って反復数上限の値が大きく、かつ黒い部分が広い画像ほど計算に時間がかかります。
そこであらかじめ集合内ドットを予測し、そのドットに対する反復計算をスキップすることによって計算を高速化することができます。

<効果>
反復数上限の値が大きく、かつ黒い部分が広い画像ほど効果が高く、数倍以上速度向上する場合もあります。黒い部分が無い画像では効果はありません。

<精度への影響>
予測がずれた場合の補償処理は行っていますが、予測を行わなかった場合と比べてわずかな差異が発生する可能性があります。

◇Y軸対称機能

マンデルブロ図形はY軸について対称です。従ってY軸をまたぐ画像では対称部分の計算を省くことができます。

<効果>
Y軸が画像の中心にある場合(Y座標=0の場合)に最大の効果があり、2倍の速度向上になります。Y軸をまたがない画像では効果はありません。

<精度への影響>
Y軸の両側で各ドットのY座標の値に差がある場合、その差がわずかであれば同座標とみなして計算処理を省くので、わずかな差異が発生する可能性があります。

◇並列計算

Intel社のペンティアム3以降のプロセッサには計算精度を落として複数の計算を一度に行う命令が追加されました。単精度×4並列計算の命令は SSE、倍精度×2並列計算の命令は SSE2と呼ばれています。AMD社のプロセッサにも同様の命令が 3DNow!として用意されています。これらの命令を利用すれば複数ドットの計算を一度に行うことができるため計算を高速化することができます。

<効果>
・単精度×4並列計算:1ドット当たりの大きさが10のマイナス6乗以上の場合、SSE命令を利用してこの計算を行います。通常の2倍程度の計算速度になります。
・倍精度×2並列計算:1ドット当たりの大きさが10のマイナス15乗以上の場合、SSE2命令を利用してこの計算を行います。通常の1.5倍程度の計算速度になります。
SSE、SSE2命令が利用できない環境では当然ながら効果はありません。

<精度への影響>
精度への影響を抑えるために、1ドット当たりの大きさが一定以上の場合だけ並列計算を行うようにしていますが、特に反復計算回数が多い場合、わずかな差異が発生する可能性があります。