Поделиться через


for (OpenMP)

Вызывает завершивший работу в цикл for, в параллельной области, разбиваемый между потоками.

#pragma omp [parallel] for [clauses]
   for_statement

Заметки

Здесь:

  • clause (необязательный параметр)
    Ноль или несколько предложений. Эти раздел " примечания " список предложений, поддерживаемых by для.

  • for_statement
    Цикл for. Неопределенная функциональности если код пользователя в цикле for изменяет переменную индекса.

Заметки

для директива поддерживает следующие предложений OpenMP.

If Параллельно определяет также, clause может быть любым предложением выполнения Параллельно OR для директивы, кроме nowait.

Дополнительные сведения см. в разделе 2.4.1 для конструирования.

Пример

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

См. также

Ссылки

Директивы OpenMP