0

オブジェクトに対して多くの操作を行うプログラムに取り組んでいます。それらの作成、削除、動的キャスト、ポインターのシャッフル、コンテンツの比較など。これらのオブジェクトのほとんどは少なくとも 40 バイト (最大 ~ 90 バイト) であり、一度に 10,000 を超えるオブジェクトがメモリに存在する可能性があります。

私が判断しようとしているのは、それらのサイズを小さくしようとする必要があるかどうかです。コンストラクター、new、delete などをプロファイリングできます。ただし、大きなオブジェクトによる最も重要なパフォーマンス ヒットは、キャッシュの扱いにくさによるものであると考えるようになりました。発生するキャッシュ ミスの数に対するオブジェクトのサイズの寄与を判断する方法はありますか?

PS: dynamic_cast の過度の使用もパフォーマンスに影響すると思います。ただし、これは診断がはるかに簡単です。

編集:プロファイリングせずに最適化しても無駄であることはわかっています。私が求めているのは、プロファイリングから、それが問題であるかどうかをどのように判断するかです。標準のプロファイリング ツールが役に立たないように、ペナルティがコード全体に分散されている可能性はありますか?

4

1 に答える 1

5

あなたは、彼らが一線を越えてGet Itするまで、ほとんどの人と同じようにそれに近づいています。Paul R がコメントで言ったように、ただ推測しないでください。別の言い方をすれば、全体のアプローチは診断を中心とする必要があります。そうでなければ、あなたは医者のように、誰もが同じであると思い込んで人々を治療し、ガチョウに効くものはガンダーにも効くはずです.

ということは、キャッシュ関連の問題は問題ではないということですか?
つまり、メモリ割り当ての問題は問題ではないということですか?

必ずしも。

これは、それらが推測であり、問​​題である可能性があることを意味しますが、誰も事前に推測できない他の問題がほぼ確実に存在することを意味します。

ここで説明した例では、 6 つの異なる問題が発見され、修正されました。さまざまなサイズのコインの束が合計して 1 ドルになるように、サイズの範囲はほぼ常に合計されます。確かに、そのうちの 1 つはメモリ割り当てでしたが、1 つだけでした。メモリ割り当ての問題を修正してそこで停止した場合、またはそれに加えて他の先入観の問題を修正してそこで停止した場合、どの程度の速度向上が得られますか?

実際に表示された高速化率の割合。

到達可能な実際の速度向上率を得るには、いくつかの問題だけでなく、すべての問題を見つける必要があります。そのリンクは、その方法を示しています。

于 2012-07-08T19:28:13.133 に答える