Skip to content

Instantly share code, notes, and snippets.

@umyuu
Last active August 24, 2018 04:40
Show Gist options
  • Select an option

  • Save umyuu/715a625747dc48dd9753ec2bf30345eb to your computer and use it in GitHub Desktop.

Select an option

Save umyuu/715a625747dc48dd9753ec2bf30345eb to your computer and use it in GitHub Desktop.
PerformanceTuning時に考えること。

ポエムです。
### 対象読者:
このポエムは,次の方にお読みいただくことを前提に説明しています。

  • 新人プログラマー

チューニング対象のコードは早くても要件を満たさないコードより、遅くても要件を実装しているコード。

最適化後の落とし所を決める。

ざっくりいうとAtCoder問題の「実行時間制限」と「メモリ制限」です。
チューニング作業にも作業工数が掛かります、そして、チューニングは部分適用が難しいです。
適用する or 適用しない(STOP or GO)に落とし所がなりやすい。
よって最適化後の目標タイムを決めて作業をする。

推測をするな、計測をせよ。—Robert C. Pike

推測せずにプロファイラで計測する CPUプロファイラ、メモリプロファイラを取りボトルネックを確認。
後で使う可能性があるならば、実行証跡を保存しておくこと。 ◆所感
※GUIとマルチプロセスはプロファイラがとりにくいーーー。。

ミクロよりマクロの最適化

  • ミクロ…コード
  • マクロ…アルゴリズム/並列化/ライブラリ/要求仕様の変更
手法 メリット デメリット
アルゴリズム オーダーレベルでの改善 理解に一手間、引き継ぎ時に犠牲者が出やすい
ライブラリ 作るのはその道の専門家、動作テスト保証済み 配布時に一手間
並列化 CPU律速/IO律速が高速化 アムダールの法則の制約を受ける、メモリを生贄に捧げて性能を確保。メモリ律速がどうしようもない

◆所感
体感プログラマーはミクロベースの最適化作業をしやすい職業だと思います。 眼の前にコード上の問題が提示されているのが理由かな。。

テストコード

変更規模によりますがコード変更を伴うので、最終出力が既存の要求仕様と同じようになるように簡単なテストコードをまず書く。
◆所感
コード変更によるコード破壊が防げます。
処理速度改善しました、でもコードが壊れましたを避けたい。
これrefactoring関係で用語がありそうな希ガス。

GC(GarbageCollection)とLarge Object Heap(LOH)を意識する。

書きかけ。PythonではGCのみLOHは.netとJavaが採用してるので、そのうち採用されるはず(希望的観測)

◆参考情報
Windows システムの大きなオブジェクト ヒープ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment