Hola Mundo
#include <omp.h>
#include <stdio.h>
int main (int argc, char *argv[])
{ int p,th_id;
p=omp_get_num_procs();
omp_set_num_threads(p);
#pragma omp parallel private(th_id);
{
th_id = omp_get_thread_num();
printf("Hello World from thread %d\n", th_id);
}
return 0;
}
Aproximación de \[\pi\] por el método de rectangulos
#include <omp.h >
#include <stdio.h >
#include <time.h >
#include <sys/time.h>
int main (int argc, char *argv[])
{
double area,x;
int i,n;
area = 0.0;
printf("n="); scanf("%d",&n);
#pragma omp parallel for private(x) reduction(+:area);
for (i=0;i<n;i++)
{ x=(i+0.5)/n;
area += 4.0/(1.0+x*x);
}
printf("pi = %lf\n", area/n);
return 0;
}
Aproximación de \[\pi\] por el método de montecarlo.
#include <stdlib.h>
#include <stdio.h>
int main(int argc,char *argv[])
{
int count;
int i;
int local_count;
int samples;
int t;
int tid;
double x,y;
unsigned short xi[3];
samples=atoi(argv[1]);
omp_set_num_threads(atoi(argv[2]));
count=0;
#pragma omp parallel private(xi,t,i,x,y,local_count);
{
local_count=0;
xi[0]=atoi(argv[3]);
xi[1]=atoi(argv[4]);
xi[2]=tid=omp_get_thread_num();
t = omp_get_num_threads();
for (i=tid;i<samples;i += t){
x=erand48(xi);
y=erand48(xi);
if(x*x + y*y <= 1.0) local_count +=1;
}
#pragma omp critical
count += local_count;
}
printf("Estimate of pi: %7.5f\n",4.0*count/samples);
}
1 comentarios:
Gracias por tu aporte, me ha sido de gran ayuda C:
Publicar un comentario