pour (OpenMP)

Permet de le travail effectué dans un pour l'intérieur de la boucle une région parallèle à diviser entre les threads.

#pragma omp [parallel] for [clauses]
   for_statement

Notes

où,

  • clause (facultatif)
    zéro clauses ou plus.Consultez la section Notes pour une liste des clauses prises en charge par pour.

  • for_statement
    Une boucle for.Le comportement indéfini est générée si le code utilisateur dans la boucle modifie la variable d'index.

Notes

La directive de pour prend en charge les clauses suivantes OpenMP :

Si parallèle est également spécifié, clause peut être une clause acceptée par les directives de parallèle ou de pour , sauf nowait.

Pour plus d'informations, consultez 2.4.1 pour l'élément.

Exemple

// omp_for.cpp
// compile with: /openmp 
#include <stdio.h>
#include <math.h>
#include <omp.h>

#define NUM_THREADS 4
#define NUM_START 1
#define NUM_END 10

int main() {
   int i, nRet = 0, nSum = 0, nStart = NUM_START, nEnd = NUM_END;
   int nThreads = 0, nTmp = nStart + nEnd;
   unsigned uTmp = (unsigned((abs(nStart - nEnd) + 1)) * 
                               unsigned(abs(nTmp))) / 2;
   int nSumCalc = uTmp;

   if (nTmp < 0)
      nSumCalc = -nSumCalc;

   omp_set_num_threads(NUM_THREADS);

   #pragma omp parallel default(none) private(i) shared(nSum, nThreads, nStart, nEnd)
   {
      #pragma omp master
      nThreads = omp_get_num_threads();

      #pragma omp for
      for (i=nStart; i<=nEnd; ++i) {
            #pragma omp atomic
            nSum += i;
      }
   }

   if  (nThreads == NUM_THREADS) {
      printf_s("%d OpenMP threads were used.\n", NUM_THREADS);
      nRet = 0;
   }
   else {
      printf_s("Expected %d OpenMP threads, but %d were used.\n",
               NUM_THREADS, nThreads);
      nRet = 1;
   }

   if (nSum != nSumCalc) {
      printf_s("The sum of %d through %d should be %d, "
               "but %d was reported!\n",
               NUM_START, NUM_END, nSumCalc, nSum);
      nRet = 1;
   }
   else
      printf_s("The sum of %d through %d is %d\n",
               NUM_START, NUM_END, nSum);
}
  
  

Voir aussi

Référence

Directives et OpenMP