Me da bastante pereza instalar maquinas virtuales y sobre todo tener que probar mis ejecutables en linux, que son bastante básicos por ahora, risas, pero espero a ver si voy avanzando.

Lo primero que vemos al ir a la página de Eclipse es que existe una version Parallel Application Developers ( eclipse-parallel-neon-R-win32-x86_64.zip) pero al instarla veo que no es tan fácil como pensaba y necesitamos un compilador, iluso de mí xD.

Para eso siguiendo esta guía he usado Cygwin GCC. En esencia la instalamos seleccionando los paquetes «gcc», «g++», «gdb», y»make» bajo «Devel», que no vienen por por defecto en la instalación. Otra guía te compila estos paquetes pero no es necesario, salvo que necesites alguna versión que no tengas. Luego es necesario añadir a variables de entorno la ruta: «PATH» ? Edit ? Add «C:\cygwin64\bin. O donde lo hayamos instalado.

Luego si no tenemos instado el paquete anterior de eclipse lo hacemos y debería ir sin problema. Para realizar nuestro primer proyecto hacemos File > C Proyect > OpenMP Empty Proyect y en Toolchain nos debería aparecer ya la posibilidad de Cygwin GCC, que nos permitirá mas adelante seleccionar las distintas configuraciones que antes no podíamos sin instalar Cygwin GCC.

Creamos un archivo en C, y colocamos lo siguiente en honor a PI para probar que todo va como debería:

/*

* Calculate $\pi = 4 \int_0^1 \sqrt{1 – x^2} \, dx$
* using a rectangle rule $\sum_{i=1}^N f(x_0 + i h – h/2) h$
*
* Compile as $> gcc -Wall -Wextra -fopenmp -lm
* Run as $> OMP_NUM_THREADS=2 ./a.out
*/
#include <stdio.h>
#include <math.h>
#include <omp.h>

int main()
{
const int N = 10000000;
const double L = 1.0;
const double h = L / N;
const double x_0 = 0.0;

double pi;
double t_1, t_2;

int i;
double sum = 0.0;

t_1 = omp_get_wtime();

#pragma omp parallel for reduction(+: sum) schedule(static)
for (i = 0; i < N; ++i)
{
double x = x_0 + i * h + h/2;
sum += sqrt(1 – x*x);
}

t_2 = omp_get_wtime();

pi = sum * h * 4.0;

printf(«omp_get_max_threads(): %d\n», omp_get_max_threads());
printf(«time: %f\n», t_2 – t_1);
printf(«pi ~ %f\n», pi);

return 0;
}

Luego Build All y Run según la configuración que hayamos puesto. Y obtenemos por ejemplo:

omp_get_max_threads(): 4
time: 1.145202
pi ~ 3.141593

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Post Navigation