heyheytower

日々のメモです。誰かのお役に立てれば幸いです。

「Cプログラム高速化研究班」を読んで

感想

この本の射程範囲

  • 最適化とは何かわからない初学者(プログラム問わず)
  • 実際にCでプログラムを書く人(試せるソースの記載あり)
  • アセンブラの挙動を考えたコンパイルレベルでの最適化をしたい人

(多種多様な省エネアルゴリズムについて書いているわけではない)

この本の良い所

  1. 初歩的な説明からスタートしており分かりやすい(CPUや、アセンブラについて)
  2. 実際にプログラムを走らせて、自分のCPU特性を把握できる(最適化は環境依存)
  3. 最適化のために何をやって、何をやらなくてよいかが分かる(-O3オプションの射程)
  4. 「業務システム向けのヒント」の項では、ケーススタディもある


著者は最近のCPUはすごいので、こういった技術を持つ人は
限られているとおっしゃっていました。
確かに「限られたリソースと、限られた実行時間の中で処理
する必要がある」のは、現代では組み込みくらいだと思う。
しかも、C言語ですから。

しかし作者の言う「CUPを余すところなく使いきるのは、
プログラマーのたしなみ。つねに最高速を追うのは男の
浪漫というものです。」というのは見習いたい点です。

サーバサイドのサービスで、顧客の潜在的ニーズを計算
してくれたり、最近はリッチだなぁと思う今日この頃。
計算資源を少しでも節約できる最適化技術は、いまこそ
見直されても良いのではと思った。

実験「Intel® Pentium® Processor G6950」について

今回、書籍で説明のあったコードで自分の使用してるCPUの乗算器の数を
調べてみました。

使わせていただいたプログラムは「ループの中で並行的に乗算を行い、
処理速度の頭打ちを見る」ためのものです。
(mulc4_x_100 の、x の部分が並行乗算数です。)

ito-ubuntu:1:~/Dropbox/Programing/C/120617$ time ./mulc4_1_100
a = 0

real 0m21.605s
user 0m21.560s
sys 0m0.000s
ito-ubuntu:1:~/Dropbox/Programing/C/120617$ time ./mulc4_2_100
a = 0

real 0m8.122s
user 0m8.080s
sys 0m0.000s

ito-ubuntu:1:~/Dropbox/Programing/C/120617$ time ./mulc4_3_100
a = 0

real 0m7.778s
user 0m7.760s
sys 0m0.000s
ito-ubuntu:1:~/Dropbox/Programing/C/120617$ time ./mulc4_4_100
a = 0

real 0m7.769s
user 0m7.750s
sys 0m0.000s

乗算数3つで処理速度が頭打ちになったので、乗算器は3つしかない
ことがわかりました。
ループの中などで並列で乗算をする場合は、少し注意したいところです。
(あとは、行列式を解く際のループを入れ替えるテクニック、
これは並列プログラミングを用いる際の行列のタイリングなどに、
利用できそうで、収穫は大きかったです。)


以上。