*プログラムに怪しいところがあったので記事を書き直します
プログラム時間を測るのに、ググって出てきたこれを使おうとしましたが、秒単位のものを測る時に使うものだそうです。
正しい時間測れてないです。秒で終わるはずがなかったんだ……
というわけで、このプログラムを使い、timeで測定した結果をどん!
|
4096次正方行列 |
8192次正方行列 |
引数なし |
-O3 |
引数なし |
-O3 |
real |
0m2.765s |
0m4.383s |
2m30.874s |
2m48.262s |
user |
0m1.935s |
0m1.940s |
0m3.273s |
0m1.715s |
sys |
0m0.694s |
0m1.512s |
0m41.842s |
0m45.441s |
変化がとても些細だ……そして計算できてしまったけど問題ないのだろうか。
openMPの利用でどれだけ変わりますかねー……
課題のソースプログラム
単純に行列の掛け算を計算するだけのプログラムです。
ワーソンナノ学部1年デモ書ケルワー。
デモナンカオカシイワー。
4096次正方行列。
すごく・・・大きいです・・・
汚いコピペすまん。でもほんとでっかい行列。要素を簡単にしてあるだけマシに見えます。
多分この課題を達成するためにやるべきこと。
・行列はstatic double型で宣言
・コンパイルに-O3を付ける
・openMPの利用
ひとまず上ふたつはやりました。
static変数にするかどうかで、セグメントエラーの有無が変わりました。staticにしないとセグメントエラーします。なんでや。正直分かってません。
-O3はゼロじゃなく大文字のオーです。これもゼミで「こうすると変わるよ」って言われただけで理由分かってません。
ちなみに、static型にした上で、コンパイルの際-O3を付けるか付けないかで起こる、2048次正方行列のときの実行時間の差は約2倍。
4096次正方行列実行時間はもうこれ失敗したのかってくらい放置していました。staticで-O3でしたとも。
2048次正方行列のときの10倍の時間がかかりました。
こんなことになってしまうと、openMPに手を付けたいのはやまやまですが、まーだ終わってないしとっかかりがつかめていない課題を少しでも進めるために、一旦置いておきます。
悲しいかなOpenGLに続いて尻切れトンボだ。
*追記
なんとびっくり同条件で8192次正方行列にすると、4096の時の20倍の時間がかかりました。絶対openMP必要だこれ。
openMPはforループなどを並列処理できるらしいです。使い方がまだ分からないから後日がんばる。