Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
'var' : variabele voor drijvendekommareductie kan inconsistente resultaten veroorzaken onder /fp:strict of #pragma fenv_access
Opmerkingen
Gebruik /fp:strict of fenv_access niet met openMP-drijvendekommareducties, omdat de som in een andere volgorde wordt berekend. De resultaten kunnen dus verschillen van de resultaten zonder /openmp.
Example
In het volgende voorbeeld wordt C4938 gegenereerd:
// 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;
}
Zonder expliciete parallelle uitvoering wordt de som als volgt berekend:
sum = a[first] + a[first + 1] + ... + a[last];
Met expliciete parallellisatie (en twee threads) wordt de som als volgt berekend:
sum1 = a[first] + ... a[first + last / 2];
sum2 = a[(first + last / 2) + 1] + ... a[last];
sum = sum1 + sum2;