Ich versuche, einen riesigen Doppelvektor (1929x1341, vielleicht sogar größer werden) mit Daten zu füllen, die jetzt dauert etwa 10 Sekunden zu tun.Füllen eines Vektors in Reihenfolge mit Threads in C++
als Referenz, dann ist dies der Code so weit:
vector<vector<float>> vector1;
for (int x = 0; x < mapWidth; x++) {
vector<float> vector2;
for (int y = 0; y < mapHeight; y++) {
int someNumber = calculateNumber(x,y);
vector2.push_back(someNumber);
}
vector1.push_back(vector2);
}
Ich denke, ich sollte durch Teilung der Arbeit über separate Threads auf die Arbeitszeiten verkürzen können. Konkret könnte ich die zweite for-Schleife in jeden ihren eigenen Thread trennen.
Leider bin ich nicht gut mit Threads. Das Hauptproblem ist, dass die Vektoren in der Reihenfolge gefüllt werden müssen. Also kann ich den zweiten Vektor nicht einfach auf seine eigenen Threads aufteilen und sie später kombinieren, da dies sie in eine halb zufällige Reihenfolge bringen würde. Ich habe Mutex- und Bedingungsvariablen untersucht, aber ich kann keine gute Lösung für dieses spezielle Problem finden.
Würde jemand bereit sein, mir hier zu helfen?
Sie sie in der gleichen Reihenfolge kombinieren, dass man sie zu anderen Threads in, nicht wie sie versenden Fertig. – user2296177
'Also kann ich den zweiten Vektor nicht einfach auf ihre eigenen Threads trennen und sie später kombinieren' - ja, das kannst du. Geben Sie dem Thread einen Index (oder eine Referenz), in den er im ersten Vektor seine Ergebnisse eintragen kann. – lorro
Es würde sich lohnen, 'std :: vector :: reserve' zu verwenden, um den Speicher zu reservieren – Galik