Optimized C++
オプティマイズド シープラスプラス
最適化、高速化のためのプログラミングテクニック
- 著者:
- Kurt Guntheroth / 黒川利明(ガンセロス, カート / クロカワ, トシアキ)
- 出版社:
- オライリー・ジャパン
- 出版日:
- 2017年02月
- ISBN:
- 9784873117928
- 在庫:
- 在庫あり
なぜ注目されているか
書籍紹介
C++を高速化したいなら…正しく測定! ホットスポットを特定! あらゆる角度から最適化!
技書の森解説
『Optimized C++』 (Kurt Guntheroth 著、黒川 利明 訳、島 敏博 技術監修、オライリー・ジャパン、2017 年 2 月刊) は、C++ プログラムの性能を左右する要因を理解し、正しく測定して性能上の問題を起こしている箇所を突き止めたうえで、どの最適化を採るべきかを解説する書籍です。副題は「最適化、高速化のためのプログラミングテクニック」、原書は Optimized C++ で、版元は C++11 と C++14 に対応した内容と案内しています。動くけれども遅い C++ のコードを、勘ではなく測定にもとづいて速くしたいプログラマに向けた一冊です。
全 13 章の構成、マシンの振る舞いからメモリ管理まで
冒頭に「日本語版へ寄せて」、訳者まえがき、まえがきが置かれ、第 1 章「最適化とは」で、より良いコンパイラーやアルゴリズムやライブラリを使うこと、メモリ割り当てとコピーを減らすことなど、最適化の戦略を一通り示します。第 2 章「最適化に影響するマシンの振る舞い」は、メモリが遅いこと、オペレーティングシステムの呼び出しが高価であること、文が書いた順番どおりには実行されないことなど、コードの見た目からは分からないハードウェアの実情を扱います。第 3 章「性能を測定する」は、90/10 ルールやアムダールの法則、実験ノートの付け方、プロファイルの取り方、時間を計るクラスの作り方まで、計測の方法に章を充てています。第 4 章の文字列の事例研究から先は対象ごとの最適化で、アルゴリズム、動的変数割り当て、ホットな文、ライブラリ、探索と整列、データ構造、I/O、並行性と進み、第 13 章でクラス専用のメモリマネージャーや標準ライブラリのアロケータを扱って索引で終わります。
測定から始める最適化が C++ で効く理由
C++ はメモリの配置や確保の仕方まで書き手が決められる言語ですが、その分、文字列の受け渡しで起きるコピーや、コンテナの中で繰り返されるヒープの確保のように、コードの見た目に表れないコストも抱えやすくなります。しかも CPU の命令の実行よりメモリへのアクセスのほうがはるかに遅く、キャッシュに載るかどうかで同じ処理の速さが大きく変わるため、どこが遅いかは読むだけでは分かりません。アムダールの法則が示すとおり、実行時間の 1 割しか占めない部分をどれほど速くしても全体は 1 割程度しか縮まないので、最初に測定して時間を使っている箇所を特定することが、最適化の手間を無駄にしない前提になります。アルゴリズムを 計算量 の小さいものへ替えるのが最も効く場面は多い一方、同じ計算量でも std::vector と std::list のようにメモリ上の並び方が違えば速さには定数倍の差が出ます。さらに 並行処理 を持ち込めば、スレッド間の同期そのものが新しいコストになります。本書は計測の章を対象ごとの章より前に置き、マシンの振る舞いから説き起こしています。
C++11 と C++14 の時点の言語と標準ライブラリが対象
本書は C++ の文法を学ぶ入門書ではなく、目次にムーブセマンティクスや new 式と delete 式、カスタムなアロケータといった言語と標準ライブラリに踏み込んだ話題が並ぶ、コストを減らす書き方を考える本です。対象は版元の案内どおり C++11 と C++14 の時点の言語と標準ライブラリであり、2017 年の刊行時点の内容として読む必要があります。版元のページにはサンプルコードと正誤表が用意されており、手元の刷に合わせて読み合わせられます。
裏返せば、C++ で書いたサービスやツールの応答の遅さや処理時間に悩み、どこから手を付ければよいかを測定にもとづいて判断したい開発者は、本書で計測の手順から具体的な書き換えまでを一冊でたどれます。性能の問題を個別の小技ではなく、マシンの振る舞いと測定の結果から筋道立てて考える習慣を身につけたい人に向いています。
言及した記事 (5 件)
[C++] filesystemの標準入りが嬉しすぎてライブラリを作った話
♡ 36C++, glob, C++17「Optimized C++ ― 最適化、高速化のためのプログラミングテクニック」コンパイルしてみた(3) calling.cpp
♡ 2OptimizedC++, 小川メソッド, DoCAP, CountdownCalendar2022「Optimized C++ 最適化、高速化のためのプログラミングテクニック」コンパイルしてみた(1)allocation
♡ 2C++, 最適化, VisualC++, 小川メソッド, DoCAP「Optimized C++ ― 最適化、高速化のためのプログラミングテクニック」コンパイルしてみた(2)cache.cpp
♡ 0C++, 最適化, 小川メソッド, DoCAP「Optimized C++ ― 最適化、高速化のためのプログラミングテクニック」コンパイルしてみた(1)allocation.cpp
♡ 0C++, 最適化, 小川メソッド
この本に興味がある方におすすめ
関連する本
関連記事
本を読むスピードは気にしなくていい
1 ページ読むのに 10 分かかっても問題ありません。プログラミングの本はゆっくり読むのが正解である理由と、焦らず読み進めるコツを紹介します。
OS / 低レイヤー本ガイド - コンピューターの仕組みを学ぶ技術書の選び方
OS、コンパイラー、ネットワークなど低レイヤーを学べる技術書の 4 ジャンルと、どこから始めるべきかの指針、賞味期限の見極め方を紹介します。
プログラミングの本は教科書とは違う
学校の教科書のように暗記する必要はありません。プログラミングの本は引いて使う道具です。教科書との違いと、順番を飛ばせる本 / 飛ばせない本の見分け方を紹介します。