Bisher habe ich omp
nur für große Zyklen verwendet, da es sehr einfach zu schreiben ist und diese Zyklen die meiste Zeit verbrauchen. Manchmal muss ich jedoch einige I/O-Operationen durchführen, die nur in einem Thread effizient durchgeführt werden können, aber normalerweise ist diese I/O unabhängig von der (nächsten) Schleife.Ist es möglich, später Threads in omp für cyclus hinzuzufügen?
Ich brauche so etwas wie dies zu tun:
print_something(); // independet
print_something_else(); // independent
for(...){...}; // large cycle independent on previous printing
Wie omp
verwenden print_something
in einem Thread ausgeführt werden, print_something_else
in zweiten Thread und verwenden, um alle verbleibenden Threads, die Schleife zu berechnen? Und weil die Schleife wird sehr wahrscheinlich mehr Zeit als die Ausführung von Druckfunktionen, wie die beiden Threads, die die I/O in die Schleife tun, nachdem sie fertig sind, hinzufügen?
Würde so etwas funktionieren?
#pragma omp parallel
{
#pragma omp sections
{
#pragma omp section
{
print_something();
}
#pragma omp section
{
print_something_else();
}
}
#pragma omp for
for(...){...};
}
Können Sie bitte mehr erklären, wie Sie Task Constructs verwenden? Ich habe Schwierigkeiten, sie richtig zu verstehen – Michal