0
このコードを実行するたびに、パラレルセクションで実行された実行時間が変わっています。私は自分のコアに応じて一定数のスレッドを試しましたが、まだ努力は無駄です。プログラムは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)を読んでください。 –
実行時間を一定にするには、一般的な要件として、スレッドをピン止めして他のタスクとの競合を避ける必要があります。シンプルな和を減らしてシム最適化を妨げている場合、そのタスクはあまり意味がありません。 – tim18