最近、レコメンデーション サービスのパフォーマンス チューニングを行っています。このサービスの主なロジックは、オフラインで計算されたモデル データを使用して、リクエスト内の各広告をスコアリングし、これらの広告の並べ替え結果を返すことです。ここでのスコアリング プロセスは実際にはリクエスト内のデータは、大きなマップをチェックするためにさまざまなキーに結合されます。この種の計算は非常に多く、主要なパフォーマンスのボトルネックになっています。コードは比較的古く、boost::unowned_map を使用します。この問題を解決するには、 、サードパーティのライブラリと標準ライブラリの比較
以下は、aws r4.xlarge
マシンでのテスト結果です (コンパイル時に -O2 を追加する必要があることに注意してください) :
std::map<int, int> => 51866903 std::unordered_map<int, int> => 3838175 std::unordered_map<int, int, nohashint> => 3508570 std::unordered_map<int, int>(N) => 3804471 boost::unordered_map<int, int> => 3291384 boost::unordered_map<int, int, nohashint> => 3293934 boost::unordered_map<int, int>(N) => 3265856 google::dense_hash_map<int, int> => 785969 google::dense_hash_map<int, int, nohashint> => 784455 google::dense_hash_map<int, int>(N) => 899262 tsl::hopscotch_map<int, int> => 654668 tsl::hopscotch_map<int, int, nohashint> => 680964 tsl::hopscotch_map<int, int>(N) => 663607 tsl::robin_map<int, int> => 406176 tsl::robin_map<int, int, nohashint> => 411358 tsl::robin_map<int, int>(N) => 409993
tsl::robin_map のパフォーマンスは、基本的に std::unowned_map の 10 倍に達することがわかります。このパフォーマンスは、オペレーティング システムとライブラリのバージョンにも関係します。実際の運用環境では、コードをプルダウンして独自の環境で実行することをお勧めします。次にテストしてみましょう
元の boost::unowned_map をオンラインの tsl::robin_map に置き換えたところ、全体的なパフォーマンスが 5 倍向上しました。もちろん、他の最適化も含まれています。この最適化は比較的大規模です。最適化のポイント
関連記事:
関連ビデオ:
以上がC++ マップの使用とパフォーマンス テストの検索に関するケースの共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。