Mam prosty problem porównywania wszystkich elementów ze sobą. Samo porównanie jest symetryczne, dlatego nie trzeba tego robić dwa razy.Równoległe zagnieżdżanie dla pętli w odniesieniu do symetrii wszystkich najbardziej zgodnych z C++/OpenMP
Poniższy przykład kodu pokazuje, co szukam pokazując wskaźników z dostępnych elementów:
int n = 5;
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
printf("%d %d\n", i,j);
}
}
wyjście jest:
0 1
0 2
0 3
0 4
1 2
1 3
1 4
2 3
2 4
3 4
Więc każdy element jest porównywana do siebie raz . Kiedy chcę zrównoleglić ten kod, mam problem, że najpierw muszę trzymać się dynamicznego szeregowania, ponieważ czas obliczania każdej iteracji zmienia się w ogromnym stopniu I nie mogę użyć zwinięcia z powodu faktu, że zagnieżdżone iteracje są indeksowane. zależne od zewnętrznej pętli.
Zastosowanie zewnętrznej pętli może prowadzić do wykonania pojedynczego rdzenia na końcu, podczas gdy użycie tego w pętli wewnętrznej może prowadzić do takich wykonań w każdej iteracji zewnętrznej pętli.
Czy istnieje bardziej wyrafinowany sposób robienia/porównywania tego?
Twoje dane wyjściowe są nieprawidłowe. Nie powinieneś mieć tam 4s. –
Masz rację. To jest wynik dla n = 5. Ja go skoryguję. –