openmp code im main thread ausführen?



  • Hallo,

    wir setzten hier das Programm ABAQUS ein. Dieses bietet eine API um deren Ergebnisdateien zu lesen. Leider funktioniert der Zugriff nur im main thread. Laut Support ist das auch nur im main thread möglich...

    Nun parallelisiere ich eine loop mittels

    #pragma omp parallel for num_threads(x)
    

    innerhalb dieser loop muss auf die Dateien Zugegriffen werden. Gibt es eine Möglichkeit wie ich nur diese Dateiaufrufe an den main thread geben kann?


  • Mod

    Deine Erklärung klingt ein bisschen wirr. Du meinst, du willst bestimmte Anweisungen nur in einem der Threads durchführen? Dann benutz omp_get_thread_num und eine entsprechende Verzweigung.

    Bist du sicher, dass du die Dokumentation korrekt verstanden hast? Und es nicht etwa um verschiedene Prozesse geht? Dass man auf ein Datei-artiges Objekt nur von einer Stelle aus zugreifen kann ist klar, aber dass es unbedingt der Hauptthread sein muss (an dem eigentlich nichts besonderes ist), wäre merkwürdig. Dafür müssten die schon absichtlich was in ihren Code gebaut haben, um dies zu erreichen, was ein etwas ungewöhnliches Vorgehen wäre.



  • Auch wenn ich nicht verstehe oder sich mir erschließt was du vorhast (oder vorzuhaben hast):

    #pragma omp parallel
    {
        // ...
        #pragma omp master
        {
            // ...
        }
        // ...
    }
    


  • Ich bräuchte den Zugriff in allen Threads, das gibt die API aber nicht her.
    Daher hilft es nicht zu prüfen, ob ich im master thread bin und den code nur dort ausführe.
    In den verschiedenen Threads werden verschiedene Dateien gelesen, aber wie gesagt geht das mit der API nicht.

    The WipReporter singleton is always initialized in the main thread and is available only to that thread

    Gibt es ein omp pragma mit dem man für bestimmte codezeilen in den main thread springt?
    Wäre kein problem, wenn der Teil dann nicht parallel abläuft.
    Ansonsten muss ich den code halt so umbauen, dass erst alles gelesen wird, dann parallel berechnet und anschließend geschrieben wird.


Anmelden zum Antworten