C++11 Attribute



  • Also hat Sutter einfach nur ein Rad ab. Gut zu wissen. 🤡




  • Mod

    Eine Schleife zu parallelisieren ändert die Semantik eines Programms nicht.



  • SeppJ schrieb:

    Eine Schleife zu parallelisieren ändert die Semantik eines Programms nicht.

    Ich würde sagen, nachdem Threads in der Sprache sind, doch.



  • SeppJ schrieb:

    Eine Schleife zu parallelisieren ändert die Semantik eines Programms nicht.

    Doch, wohl. Vor allem, wenn eine Variable geshared wird und nicht atomic ist, oder durch andere Mechanismen geschützt wird.



  • cooky451 schrieb:

    SeppJ schrieb:

    Eine Schleife zu parallelisieren ändert die Semantik eines Programms nicht.

    Ich würde sagen, nachdem Threads in der Sprache sind, doch.

    Huch hab ich etwas verpasst, dachte sie seien in die Stdlib gekommen?



  • 314159265358979 schrieb:

    SeppJ schrieb:

    Eine Schleife zu parallelisieren ändert die Semantik eines Programms nicht.

    Doch, wohl. Vor allem, wenn eine Variable geshared wird und nicht atomic ist, oder durch andere Mechanismen geschützt wird.

    Damit würde sich das Verhalten von nichtdeterministisch ohne parallelisierte Schleife auf nichtdeterministisch mit parallelisierter Schleife ändern. Beides nicht so prickelnd...



  • Was ist an der nicht parallelisierten schleife nicht deterministisch 😕



  • 314159265358979 schrieb:

    Was ist an der nicht parallelisierten schleife nicht deterministisch 😕

    Dass sie auf eine nichtatomische, shared variable zugreift. Sowas ist immer nichtdeterministisch, sobald Threads im Spiel sind, dazu braucht man nicht extra OpenMP-Parallelisierung.

    Wenn sich deine Argumentation darauf bezog, dass durch die Parallelisierung ja grundsätzlich zusätzliche Threads reinkommen und damit die Semantik gegenüber einem rein sequentiellen Programm geändert wird, hast du grundsätzlich natürlich recht, allerdings bezweifle ich mal ganz stark, dass Sepp den Unterschied in seine Aussage mit einbeziehen wollte. Lies es meinetwegen als "Eine Schleife ordentlich zu parallelisieren ändert die Semantik eines Programms nicht."



  • Gehen wir davon aus, dass es keine Synchronisationsprobleme gibt, so würde die folgende Schleife parallelisiert dennoch eine andere Ausgabe erzeugen, als sequenziell:

    for(int i = 0; i < 10; ++i)
        std::cout << i;
    


  • 314159265358979 schrieb:

    Gehen wir davon aus, dass es keine Synchronisationsprobleme gibt, so würde die folgende Schleife parallelisiert dennoch eine andere Ausgabe erzeugen, als sequenziell:

    for(int i = 0; i < 10; ++i)
        std::cout << i;
    

    Genaus das ist ein Synchronisationsproblem, wie alles, was Nebenwirkungen hat, deren zeitliche Abfolge relevant/sichtbar ist 🙂


Anmelden zum Antworten