Я запускаю .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?
Спасибо.