2017-02-05 11 views
0

私は科学計算で働いていますが、std :: vectorに関連する改善を確認したいと思います。std :: vectorの高性能代替手段

は、最初に、私は心からカスタムコンテナはSTLで提供するものを上回る大幅ことができることを疑ったが、STD :: unordered_map以上の4倍改善とstd以上30倍改善::マップ(ベンチマーク個人Hopscotch Mapをいじると後私は自分のコード内でルックアップを行うだけなので)、私は助けることはできませんが、std :: vectorの代替があるのだろうかと疑問に思う。

+1

パフォーマンスチューニングは幅広いテーマです。それはあなたが最適化しようとしているものによって異なります。あなたは挿入のために最適化していますか?読む?削除しますか?あなたはどのくらいの規模で働いていますか? – Srikanth

+4

あなたのホットスコッチマップは 'std :: unordered_map'とは異なる機能を提供するので、異なるパフォーマンスを得るのは驚くことではありません。 'std :: vector'のどの部分をより良いパフォーマンスと引き換えにあきらめようと考えていましたか? –

+0

大規模な科学計算では、単純なベクトルを乗り越えることができる最大のスピードは、OS固有の関数を使用してNUMAドメインごとにベクトルを割り当てることです。または、クラスタ内の個々のシステムごとに実行します。異なるクラスタシステムまたはNUMAノードからデータにアクセスすることは、パフォーマンス上の問題です。 –

答えて

2

ベクトルが適切なデータ構造である場合の主な領域はヒープ割り当て。時間の経過とともに要素を追加する場合は、(コピー/移動を避けるために)両端キュー処理が優れていることがあります。それとは別に、大きな問題はいくつの要素を保管することなのでしょうか?多くの要素のグループがいくつかある場合、ベクトルは素晴らしいです。しかし、いくつかの要素からなるグループが多数ある場合は、std::arrayに基づいたものとサイズのトラッキングが良い場合があります。

しかし、あなたが科学計算に取り組んでいるとき、これは確かにニュースではありません。固定サイズの配列はあなたの分野では非常に一般的です。

関連する問題