MIT Open CoursewareのPerformance Engineering of Software Systemsをやっていきます。
以下のサイトから試聴できます。
Lecture1を要約していきます。
コンピュータのパフォーマンスより重要なものは何か
コンピュータのパフォーマンスより重要なものはたくさんあります。パフォーマンスはコンピュータにおいての最優先事項ではありません。以下にリストします。
- 互換性
- 機能性
- 信頼性
- 正確性
- メンテナンスが可能であること
- 頑丈であること(Robustness)
- 明快であること
- 部品として再利用可能であること
- テスト可能であること
- デバッグ可能であること
- 移動可能であること
- 有用であること
プログラマはこれらの特性のために、しばしばパフォーマンスを犠牲にします。では、なぜ我々はパフォーマンスを研究するのか。それは以下の理由によります。
パフォーマンスはコンピューティングにおいての通貨である。
つまり、これらの特性をパフォーマンスという通貨によって買うことができるからです。パフォーマンスによってシステムをセキュアにすることができる。パフォーマンスが劣化することによって、これらの特性が劣化します。
水は人間にとって本質的に重要であり、100ドルは本質的に重要でありませんが、1ドルで水を買うことができます。パフォーマンスにおいても同じアナロジーが適応できます。
初期のコンピューティングにおいては、パフォーマンス工学は一般的でした。なぜなら、コンピューティング資源が限られていたからです。コンピュータは33kHzのCPUを積んでいました。(今は2Ghzから4Ghz)
ここで、この時代からの名言を書いておきます。
未熟な最適化は邪悪の根源だ(Donald Knuth)
多くのコンピューティングの罪が他の理由よりまず効率化の名の下に行われてきた(それは達成されないこともある)。それは、闇雲な愚かさを含む(William Wulf)
プログラムの最適化の最初のルール:それをするな。二番目のルール:エキスパートのみだ。まだそれをするな(Michael Jackson)
結局、コードを速く、さらに読みやすくするのは技術がいるということですね。
ムーアの法則により、トランジスタ数はどんどん増えています。2004年ぐらいまでは、クロックスピードも増えていました。なので、ソフトウェアの速度を上げたければ、時間を待てば速度は上がっていっていました。
ただ、2004年以降、クロックスピードが増えなくなっていきました。しかし、トランジスタ数や密度は増えていきます。
クロックスピードが上がらなくなった理由の一つに、排熱の問題があります。排熱は一定量しかできないので、クロックスピードを上げれば熱はこもります。
漏れ電流の熱も大きくなっていきます。
そこでベンダーはどうしたか、トランジスタはたくさん使えるが、速く動かすことはできない。
そこで、マルチコアプロセッサの誕生です。
そして、CPUのコア数は増えていくことになりました。
ムーアの法則により、コンピュータのパフォーマンスは向上する。しかし今や、パフォーマンスは複雑なキャッシュ階層と広いベクトルユニット、GPU、FPGAを持つ、大きなマルチコアのプロセッサのことになりました。
よって、ソフトウェアはこのハードウェアを効率的に使うために適応する必要があります。
パフォーマンス最適化の仕事はどんどん増えているようです。ある生徒が6172個の仕事のうち、5個を実際にやったようです。なので、仕事は結構あるようです。(Qiitaにパフォーマンス最適化の記事がほとんどないのもあんまりこの仕事がエンジニアを魅了してないのを示しているようです)
現代のプロセッサはとても複雑です。現代的なマルチコアのプロセッサは並列プロセッシングコア、ベクトルユニット、キャッシュ、GPU、ハイパースレッディング、動的周波数スケーリングを含みます。
では、どのように書けば現代的なハードウェアを効率的に書けるのでしょうか?
次の章から、行列演算で例を示していきます。
ではまた次回