1

一部のオブジェクトがより静的な動作をする可能性があるというコンパイラのヒントを与え、ヒープではなくスタックに割り当てる方法はありますか? たとえば、文字列オブジェクトは、一部の関数内で一種の一定サイズを持つ場合があります。OpenMP を使用してアプリケーションのパフォーマンスを向上させようとしているので、これを尋ねています。私はすでにシリアル部分を 50 秒から 20 秒に改善しており、並列処理を行うと 12 秒になります (ほとんどのコードは並列で実行できることに言及しています)。改善を続けようとしています。1 つの制限は、同じプロセス内での動的メモリの連続的な割り当てと解放に関連していると思います。これまでの逐次最適化は、よりハードコードされた変数の割り当て (動的に割り当てられ、ただし、最悪のシナリオを考慮すると、すべてが一度に割り当てられます)。多くの C++ アプローチを持つコードの一部に到達したため、今はかなり行き詰まっています。

4

3 に答える 3

0

小さなバッファの最適化を探していると思います。詳細な説明は、ここにあります。基本的な考え方は、バッファを保持するユニオンをクラスに追加することです。

class string
{
  union Buffer
  {
    char*    _begin;
    char[16] _local;
  };

  Buffer _buffer;
  size_t _size;
  size_t _capacity;
  // ...
};
于 2014-11-04T09:33:10.660 に答える
0

静的分析を使用してパフォーマンスの低下を見つけて、欠陥を探していますか?

cppcheck にはそれらのいくつかがありますが、それらは非常に初歩的なものです。これまでのところ、それを行うツールは知りません。

ただし、さまざまなことを行うツールがあります。

ジェマロック

jemalloc割り当てプロファイラーがあります。(参照: http://www.canonware.com/jemalloc/ ) おそらく、これはあなたの助けになるでしょう。私は自分で試したことはありませんが、オブジェクトの有効期間と、アロケーターに最も大きな圧力をかけるオブジェクトを投稿することを期待しています (最も痛い部分を最初に見つけるため)。

キャッシュグラインド

Valgrind には、キャッシュおよび分岐予測シミュレーターもあります。http://valgrind.org/docs/manual/cg-manual.html

クランチェック

自由時間が多すぎる場合は、 を使用して独自のチェック ツールを実行してみてくださいclang-check

Google パフォーマンス ツール

Google パフォーマンス ツールには、ヒープ プロファイラーもあります。https://code.google.com/p/gperftools/

于 2014-11-04T09:47:26.283 に答える