マルチコアを生かす
趣味で色々と計算したりしているのですが、先日もリーマン予想に出て来る「非自明な零点」ってどんなのと思って計算してみました
計算式は割愛しますが、実数0.5のときの虚数をひたすら計算していきます
はじめはVisualBasicでプログラムを作って動かしていたんですが、CPUの使用率も低く、結果が出る(目的としている値)までに相当時間が掛かってしまいました
VisualCなら早い?
というわけで、今度はVisualCでプログラムを書き直して時間を測定してみました
結果は…
VisualBasicで2分50秒掛かった計算が、1分50秒でした
級数用のループや複素数の三角関数を使った計算ですが、65パーセントの時間で計算できました!
しかし、CPUの使用率は低いままです
Core i7で動かす
計算したパソコンはCore2Duoという古いタイプのCPUです
第二世代のCore i7のパソコンも持っているので、出来ればCPUのパワーを実感したいものです
先ほどと同じプログラムを走らせてみましたが、1割ほど早くなっただけでした…
プログラム自体がシングルタスクなことが原因のようで(VisualBasicはシングルタスクしか作れない?)CPUの使用率も、1個のみフルに動いている感じです
マルチスレッド化
Core i7といえど、プログラムによつてはCore2Duoとあんまり変わりません…
VisualCには、_beginthreadという関数があり、簡単にマルチスレッドのプログラムが作れます
また、非自明な零点の計算は、前後の計算に左右されずに求めることができるので、単純にループを8分割して、8スレッドにしました!
結果は
およそ20秒で処理が終わりました
VisualCのシングルスレッドが1分50秒だったので、20パーセントぐらいで計算できたことになります(VB比では10パーセントちょい)
実行したとたん、ファンがすごい勢いで回転しますし、あんまり長時間の処理には不安がありますね
