Ich habe ein Stück Code, die ich palatalisiert habe, siehe unten. Der Code läuft am Anfang sehr schnell, jedoch verlangsamt er sich nach bestimmten Iterationen.openmp Schleife ist sehr schnell am Anfang, wird aber langsam (fast stecken) danach
// 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;
Ich habe verschiedene Scheduling und Chunk-Größen ausprobiert, aber es hilft nicht. Ich schätze jeden Rat.
Danke!
Es klingt wie eine Art von Speicherproblem, wo Sie schließlich aus RAM, wahrscheinlich innerhalb der "GetSomeString" -Methode. Stellen Sie sicher, dass Sie die Dateien schließen, nachdem Sie sie verwendet haben, und alle dynamisch zugewiesenen Speicher freigeben, wenn diese verwendet werden. – rasan076
Ich überwache Ram mit Top, nichts, was ich dort sehen kann ... – Mos
Vielleicht ist es gut zu erwähnen, dass ich auf eine std :: map zugreifen (aber nicht einfügen) in der GetSomeString Member-Funktion – Mos