[Omp] slow performance
andrew wang
mcwang88 at hotmail.com
Wed Dec 15 06:59:54 PST 2004
Hello,
I am pretty new to OpenMP, before do some real thing, I write a simple code
to test my understanding. But to my
big suprise, I see that the result is quite different from what I can
imagine. The more threads I have, the more
slow the calculation is.
Can you help me to take a look at the source code and the result I got? Is
it too much fork/join, but little time on calculation in each thread?
Thanks
Andrew
source:
#include <omp.h>
#include <time.h>
#include <stdio.h>
static long num_steps = 1000000000L;
double step;
int omp_threads = 1;
void main (int argc,char **argv) {
double x, sum, pi=0.0;
int id;
time_t t1,t2,t11,t22;
int ii, jj, kk, i;
int total_time=0;
(void) time(&t1);
omp_threads=atoi(argv[1]);
printf("omp_get_num_procs=%d\n",omp_get_num_procs());
step = 1.0/(double) num_steps;
omp_set_num_threads(omp_threads);
for (i=0;i<16200;i++) {
for (ii=0; ii<50; ii++)
{
(void) time(&t11);
#pragma omp parallel private (jj,kk,x, sum)
{
id = omp_get_thread_num();
for (jj=id;jj<3; jj=jj+omp_threads )
{
for (kk=0; kk< 50; kk ++){
x = (kk+0.5)*step;
sum += 4.0/(1.0+x*x); // more complicated calculation here.
}
pi += sum;
}
}
(void) time(&t22);
total_time += (long)(t22-t11);
}
}
id = omp_get_thread_num();
printf("Parallel region time=%d seconds\n", (int) total_time);
(void) time(&t2);
printf("Total time = %d seconds\n", (int) (t2-t1));
}
result:
atlas1> a.out 1
omp_get_num_procs=4
Parallel region time=2 seconds
Total time = 3 seconds
atlas1> a.out 2
omp_get_num_procs=4
Parallel region time=41 seconds
Total time = 41 seconds
atlas1> a.out 3
omp_get_num_procs=4
Parallel region time=71 seconds
Total time = 72 seconds
More information about the Omp
mailing list