Измерение времени выполнения в коде C++ OpenMP

Я запускаю код .cpp (i) в последовательном стиле и (ii) с использованием операторов OpenMP. Я пытаюсь увидеть разницу во времени. Для расчета времени я использую следующее:

#include <time.h>
.....
main()
{

  clock_t start, finish;
  start = clock();
  .
  .
  .
  finish = clock();

  processing time = (double(finish-start)/CLOCKS_PER_SEC);

 }

Время довольно точное при последовательном (выше) выполнении кода. Для запуска требуется около 8 секунд. Когда я вставляю операторы OpenMP в код и после этого вычисляю время, я получаю сокращение времени, но отображаемое время составляет около 8-9 секунд на консоли, тогда как на самом деле это всего 3-4 секунды в реальном времени!

Вот как мой код выглядит абстрактно:

#include <time.h>
.....
main()
{

  clock_t start, finish;
  start = clock();
  .
  .
  #pragma omp parallel for
  for( ... )
     for( ... )
       for (...)
    {           
      ...;      
    }
  .
  .
  finish = clock();

  processing time = (double(finish-start)/CLOCKS_PER_SEC);

 }

Когда я запускаю приведенный выше код, я получаю сокращение времени, но отображаемое время не является точным с точки зрения реального времени. Мне кажется, что функция clock() вычисляет индивидуальное время каждого потока, суммирует их и отображает.

Может ли кто-нибудь объяснить причину этого или предложить мне какую-либо другую функцию измерения времени для измерения времени в программах OpenMP?

Спасибо.

27
задан Puppy 4 June 2012 в 00:41
поделиться