Ich habe das einfache Problem, alle Elemente miteinander zu vergleichen. Der Vergleich selbst ist symmetrisch und muss daher nicht zweimal durchgeführt werden.Parallelisieren verschachtelte für die Schleife in Bezug auf die Symmetrie aller -gegenüber-allen Vergleich mit C++/OpenMP
Das folgende Codebeispiel zeigt, was ich suche die Indizes der Zugriff auf Elemente durch zeigt:
int n = 5;
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
printf("%d %d\n", i,j);
}
}
Die Ausgabe lautet:
0 1
0 2
0 3
0 4
1 2
1 3
1 4
2 3
2 4
3 4
So wird jedes Element im Vergleich zu jeder einmal andere . Wenn ich diesen Code parallelisieren möchte, habe ich das Problem, dass ich mich zuerst an die dynamische Terminplanung halten muss, da die Berechnungszeit jeder Iteration sehr stark variiert UND ich Kollaps nicht verwenden kann, da die verschachtelten Iterationen indexiert sind. abhängig von der äußeren Schleife. Die Verwendung von #pragma omp parallel for schedule(dynamic, 3)
für die äußere Schleife kann zu Einzelkernausführungen am Ende führen, während die Verwendung für die innere Schleife zu solchen Ausführungen innerhalb jeder Iteration der äußeren Schleife führen kann.
Gibt es eine ausgefeiltere Art, dies zu tun/parallelisieren?
Ihre Ausgabe ist falsch. Du solltest dort keine 4s haben. –
Sie haben Recht. Das ist die Ausgabe für n = 5. Ich werde es corrent. –