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