ハッシュマップの多くの要素を保存してアクセスするために、Google のスパース ハッシュ マップをテストしたいと思いました: https://code.google.com/p/sparsehash/
デバッグモードを使用して、VS2012 ですべてのテストとデモをコンパイルしました。たとえば、time_hash_map.exe は平均 10.000.000 回の反復で "map_grow 50053.ns" を出力しました。わかりました..リリースモードでコンパイルしましたが、違いは計り知れません! map_grow 917.0ns ! 最初は、最適化によってテスト プログラムの一部が消去されているためだと思いましたが、今では自分のプログラムにdense_hash_mapを実装しましたが、リリース モードでは非常に高速でしたが、非常に低速でした。
私はまだ自分のプログラムに取り組んでおり、リリース モードでのデバッグは時々面倒なので、必要なテンプレート引数を使用してdense_hash_mapをプリコンパイルしようとしました。cpp ファイルを含む 2 つ目のライブラリを作成しtemplate google::dense_hash_map<uint64_t, int>;
ました。このライブラリをリリース モードでコンパイルし、メイン アプリケーションにリンクしましたが、パフォーマンスは同じです :(
dense_hash_map<key,val>
このクラス ( ) だけを最適化してコンパイルし、残りのプログラムを最適化せずにコンパイルするにはどうすればよいですか。
この大幅なパフォーマンスの向上も非常に疑問だと思います。いくつかの優れた最適化効果を見てきましたが、これは? 反復ごとに 50 倍高速になります。
EDIT: ランタイムチェックを無効にして最適化を有効にしても、リリースモードと同じ速度にはならないようです(それでも最大10倍遅くなります)。新しいデバッグモードと元のリリースモードの唯一の違いは、リリースの/ MTと/私のデバッグモードのMTd。