問題タブ [memory-pool]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2157 参照

c++ - デフォルトより遅いブーストsingleton_poolを使用したカスタム割り当て

MyOrderクラスのカスタム演算子newと演算子deleteを作成しました。boost::singletonプールを使用してメモリを割り当てています。これがパフォーマンスをテストするプログラムです、

-O2フラグを使用して上記のプログラムをコンパイルし、2.26 GHz Intel Core 2 Duoを搭載したMacbookで実行したところ、0.16秒かかりました。次に、カスタム演算子newとoperator deleteを宣言して定義し、-O2フラグを使用して再コンパイルし、同じマシンで実行した行をコメント化し、0.13秒かかりました。

同じサイズのオブジェクトにsingleton_poolを使用してメモリを割り当てたり、割り当てを解除したりすると、メモリが高速化されます。なぜ遅くなるのですか?または、この小さなプログラムで得られるパフォーマンス上の利点を無効にするプールを作成するオーバーヘッドはありますか?

アップデート:

2つのstd::string変数をintとdoubleに置き換え、今回は2つのプログラムを3.0 GHZ AMD Phenom(tm)II X4 945プロセッサでそれぞれ100000000(つまり1000回前)の反復で実行しました。カスタムメモリ割り当てを使用するものは3.2秒かかりますが、デフォルトのメモリ割り当てを使用するものは8.26秒かかります。したがって、今回はカスタムメモリ割り当てが優先されます。

0 投票する
3 に答える
1565 参照

c - C プログラムでの大きなデータの処理

データベースでクエリを実行するプロジェクトに取り組んでおり、結果がメモリ サイズを超えています。メモリ プール ライブラリについて聞いたことがありますが、それがこの問題の最善の解決策であるかどうかはわかりません。
メモリ プール ライブラリは、ディスクからの書き込みと読み取りをサポートしていますか (何度も解析する必要があるクエリの結果として)。これを達成する他の方法もありますか?

PS
私はMySQLデータベースとそのC APIを使用してデータベースにアクセスしています。

EDIT : ここに例を示します:
5 つのテーブルがあり、それぞれに 100 万行あるとします。あるテーブルが別のテーブルとどの程度類似しているかを調べたいので、テーブルごとにブルーム フィルターを作成し、残りの 4 つのテーブルのデータに対して各フィルターをチェックします。

0 投票する
1 に答える
927 参照

c++ - cudaでグローバルにアクセス可能な変数を作成するにはどうすればよいですか?

これはかなり複雑な質問であり、私は英語を母国語としないので、私の質問を読むのに十分な忍耐力を持っていただければ幸いです。

Cudaは実際には2台のコンピューターで動作しているため、デバイス上でホストのメモリを指すことは無効です。つまり、ポインターメンバーがある場合、構造体(またはオブジェクト)をデバイスにコピーすることはできません。

この問題を解決するために、次のシステムを作成しようとしました。

  1. ポインタの代わりに整数を使用してください。整数はメモリプール内のオフセットです。整数は、ポインタのように見えるようにクラスにラップされます(「->」と「*」をオーバーロードします)。
  2. メモリプールオブジェクトは、Cudaデバイスに簡単に転送できるオブジェクトの連続配列を管理します。プールのコンテンツはホストとデバイス間で同期されるため、整数オフセットは両側で同じ意味を持ちます。

オフセットを便利に使用するには、ラップする必要があります。ホスト側では、ラッパーは次のようになります。

ご覧のとおり、ポインタクラスはメモリプールへのグローバルアクセスを必要とします。これは通常、メモリプールをシングルトンにすることで実装されます。ただし、Cudaは静的メンバーを許可せず、__device__変数をファイルスコープに制限します。これらの制限を回避するにはどうすればよいですか?または、OpenCLを試す必要がありますか?

0 投票する
1 に答える
2518 参照

c# - 異なるサイズのオブジェクトのメモリプール-C#

さまざまなサイズのさまざまなデータを含めることができるオブジェクトを使用してオブジェクトプール(メモリプール)を作成する方法について、解決策はありますか?したがって、あるサイズのメモリプール内のオブジェクトを要求すると、要求に最も近いサイズの割り当てられたメモリチャンクが返されます。C#で記述する必要があります。ありがとう、私は本当に正確にはわからないので、これと最高のアルゴリズムのための最高のコレクションは何ですか。C ++にはいくつかの解決策がありますが、C#用のメモリプールはありません。

0 投票する
2 に答える
1178 参照

