Wenn ich eine gemeinsame Variable verwende, sagen wir ein Double, um eine Art Summe während der Ausführung des Programms zu berechnen. Wäre das für instabile Operationen anfällig? Ich meine, wäre es möglich, dass mehr als ein Kern asynchron auf diese Variable zugreifen und zu instabilen Ergebnissen führen würde?C++: OpenMP shared memory protection
Zum Beispiel: dies ist eine globale Variable:
double totalTime = 0;
und in jedem Kern ein Befehl aufgerufen wird:
totalTime += elapsedTime;
Diese letzte Operation/Anweisung wird berechnet, indem der Wert von totaltime ausgeführt Setzen Sie es in das CPU-Register und führen Sie dann die Addition durch. Ich kann mir vorstellen, dass mehr als ein Kern im selben Augenblick den gleichen Wert annimmt und dann die neue elapsedTime hinzufügt, und dann würde der in totalTime gespeicherte Wert aufgrund der Latenz mit dem falschen Wert überschrieben werden. Ist das möglich? und wie kann ich das lösen?
Vielen Dank.
Danke, Kumpel :) –
Ich frage mich, wie OpenMP atomare fügt für Fließkomma-Datentypen auf x86 unterstützt - es gibt keine native Anweisung dafür. Kritische Abschnitte? – snemarch
@snemarch: Ich konnte nichts definitives finden, also denke ich, dass es Sperren verwendet. – Tudor