# include <math.h>
# include <stdlib.h>
# include <stdio.h>
# include <omp.h>
# define KE 1000
# define NSTEPS 100000
main()
{
float ex[KE],hy[KE];
float bn[NSTEPS];
int n,k,kc,ke;
float ddx,dt,T;
float t0,spread,pulse;
omp_set_num_threads(4);
kc = KE/2;
t0 = 40.0;
spread = 12;
T = 0;
FILE * temp = fopen("Exserial.txt", "w");
for (k=0; k <= KE; k++ ) {
ex[k] = 0.0;
hy[k] = 0.0;
}
for (n=1; n<=NSTEPS ; n++) {
T = T + 1;
pulse = exp(-.5*(pow( (t0-T)/spread,2.0) ));
ex[kc] = pulse;
#pragma omp for
for (k=1; k <=KE; k++) {
#pragma omp atomic update
ex[k] = ex[k] + .5*( hy[k-1] - hy[k] ) ;
}
#pragma omp for
for (k=0; k <=KE-1; k++) {
#pragma omp atomic update
hy[k] = hy[k] + .5*( ex[k] - ex[k+1] ) ;
}
}
for (k=1; k <=KE; k++) {
fprintf(temp, "%f\n",ex[k]);
printf("%f\n",ex[k]);
}
}
SERIAL RUN
real 0m1.210s
user 0m1.212s
sys 0m0.000s
PARALLEL RUN
real 0m3.194s
user 0m3.188s
sys 0m0.004s
Эта параллельная программа занимает больше времени, чем последовательный прогон.
Как улучшить производительность параллельной работы?