「Cプログラム高速化研究班」を読んで
感想
この本の射程範囲
(多種多様な省エネアルゴリズムについて書いているわけではない)
この本の良い所
- 初歩的な説明からスタートしており分かりやすい(CPUや、アセンブラについて)
- 実際にプログラムを走らせて、自分のCPU特性を把握できる(最適化は環境依存)
- 最適化のために何をやって、何をやらなくてよいかが分かる(-O3オプションの射程)
- 「業務システム向けのヒント」の項では、ケーススタディもある
著者は最近のCPUはすごいので、こういった技術を持つ人は
限られているとおっしゃっていました。
確かに「限られたリソースと、限られた実行時間の中で処理
する必要がある」のは、現代では組み込みくらいだと思う。
しかも、C言語ですから。
しかし作者の言う「CUPを余すところなく使いきるのは、
プログラマーのたしなみ。つねに最高速を追うのは男の
浪漫というものです。」というのは見習いたい点です。
サーバサイドのサービスで、顧客の潜在的ニーズを計算
してくれたり、最近はリッチだなぁと思う今日この頃。
計算資源を少しでも節約できる最適化技術は、いまこそ
見直されても良いのではと思った。
実験「Intel® Pentium® Processor G6950」について
今回、書籍で説明のあったコードで自分の使用してるCPUの乗算器の数を
調べてみました。
使わせていただいたプログラムは「ループの中で並行的に乗算を行い、
処理速度の頭打ちを見る」ためのものです。
(mulc4_x_100 の、x の部分が並行乗算数です。)
ito-ubuntu:1:~/Dropbox/Programing/C/120617$ time ./mulc4_1_100
a = 0real 0m21.605s
user 0m21.560s
sys 0m0.000s
ito-ubuntu:1:~/Dropbox/Programing/C/120617$ time ./mulc4_2_100
a = 0real 0m8.122s
user 0m8.080s
sys 0m0.000sito-ubuntu:1:~/Dropbox/Programing/C/120617$ time ./mulc4_3_100
a = 0real 0m7.778s
user 0m7.760s
sys 0m0.000s
ito-ubuntu:1:~/Dropbox/Programing/C/120617$ time ./mulc4_4_100
a = 0real 0m7.769s
user 0m7.750s
sys 0m0.000s
乗算数3つで処理速度が頭打ちになったので、乗算器は3つしかない
ことがわかりました。
ループの中などで並列で乗算をする場合は、少し注意したいところです。
(あとは、行列式を解く際のループを入れ替えるテクニック、
これは並列プログラミングを用いる際の行列のタイリングなどに、
利用できそうで、収穫は大きかったです。)
以上。