ヒープメモリがかなり必要な場所に関数を書いています。パフォーマンスを向上させるために(コンパイルオプションなどで)特定のfor
ループ内で頻繁にアクセスされることをコンパイラに伝えることは可能ですか?C++ヒープメモリの性能向上
私はスタックを使用できない理由は、格納する必要がある要素の数が多いため、しようとするとセグメント化違反が発生するためです。
現在、コードは機能していますが、速くなる可能性があります。
UPDATE: 私はこの
vector< set<uint> > vec(node_vec.size());
for(uint i = 0; i < node_vec.size(); i++)
for(uint j = i+1; j < node_vec.size(); j++)
// some computation, basic math, store the result in variable x
if(x > threshold) {
vec[i].insert(j);
vec[j].insert(i);
}
いくつかの詳細のようなものをやっている:
- 私はhash_set、少し改善を使用し、hash_set私はシミュレーションの目的のために持っているすべてのマシンでは利用できないという事実のそば
- 私は、私が言ったように要素数が
node_vec.size()は、たとえば、等しいがkにされている場合は大きすぎる場合、私はセグメンテーションフォールトを取得する可能性があります、配列を使用してスタック上にVECを割り当てるしようとしたが、ここで、kは数千人、私はvecがnode_vecの4倍または5倍になると期待しています。この程度の大きさでは、コードを何度も実行しなければならないという事実を考慮して、コードは遅く見えます。もちろん、私はこれらの呼び出しを並列化するためにマルチスレッドを使用していますが、私が今見ているものよりもはるかに高速に機能することはできません。
たとえば、vecを高速データ取得などのためにキャッシュメモリに割り当てることは可能でしょうか?
あなたはコンパイラによって最適化できると思いますか?メモリはメモリであり、ヒープとスタックの間にハードウェアの違いはありません。アクセス速度は、使用パターンとキャッシュアルゴリズムに基づいていますが、コンパイラが実行できるものは何もありません。 – lvella
テンプレートにアロケータを使用するだけではどうですか? –