Всякий раз, когда я запускаю этот код, он показывает мне разное время выполнения параллельного раздела. Я пытался с постоянным количеством потоков в соответствии с моим ядром, но все же усилия бесполезны. Программа предназначена для вычисления значения pi. Составлено с gcc -fopenmp
.Изменение времени работы параллельной области OpenMP
#include <stdio.h>
#include <omp.h>
static long num_steps = 100000; double step;
//double omp_get_wtime(void);
int main(){
int i;
double x,pi,max_threads,start,time;
double sum=0.0;
step = 1.0/(double) num_steps;
//omp_set_num_threads(4);
omp_get_max_threads();
start=omp_get_wtime();
#pragma omp parallel
{
#pragma omp for reduction(+:sum) schedule(static) private(x) //reduction to get local copy
for (i=0;i<num_steps;i++){
x=(i+0.5)*step;
sum += 4.0/(1.0+x*x);
}
//max_threads=omp_get_max_threads();
}
time=omp_get_wtime()-start;
pi=step*sum;
printf("pi=(%f)\t run_time(%f)\n",pi,time);//,max_threads);
return 0;
}
Добро пожаловать в переполнение стека! Название вашего вопроса очень общее и никоим образом не отражает фактическую проблему. Пожалуйста, уделите время и прочитайте [Как задать хороший вопрос?] (Http://stackoverflow.com/help/how-to-ask) в разделе справки. –
Для согласованного времени выполнения типичным требованием является привязка потоков и предотвращение конкуренции с другими задачами. Если вы делаете простое сокращение суммы и предотвращаете оптимизацию simd, задача не имеет большого значения. – tim18