そういえば、自宅のパソコンがcore i3でマルチコアだったのを思い出したので、
並列化プログラミングに挑戦してみました。
調査環境
OS ubuntu 10.04 LTS
コンパイラ gcc version 4.4.3
並列化の対象
並列化する対象は、BBP公式にしたがって計算される円周率任意桁の値です。
ちょっと変わったものを無理くり見つけました(笑)
BBP公式
並列化の手法
データ並列化手法による並列化手法をとりました。
(s1、s2、s3、s4についてそれぞれ独立に計算することが出来るため)
検証環境が、コア数2であるため、s1、s2の計算スレッドをコア0、s3、s4をコア1に割り当てる。
プログラム
本ページに添付
並列化の効果予測
アムダールの法則を利用して、並列化の効果予測をします。
速度向上度(n) = 1 / ((p/n) + (1 - p))
n = プロセッサ数
p = 並列化対象となる処理が全体のうちに占める割合
(並列化対象となる処理の処理時間 / 全体の処理時間 )
プロセッサ数 nは、今回 2
p = 100/100 = 1 ※ほぼ計算に処理時間を割いており、この部分を並列化するため。
速度向上度(2) = 1 / ((1/2) + (1- 1)) = 2
結果
高速化の効果は、ほぼ効果予測値と合致かなーと。