Ich möchte OpenMP verwenden, um Multithread anzuwenden. Hier ist ein einfacher Code, den ich geschrieben habe.OpenMP Doppel für Schleife
vector<Vector3f> a;
int i, j;
for (i = 0; i<10; i++)
{
Vector3f b;
#pragma omp parallel for private(j)
for (j = 0; j < 3; j++)
{
b[j] = j;
}
a.push_back(b);
}
for (i = 0; i < 10; i++)
{
cout << a[i] << endl;
}
ich möchte es Werke lik ändern:
parallel for1
{
for2
}
oder
for1
{
parallel for2
}
-Code funktioniert, wenn Pragma Linie gelöscht. aber es funktioniert nicht, wenn ich es benutze. Was ist das Problem?
///////// Added
Eigentlich benutze ich OpenMP zu komplizierteren Beispiel Doppel für Schleife Frage.
hier, auch wenn ich MP nicht anwenden, funktioniert es gut. Aber wenn ich es anwende, tritt der Fehler an Vektor push_back Linie auf.
vector<Class> B;
for 1
{
#pragma omp parallel for private(j)
parallel for j
{
Class A;
B.push_back(A); // error!!!!!!!
}
}
Wenn ich B.push_back (A) Zeile lösche, funktioniert es auch, wenn ich MP anwende.
Ich konnte keine genaue Fehlermeldung finden, aber es sieht aus wie Ausnahmefehler über Vektor ich denke. Debug hält an
void _Reallocate(size_type _Count)
{ // move to array of exactly _Count elements
pointer _Ptr = this->_Getal().allocate(_Count);
_TRY_BEGIN
_Umove(this->_Myfirst, this->_Mylast, _Ptr);
Bitte fügen Sie Ihre Fehlermeldungen hinzu. Warum deklarieren Sie auch Variablen im C89-Stil, während Sie C++ verwenden? –
Bitte erstellen Sie ein [mcve]. Die Diskussion der Parallelisierung Ihres Beispiels ist nicht wirklich nützlich, da der gesamte Code wahrscheinlich einige Mikrosekunden braucht. Es wäre viel produktiver, wenn Sie etwas präsentieren könnten, bei dem die Parallelisierung tatsächlich Sinn macht. – Zulan
Ich habe mehr Zeilen hinzugefügt! – Wooni