0
私は口蓋化したコードを持っています。下記を参照してください。コードは最初は非常に速く実行されますが、特定の反復後には速度が低下します。openmpループは最初は非常に高速ですが、後で遅くなります(ほとんど固まってしまいます)
// something before this ...
// filename_list is quite long, 100k+ files
vector<string> some_string_list(filename_list.size(), " ");
int file_count = filename_list.size();
int counter = 0;
#pragma omp parallel for reduction(+:counter) schedule(auto)
for (int i = 0; i < file_count; i++)
{
string loop_filename = filename_list[i];
counter++;
// The filename is used to call a class member function and get some data, the file is used for reading
// This is the heavy part of code
some_string_list[i] = someclassinstance.getSomeString(loop_filename, param1, param2);
int temp = counter;
if(temp % 1000 == 0)
{
cout << "." << flush;
}
}
cout << endl;
私はさまざまなスケジューリングとチャンクサイズを試しましたが、それは役に立ちません。私は助言に感謝します。
ありがとうございます!
最終的にRAMを使い果たしてしまい、おそらく 'getSomeString'メソッドの中にあるメモリ問題のようです。ファイルを使用した後にファイルを閉じ、動的に割り当てられたすべてのメモリが使用されている場合は、それらを解放するようにしてください。 – rasan076
私はトップを使ってラムを監視していますが、そこには何も表示されません。 – Mos
getSomeStringメンバー関数のstd :: map(ただし挿入しません)にアクセスしているといいでしょう。 – Mos