Jeśli używam wspólnej zmiennej, powiedzmy podwójnej, aby obliczyć jakąś sumę w trakcie wykonywania programu. Czy w każdym razie byłaby podatna na niestabilne operacje? To znaczy, czy byłoby możliwe, że więcej niż jeden rdzeń uzyskałby dostęp do tej zmiennej w sposób asynchroniczny i powodowałby niestabilność wyników?C++: Ochrona pamięci współdzielonej OpenMP
Na przykład: jest to zmienna globalna:
double totalTime = 0;
aw każdym rdzeniu polecenie nazywa się:
totalTime += elapsedTime;
Ta ostatnia operacja/instrukcja wykonywana jest poprzez wartość totalTime , umieść go w rejestrze procesora, a następnie dodaj. Mogę sobie wyobrazić, że więcej niż jeden rdzeń przyjmie taką samą wartość w tej samej chwili, a następnie doda nowy czas, który upłynął, a następnie wartość zapisana w totalTime zostanie nadpisana z niewłaściwą wartością, z powodu opóźnienia. Czy to jest możliwe? i jak mogę to rozwiązać?
Dziękuję.
Dzięki, kolego :) –
Zastanawiam się, w jaki sposób OpenMP obsługuje rozszerzenia atomowe dla typów danych zmiennoprzecinkowych na x86 - nie ma natywnej instrukcji dla tego. Sekcje krytyczne? – snemarch
@snemarch: Nie mogłem znaleźć niczego ostatecznego, więc domyślam się, że używa zamków. – Tudor