52
#include
int main()
{
double start, end;
start= omp_get_wtime();
end= omp_get_wtime();
printf("Время выполнения %lf\n", end_time-start_time);
return 0;
}
В примере происходит замер начального времени, а
затем
конечного. Результатом программы является время на замер времени,
которое дает разность времен.
В параллельной области каждой
имеющейся нитью может быть
порождена параллельная секция и последующее их соединение с
сохранением главенства порождающей нити. Число нитей в параллельной
секции можно
задавать с помощью функции omp_set_num_threads(). Эта
функция устанавливает значение переменной
OMP_NUM_THREADS.
Пример 3.4.
int main()
{
omp_set_num_threads(3);
int thread;
#pragma omp parallel
{
thread=omp_get_thread_num();
printf (thread);
}
return 0;
}
В примере каждая из порожденных нитей выводит на экран свой
номер.
В некоторых случаях система
может динамически изменять
количество нитей, используемых для выполнения параллельной области,
например, для оптимизации использования ресурсов системы. Это
разрешено делать, если
значение переменной среды OMP_DYNAMIC
установлено
в
1,
что
можно
сделать
с
помощью
функции
omp_set_dynamic(). Получить значение переменной
OMP_DYNAMIС
можно с помощью функции
omp_get_dynamic().
53
Пример 3.5.
#include
#include
int main()
{
omp_set_dynamic(1);
printf("Значение OMP_DYNAMIC: %d\n", omp_get_dynamic());
#pragma omp parallel num_threads(100)
{
#pragma omp master
{
printf("Параллельная область, %d нитей\n",
omp_get_num_threads());
}
}
return 0;
}
В
примере
сначала
устанавливается
значение
переменной
OMP_DYNAMIC в true.
Затем порождается параллельная область со 100
потоками, в которой главным потоком
выводится реальное число
выполняющих операцию нитей.
Стратегию обработки вложенных секций можно менять с помощью
задания
значений
переменной
среды
Достарыңызбен бөлісу: