Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
"var": Die reduction-Gleitkommavariable kann zu inkonsistenten Ergebnissen bei /fp:strict oder #pragma fenv_access führen.
Bemerkungen
/fp:strict oder fenv_access sollte nicht mit reduction-Gleitkommavorgängen von OpenMP verwendet werden, da die Summe in einer anderen Reihenfolge berechnet wird. Daher können die Ergebnisse von den Ergebnissen ohne "/openmp" abweichen.
Example
Im folgenden Beispiel wird C4938 generiert:
// C4938.cpp
// compile with: /openmp /W4 /fp:strict /c
// #pragma fenv_access(on)
extern double *a;
double test(int first, int last) {
double sum = 0.0;
#pragma omp parallel for reduction(+: sum) // C4938
for (int i = first ; i <= last ; ++i)
sum += a[i];
return sum;
}
Ohne explizite Parallelisierung wird die Summe wie folgt berechnet:
sum = a[first] + a[first + 1] + ... + a[last];
Mit expliziter Parallelisierung (und zwei Threads) wird die Summe wie folgt berechnet:
sum1 = a[first] + ... a[first + last / 2];
sum2 = a[(first + last / 2) + 1] + ... a[last];
sum = sum1 + sum2;