いくつかのコンテキスト:効率的な設計
私はいくつかの集中的な計算(ビークルルーティング問題の変動にいくつかの分枝限定アルゴリズム)を実行するC++メソッドを持っています。したがって、このコードでは効率が最も重要です。 私は最適な速度を達成するために別のトリックを試しているので、アルゴリズムの実行中に情報を収集するクラスStatGatherer
を実装しました(つまり、実現可能なパスはいくつ見つかりましたか? ..)。
void doStuff(const shared_ptr<StatGatherer>& statGatherer = NULL)
{
//do some stuff
...
if (statGatherer != NULL && some unfeasibility condition)
statGatherer->countOneFeasiblePath();
//do more stuff
...
if (statGatherer != NULL && some bounding criterium on the current path)
statGatherer->countOneBoundedPath();
//do more stuff
...
if (statGatherer != NULL && a whole path has been found)
statGatherer->countOneBoundedPath();
...
//...more information gathering triggered by certain events
}
これは十分に機能しますが、上記の擬似コードは数十に実行されるよう皮肉にも、statGatherer
を含む「プロファイリング」コードのこの種の存在は、アルゴリズムダウンかなり遅くなります:コードは次のようになります何百万回ものstatGatherer
が提供されておらず、ヌルにデフォルト設定されている場合でも、このコードをまったく持っていないよりもかなり遅いです。
私の質問は次のようなものです。同じコードを持っていないのと比べて、統計を収集する必要がない場合でも効率は損なわれません。
私が考えることができるすべてのテンプレートソリューションは、上記のような実行時チェックを伴うように思われるので、さらに時間がかかります。
ありがとうございました!
PS:私はここにいるので、質問をもっと明確にするための建設的なフィードバックを歓迎します。
に使用するコードのインスツルメンテーション:テンプレート引数は
StatGatherer*
又はダミーポインタ型のいずれかであるていますプロファイリング – user0042