Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Var: Variabeln flyttalsminskning kan orsaka inkonsekventa resultat under /fp:strict eller #pragma fenv_access
Anmärkningar
Du bör inte använda /fp:strict eller fenv_access med OpenMP-minskningar av flyttal eftersom summan beräknas i en annan ordning. Resultatet kan därför skilja sig från resultaten utan /openmp.
Example
I följande exempel genereras C4938:
// 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;
}
Utan explicit parallellisering beräknas summan enligt följande:
sum = a[first] + a[first + 1] + ... + a[last];
Med explicit parallellisering (och två trådar) beräknas summan enligt följande:
sum1 = a[first] + ... a[first + last / 2];
sum2 = a[(first + last / 2) + 1] + ... a[last];
sum = sum1 + sum2;