Wenn ich eine Schleife wie dieserOpenMP und Funktionen
int main(){
....
for (i=0; i< N; i++)
{
/*Do some calculations*/
for (j=0; j<M; j++)
{
/*Do more calculations*/
compute_x(some pointers as args);
}
compute_y(some pointer as args);
}
...
return value;
}
and
void compute_x(some pointers as args)
{
/* some calculations*/
for (h=0; h<COUNT; h++)
{
...
}
}
}
und compute_y haben() ist ähnlich.
Meine Frage ist, wenn ich die äußeree Schleife im Haupt mit dem OpenMP Direktiven parallelisieren,
#pragma omp parallel for schedule (runtime) private (...)
for (i=0; i< N; i++)
{
...
}
Was das Verhalten der Funktion compute_x()
und compute_y()
sein wird ?? Soweit ich weiß, werden sie von jedem Thread ausgeführt, daher wird die for-Schleife in compute_x()
von 0 bis COUNT von jedem Thread ausgeführt.
Wenn das richtig ist, was kann ich tun, um die Arbeitsbelastung auch in der for-Schleife in Funktion compute_x()
zu teilen (unter der Annahme, dass es keine Datenabhängigkeit gibt). Meine erste Vermutung ist, die Funktion compute_x() und compute_y() inline zu machen, aber die Funktionen sind ziemlich groß, und sie rufen auch andere Funktionen auf, die glücklicherweise auch parallel ausgeführt werden können.
Ihre Frage war schon komplex, also entfernte ich die Nebenfrage über Inline. Bitte fragen Sie es in einem separaten Post (Sie können es mit der Geschichte wiederherstellen) – CharlesB