c - 拡大する(そして縮小する)メモリプール

質問の目的で、最初にn個のブロックが割り当てられたメモリプールがあるとします。ただし、容量に達すると、プールは大きくなり、2倍のサイズ(2n)になります。

これで、このサイズ変更操作はCで実行できますがrealloc、関数自体が別のメモリへのポインタを返す場合があります(古いデータがコピーされます)。

これは、メモリプールアロケータによって返されたポインタが無効になっている可能性があることを意味します(メモリが移動された可能性があるため)。

この問題を克服するための良い方法は何でしょうか?それとも可能ですか?

0 投票する
0 に答える
96 参照

c++ - メモリー・プールの削除の問題

私のメモリプールについて助けが必要です。すべてが稼働していますが、割り当てられたメモリを「削除」すると問題が発生します。基本的に、動的オブジェクトがプールされているクラスのオブジェクトを静的に割り当てても、破壊時にデストラクタを呼び出します。デストラクタはもちろん、プールから割り当てられたかのようにそのメモリを解放しようとし、すべてが恐ろしい死に至ります。削除を遅くするようなくだらないチェックロジックを削除に入れることなく、これを修正する方法はありますか?

0 投票する
1 に答える
294 参照

c++ - メモリ プールの代わりに固定配列を使用できますか?

メモリ プール システムを作成する代わりに、アプリケーションの開始時に各オブジェクトに巨大な配列を割り当てて使用することはできません。極端な場合、一部のオブジェクトは配列よりも多くのインスタンスを必要とし、配列は 2 倍になります。またはサイズが4倍になったので、二度と最大サイズに達することはありません.メモリよりも速度が必要なので、それは公正なトレードオフだと思います?

0 投票する
0 に答える
655 参照

memory-pool - 可変サイズのバッファのメモリプール使用量(boost :: pool)?

私の現在のプロジェクトのボトルネックはヒープの割り当てです...プロファイリングでは、1つの重要なスレッドがオペレーターと一緒に/オペレーター内で費やす時間の約50%を示していnewます。

アプリケーションはここでスタックメモリを使用できず、多くの1つの中央ジョブ構造を割り当てる必要があります。カスタムジョブ/バッファ実装:小さくて短命ですが、サイズは可変です。オブジェクト自体はヒープメモリstd::shared_ptr/std::weak_ptrオブジェクトであり、従来のC-Array(char*)ペイロードを伝送します。

さまざまな部分のランタイム構成とワークロードに応じて、300k〜500kのオブジェクトが作成され、同時に使用される場合があります(ただし、これは通常は発生しないはずです)。x64アプリケーションのメモリの断片化はそれほど大きな問題ではないため(ただし、x86を対象とした場合にも発生する可能性があります)。

速度とパケットスループットを向上させ、将来的にメモリの断片化を防ぐために、メモリ管理プールを使用することを考えていましたboost::pool

  1. ほとんどすべての例で固定サイズのオブジェクトを使用しています...しかし、可変長のペイロードを処理する方法がわかりませんか?このような単純化されたオブジェクトは、boost :: poolを使用して作成できますが、ペイロードをどう処理するかわかりませんか?で使えboost:poolますか?

    /li>
  2. 通常、shared_ptrへのすべての参照がスコープを使い果たすと、オブジェクトは破棄されます。shared-ptrをc-ptrに戻したくありません。オブジェクトの遅延破棄もパフォーマンスを向上させるために機能するはずであり、私が読んだものから、boost:poolを使用するとよりうまく機能するはずです。プールがsmart_ptrとの相互作用をサポートしているかどうかわかりませんか?別の、しかし風変わりな方法は、プールと一緒に作成時にshared_ptrへの参照を保存し、それらをブロックで解放することです。

誰かが2つの経験がありますか?boost:可変サイズのオブジェクトとスマートポインターの相互作用でのプールの使用?

ありがとうございました!

0 投票する
2 に答える
1017 参照

c++ - TBB tbb::memory_pool>正しい使い方は?

疑問があります。

tbb::memory_pool< tbb::scalable_allocator > shared_memory_pool_ の場合。

それがメインスレッドでインスタンス化されている場合。さらに、ワーカー スレッドで shared_memory_pool_.malloc(sizeof(my_class)) を呼び出しました。tbb はそのサイズのメモリをメイン ヒープから割り当てますか、それとも通常の malloc() によるロック競合が回避されるようにスレッド「ドメイン」から割り当てますか?