Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
'var' : A lebegőpontos csökkentési változó inkonzisztens eredményeket okozhat a /fp:strict vagy #pragma fenv_access
Megjegyzések
A /fp:strict vagy fenv_access nem szabad OpenMP lebegőpontos csökkentésekkel használni, mert az összeg kiszámítása más sorrendben történik. Így az eredmények eltérhetnek az eredményektől a /openmp nélkül.
Example
Az alábbi példa C4938-at hoz létre:
// 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;
}
Explicit párhuzamosítás nélkül az összeg kiszámítása az alábbiak szerint történik:
sum = a[first] + a[first + 1] + ... + a[last];
Explicit párhuzamosítás (és két szál) esetén az összeg kiszámítása az alábbiak szerint történik:
sum1 = a[first] + ... a[first + last / 2];
sum2 = a[(first + last / 2) + 1] + ... a[last];
sum = sum1 + sum2;