適度なサイズのC ++コードベース(10Mloc)に取り組んでいますが、最適化の取り組みにより均一に遅くなっています。
このコードベースは、機能させるために組み合わせるライブラリのセットです。これらのライブラリが通信する方法の一般的なフレームワークが開発されたとき、パフォーマンスに重点が置かれ、後で追加された部分が増えても、一般的なフレームワークはあまり変更されませんでした。最適化は、必要なときに、ハードウェアの進化とともに行われました。これにより、高価な早期決定が明らかになったのはかなり後のことです。コードベースの大部分を書き直す必要があるため、さらなる最適化ははるかに高価になります。原則として、コードははるかに高速に実行できるはずであることがわかっているため、望ましくないローカルミニマムに近づいています。
簡単な最適化の機会によって簡単に混同されない、グローバルに最適なパフォーマンスのソリューションへのコードベースの進化を引き継ぐために何が変わるかを決定するのに役立つ成功した方法論はありますか?
編集
現在のプロファイリング方法に関する質問に答えるには:
実際、このコードを使用する方法は2つだけあり、どちらも恥ずかしいほど並行しています。プロファイリングは、大量の入力サンプルで平均化されたウォールクロック時間と、より詳細な実行(命令コスト、分岐予測ミス、キャッシュの問題)の両方で行われます。これは非常に均質なマシン(数千の同一マシンのクラスター)でのみ実行されるため、うまく機能します。私たちは通常、すべてのマシンをほとんどの時間、高速で稼働させているため、追加の新しいものを見ることができます。もちろん、問題は、新しい入力バリエーションが現れたときに、他のユースケースで最も明らかな非効率性を取り除き、「最適に実行される」シナリオの数を絞り込む可能性があるため、後期のペナルティが発生する可能性があることです。
sloc
です。ここで「大きな」と見なされるものがわからないため、「適度なサイズ」と呼びました。