Skip to content
Snippets Groups Projects
Commit b04da53e authored by Nicolas Fley's avatar Nicolas Fley
Browse files

first commit, pi and token done

parents
No related branches found
No related tags found
No related merge requests found
Showing with 350 additions and 0 deletions
cd 'B:\Mes Documents\progra\calcInt\'
C:\MPICH2\bin\mpiexec.exe -localonly 10
\ No newline at end of file
File added
#include <stdio.h>
#include <iostream>
#include <mpi.h>
using namespace std;
int main (int argc, char *argv[])
{
int rank, size;
MPI_Init (&argc, &argv); /* starts MPI */
MPI_Comm_rank (MPI_COMM_WORLD, &rank); /* get current process id */
MPI_Comm_size (MPI_COMM_WORLD, &size); /* get number of processes */
cout << "fuck" << endl;
MPI_Finalize();
return 0;
}
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="mpi_test" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Debug">
<Option output="bin/Debug/mpi_test" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Debug/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-g" />
</Compiler>
</Target>
<Target title="Release">
<Option output="bin/Release/mpi_test" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Release/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
</Compiler>
<Linker>
<Add option="-s" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
<Add option="-fexceptions" />
</Compiler>
<Unit filename="main.cpp" />
<Extensions>
<code_completion />
<envvars />
<debugger />
<lib_finder disable_auto="1" />
</Extensions>
</Project>
</CodeBlocks_project_file>
# depslib dependency file v1.0
1486690749 source:b:\mes documents\progra\calcint\mpi_test\main.cpp
<stdio.h>
<mpi.h>
1266856170 c:\mpich2\include\mpi.h
"mpio.h"
"mpicxx.h"
1266856170 c:\mpich2\include\mpio.h
"mpi.h"
1266856178 c:\mpich2\include\mpicxx.h
<stdio.h>
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_layout_file>
<FileVersion major="1" minor="0" />
<ActiveTarget name="Debug" />
<File name="main.cpp" open="1" top="1" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="232" topLine="0" />
</Cursor>
</File>
</CodeBlocks_layout_file>
File added
File added
pi/main.c 0 → 100644
#include <stdio.h>
#include <mpi.h>
double sequential(int bnTrap);
double sequential_boucle(int bnTrap, int nbBoucle);
double parralele(int nbTrap);
int main (int argc, char *argv[]) {
//printf("pi = %f\n",sequential(100));
//printf("pi= %f\n",sequential_boucle(100,10));
MPI_Init (&argc, &argv); /* starts MPI */
printf("pi= %f\n",parralele(1000));
return 0;
}
double f(double x){
return 4.0/(1.0+x*x);
}
double sequential(int nbTrap){
/*
* Application de l'integration par la méthode des trapèzes appliquée au problème.
* Les valeurs génériques usuellement utilisés par cette méthodes (tels que a et b
* pour les bornes de l'intégrales) ont été incrustés dans les formules utilisés.
*/
double sum=0; // stockage de la somme intégrale.
double i; // variable d'incrémentation.
double h=1.0/nbTrap; // plus rapide de diviser que de multiplier.
for(i=0;i<1;i+=h){ // pour i allant de 0 à n (le nombre de trapeze)
sum+=(f(i)+f((i+h))); // formule d'intégration par la méthode des trapèzes.
}
/* // plus précis : 3.141793 vs 3.141593 pour 100000 intérations
for(i=0;i<1;i+=1.0){ // pour i allant de 0 à n (le nombre de trapeze)
sum+=(f(i*h)+f((i+1.0)*h)); // formule d'intégration par la méthode des trapèzes.
}
*/
return sum/nbTrap/2;
}
double sequential_boucle(int nbTrap, int nbBoucle){
/*
* Application de la méthode séquentielle.
* Au lieu d'être pris entre 0 et n, i dans un certain nombre d'interval.
* Ces intervales sont définit entre b/nbBoucle et (b+1.0)/nbBoucle
*/
double sum=0; // integrale
double nbTrap_d=(double)(nbTrap); // nb de trapezes voulu par l'utilisateur
double nbBoucle_f=(double)nbBoucle; // nb de boucles voulus par l'utilisateur
double h=1.0/nbTrap_d; // pas entre deux itérations de boucles
double i,b;
for(b=0;b<nbBoucle_f;b+=1.0){
for(i=b/nbBoucle_f;i<(b+1.0)/nbBoucle_f;i+=h){ // séparation en boucle
sum+=(f(i)+f((i+h))); // somme
}
}
return sum/nbTrap_d/2.0; // reduction
}
double parralele(int nbTrap){
/*
* Version sequentielle du probleme, appel de n processus calculant une partie
* de l'intégrale définie précedemment. Puis renvoie au master (rank==0) qui
* agrège tout ça.
*/
// les variables
int rank, size, nbProcess;
double pi_esc,nbProcess_f,h;
MPI_Status status;
double sum=0;
// recuperation pour chaque process de son numero et du nombre de process
MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* get current process id */
MPI_Comm_size(MPI_COMM_WORLD, &size); /* get number of processes */
nbProcess=size-1;
nbProcess_f=(double)size-1.0;
h=1.0/(double)nbTrap;
if(rank==0){
printf("\nexecuted with %f processes",nbProcess_f);
for(int i=1;i!=nbProcess+1;i++){
MPI_Recv(&pi_esc,1,MPI_DOUBLE,i,10,MPI_COMM_WORLD,&status);
printf("\nrecu proc %d = %f",i,pi_esc);
sum+=pi_esc;
}
return sum;
}else{
double b=(double)rank-1.0;
pi_esc=0;
for(double i=b/nbProcess_f;i<(b+1.0)/nbProcess_f;i+=h){ // séparation en boucle
pi_esc+=(f(i)+f((i+h))); //somme
}
pi_esc=pi_esc/((double)nbTrap)/2.0;
MPI_Send(&pi_esc,1,MPI_DOUBLE,0,10,MPI_COMM_WORLD);
printf("\nsent proc %d = %f",rank,pi_esc);
}
MPI_Finalize();
}
File added
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="pi" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Debug">
<Option output="bin/Debug/pi" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Debug/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-g" />
</Compiler>
</Target>
<Target title="Release">
<Option output="bin/Release/pi" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Release/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
</Compiler>
<Linker>
<Add option="-s" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
</Compiler>
<Extensions>
<code_completion />
<envvars />
<debugger />
<lib_finder disable_auto="1" />
</Extensions>
</Project>
</CodeBlocks_project_file>
# depslib dependency file v1.0
1487185591 source:b:\mes documents\progra\calcint\pi\main.c
<stdio.h>
<mpi.h>
File added
#include <stdio.h>
#include <mpi.h>
/*
Commands :
cd 'B:\Mes Documents\progra\calcInt\'
C:\MPICH2\bin\mpiexec.exe -localonly 10
*/
int main (int argc, char *argv[]) {
int rank, size;
MPI_Status status;
int test=0;
MPI_Init (&argc, &argv); /* starts MPI */
MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* get current process id */
MPI_Comm_size(MPI_COMM_WORLD, &size); /* get number of processes */
MPI_Send(&test,1,MPI_DOUBLE,0,10,MPI_COMM_WORLD);
MPI_Recv(&test,1,MPI_DOUBLE,0,10,MPI_COMM_WORLD,&status);
MPI_Finalize();
}
File added
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="template" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Debug">
<Option output="bin/Debug/template" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Debug/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-g" />
</Compiler>
</Target>
<Target title="Release">
<Option output="bin/Release/template" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Release/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
</Compiler>
<Linker>
<Add option="-s" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
</Compiler>
<Unit filename="main.c">
<Option compilerVar="CC" />
</Unit>
<Extensions>
<code_completion />
<envvars />
<debugger />
</Extensions>
</Project>
</CodeBlocks_project_file>
# depslib dependency file v1.0
1487280073 source:b:\mes documents\progra\calcint\template\main.c
<stdio.h>
<mpi.h>
File added
#include <stdio.h>
#include <mpi.h>
#define NUM_TURN 3
int main (int argc, char *argv[]) {
int rank,size;
int num_turn=0;
int finished=0;
int token=0;
MPI_Status status;
MPI_Init (&argc, &argv); /* starts MPI */
// recuperation pour chaque process de son numero et du nombre de process
MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* get current process id */
MPI_Comm_size(MPI_COMM_WORLD, &size); /* get number of processes */
while(finished==0){
if(rank!=0){
MPI_Recv(&token,1,MPI_INT,rank-1,10,MPI_COMM_WORLD,&status);
}else{
if(num_turn>0){
MPI_Recv(&token,1,MPI_INT,size-1,10,MPI_COMM_WORLD,&status);
token+=size;
}
}
token+=rank+1;
num_turn+=1;
if(rank+1==size){
rank=-1;
//printf("tour %d\n",num_turn);
}
if(num_turn==NUM_TURN){
finished=1;
}
if(!(finished==1&&rank==-1))
MPI_Send(&token,1,MPI_INT,rank+1,10,MPI_COMM_WORLD);
else
printf("\nresult : %d\nresult should be : %d\n",token,size*NUM_TURN*(size+1)/2);
}
MPI_Finalize();
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment