para (OpenMP)

Hace que el trabajo realizado en un bucle for dentro de una región paralela que se va a dividir entre los subprocesos.

#pragma omp [parallel] for [clauses]
   for_statement

Comentarios

donde

  • clause (opcional)
    cero o más cláusula.Vea la sección comentarios para obtener una lista de las cláusulas admitidas por el párrafo.

  • for_statement
    Un bucle for.El comportamiento indefinido se producirá si el código de usuario de para el bucle cambia la variable de índice.

Comentarios

La directiva de Para admite las siguientes cláusulas de OpenMP:

si Paralelo también se especifica, clause puede ser cualquier cláusula aceptada por las directivas de Paralelo o de Para , excepto nowait.

Para obtener más información, vea 2.4.1 para la construcción.

Ejemplo

// 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);
}
  
  

Vea también

Referencia

Directivas de OpenMP