Commit 2663ec23 authored by iker_martin's avatar iker_martin
Browse files

Anadido nuevo script para comprobar resultados. Otros cambios menores

parent 79f5835d
...@@ -103,12 +103,12 @@ void print_iter_results(results_data *results, int last_normal_iter_index) { ...@@ -103,12 +103,12 @@ void print_iter_results(results_data *results, int last_normal_iter_index) {
printf("%lf ", results->iters_time[i]); printf("%lf ", results->iters_time[i]);
} }
printf("\nTtype: "); printf("\nTtype: "); //FIXME modificar a imprimir solo la cantidad de asincronas
for(i=0; i< results->iter_index; i++) { for(i=0; i< results->iter_index; i++) {
printf("%d ", results->iters_type[i] == 0); printf("%d ", results->iters_type[i] == 0);
} }
printf("\nTop: "); printf("\nTop: "); //FIXME modificar a imprimir solo cuantas operaciones cuestan una iteracion
for(i=0; i< results->iter_index; i++) { for(i=0; i< results->iter_index; i++) {
aux = results->iters_type[i] == 0 ? results->iters_type[last_normal_iter_index] : results->iters_type[i]; aux = results->iters_type[i] == 0 ? results->iters_type[last_normal_iter_index] : results->iters_type[i];
printf("%d ", aux); printf("%d ", aux);
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include <fcntl.h> #include <fcntl.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <pthread.h> #include <pthread.h>
#include "computing_func.h"
#include "../IOcodes/read_ini.h" #include "../IOcodes/read_ini.h"
#include "../IOcodes/results.h" #include "../IOcodes/results.h"
#include "../malleability/ProcessDist.h" #include "../malleability/ProcessDist.h"
...@@ -25,9 +26,6 @@ int thread_check(); ...@@ -25,9 +26,6 @@ int thread_check();
void* thread_async_work(void* void_arg); void* thread_async_work(void* void_arg);
void iterate(double *matrix, int n, int async_comm); void iterate(double *matrix, int n, int async_comm);
void computeMatrix(double *matrix, int n);
double computePiSerial(int n);
void initMatrix(double **matrix, int n);
void init_group_struct(char *argv[], int argc, int myId, int numP); void init_group_struct(char *argv[], int argc, int myId, int numP);
void init_application(); void init_application();
...@@ -420,58 +418,6 @@ void iterate(double *matrix, int n, int async_comm) { ...@@ -420,58 +418,6 @@ void iterate(double *matrix, int n, int async_comm) {
results->iter_index = results->iter_index + 1; results->iter_index = results->iter_index + 1;
} }
/*
* Realiza una multiplicación de matrices de tamaño n
*/
void computeMatrix(double *matrix, int n) {
int row, col, i;
double aux;
for(col=0; i<n; col++) {
for(row=0; row<n; row++) {
aux=0;
for(i=0; i<n; i++) {
aux += matrix[row*n + i] * matrix[i*n + col];
}
}
}
}
double computePiSerial(int n) {
int i;
double h, sum, x, pi;
h = 1.0 / (double) n; //wide of the rectangle
sum = 0.0;
for (i = 0; i < n; i++) {
x = h * ((double)i + 0.5); //height of the rectangle
sum += 4.0 / (1.0 + x*x);
}
return pi = h * sum;
//MPI_Reduce(&sum, &res, 1, MPI_DOUBLE, MPI_SUM, root, MPI_COMM_WORLD);
}
/*
* Init matrix
*/
void initMatrix(double **matrix, int n) {
int i, j;
// Init matrix
if(matrix != NULL) {
*matrix = malloc(n * n * sizeof(double));
if(*matrix == NULL) { MPI_Abort(MPI_COMM_WORLD, -1);}
for(i=0; i < n; i++) {
for(j=0; j < n; j++) {
(*matrix)[i*n + j] = i+j;
}
}
}
}
//======================================================|| //======================================================||
//======================================================|| //======================================================||
//=============INIT/FREE/PRINT FUNCTIONS================|| //=============INIT/FREE/PRINT FUNCTIONS================||
...@@ -584,7 +530,7 @@ void init_application() { ...@@ -584,7 +530,7 @@ void init_application() {
printf("Creado Top con valor %lf\n", result); printf("Creado Top con valor %lf\n", result);
fflush(stdout); fflush(stdout);
config_file->Top = (MPI_Wtime() - start_time) / 20000; //Tiempo de una iteracion config_file->Top = (MPI_Wtime() - start_time) / 20000; //Tiempo de una iteracion en numero de iteraciones
MPI_Bcast(&(config_file->Top), 1, MPI_DOUBLE, ROOT, MPI_COMM_WORLD); MPI_Bcast(&(config_file->Top), 1, MPI_DOUBLE, ROOT, MPI_COMM_WORLD);
} }
......
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <mpi.h>
#include "computing_func.h"
/*
* Realiza una multiplicación de matrices de tamaño n
*/
double computeMatrix(double *matrix, int n) { //FIXME No da tiempos repetibles
int row, col;
double aux;
aux=0;
for(row=0; row<n; row++) {
for(col=0; col<n; col++) {
aux += ( (int)(matrix[row*n + col] + exp(sqrt(row*col))) % n);
}
}
return aux;
}
double computePiSerial(int n) {
int i;
double h, sum, x, pi;
h = 1.0 / (double) n; //wide of the rectangle
sum = 0.0;
for (i = 0; i < n; i++) {
x = h * ((double)i + 0.5); //height of the rectangle
sum += 4.0 / (1.0 + x*x);
}
return pi = h * sum;
//MPI_Reduce(&sum, &res, 1, MPI_DOUBLE, MPI_SUM, root, MPI_COMM_WORLD);
}
/*
* Init matrix
*/
void initMatrix(double **matrix, int n) {
int i, j;
// Init matrix
if(matrix != NULL) {
*matrix = malloc(n * n * sizeof(double));
if(*matrix == NULL) { MPI_Abort(MPI_COMM_WORLD, -1);}
for(i=0; i < n; i++) {
for(j=0; j < n; j++) {
(*matrix)[i*n + j] = i+j;
}
}
}
}
double computeMatrix(double *matrix, int n);
double computePiSerial(int n);
void initMatrix(double **matrix, int n);
module load mpich-3.4.1-noucx module load mpich-3.4.1-noucx
mpicc -Wall Main/Main.c IOcodes/results.c IOcodes/read_ini.c IOcodes/ini.c malleability/ProcessDist.c malleability/CommDist.c -pthread -lslurm mpicc -Wall Main/Main.c Main/computing_func.c IOcodes/results.c IOcodes/read_ini.c IOcodes/ini.c malleability/ProcessDist.c malleability/CommDist.c -pthread -lslurm -lm
if [ $# -gt 0 ]
then
if [ $1 = "-e" ]
then
cp a.out benchm.out
fi
fi
...@@ -7,6 +7,7 @@ ResultsDir="Results/" ...@@ -7,6 +7,7 @@ ResultsDir="Results/"
ResultsDirName=$1 ResultsDirName=$1
maxIndex=$2 maxIndex=$2
cantidadGrupos=$3 #Contando a los padres
cd $dir$ResultsDir cd $dir$ResultsDir
if [ ! -d $ResultsDirName ] if [ ! -d $ResultsDirName ]
...@@ -36,11 +37,43 @@ if [ $qty -gt 0 ] ...@@ -36,11 +37,43 @@ if [ $qty -gt 0 ]
then then
echo "Se han encontrado errores de ejecución leves. Volviendo a ejecutar" echo "Se han encontrado errores de ejecución leves. Volviendo a ejecutar"
while IFS="" read -r line || [ -n "$line" ] while IFS="" read -r lineRun || [ -n "$lineRun" ]
do do
run=$(echo $line | cut -d '/' -f1 | cut -d 'n' -f2) #Obtener datos de una ejecución erronea
run=$(echo $lineRun | cut -d '/R' -f2 | cut -d '_' -f1)
if [ $run -gt $maxIndex ]
then #Indice de ejecuciones posteriores
realRun=$(($run - $maxIndex))
index=$run
else # Indice de las primeras ejecuciones
realRun=$run
index=$(($run + $maxIndex))
fi
echo "Run $run" echo "Run $run"
index=$(($run + $maxIndex)) cd Run$realRun
sbatch -N 2 $dir$execDir./singleRun.sh config$run.ini $index
#Arreglar ejecuccion
#1 - Borrar lineas erroneas
qty=$(grep -n - R* | grep Tex | wc -l)
for ((i=0; i<qty; i++))
do
fin=$(grep -n - R* | grep Tex | cut -d ':' -f2 | head -n1)
init=$(($fin - 6))
sed -i ''$init','$fin'd' R${realRun}_Global.out
aux=$(($fin / 7)) #Utilizado para saber de entre las ejecuciones del fichero, cual es la erronea
fin=$(($aux * 5))
ini=$(($fin - 4))
for ((j=0; j<cantidadGrupos; j++)); do
sed -i ''$init','$fin'd' R${realRun}_G${j}*
done
done
#2 - Reelanzar ejecucion
sbatch -N 2 $dir$execDir./singleRun.sh config$realRun.ini $index
cd $dir$ResultsDir$ResultsDirName
done < errores.txt done < errores.txt
fi fi
...@@ -3,8 +3,10 @@ Se tienen tres ficheros en esta carpeta: ...@@ -3,8 +3,10 @@ Se tienen tres ficheros en esta carpeta:
-- run.sh: Para ejecutar una serie de pruebas. -- run.sh: Para ejecutar una serie de pruebas.
-- arrayRun.sh: Script para ejecutar por slurm para las pruebas. Es llamado por run.sh. -- arrayRun.sh: Script para ejecutar por slurm para las pruebas. Es llamado por run.sh.
-- singleRun.sh: Para ejecutar pruebas con un fichero de configuración. -- singleRun.sh: Para ejecutar pruebas con un fichero de configuración.
-- CheckRun.sh: Para comprobar que las ejecuciones realizadas por run.sh son correctas, y en caso de que algunas fallen, relanzarlas.
-- create_ini.py: Crea un fichero de configuración de tipo "config.ini" a partir de los argumentos pasados -- create_ini.py: Crea un fichero de configuración de tipo "config.ini" a partir de los argumentos pasados
--------------------------------
Para ejecutar las pruebas se utiliza el comando: Para ejecutar las pruebas se utiliza el comando:
bash run.sh grupos-hijos tamaño-matriz cantidad-datos-sincronos tiempo-iteracion proceso-tiempo iteraciones-por-grupo cantidad-nodos bash run.sh grupos-hijos tamaño-matriz cantidad-datos-sincronos tiempo-iteracion proceso-tiempo iteraciones-por-grupo cantidad-nodos
Este script crea subcarpetas en "Results" donde almacena los resultados y los ficheros de configuración que crea. Este script crea subcarpetas en "Results" donde almacena los resultados y los ficheros de configuración que crea.
...@@ -41,3 +43,15 @@ Para ejecutar una sola prueba con un fichero de configuración se utiliza el sig ...@@ -41,3 +43,15 @@ Para ejecutar una sola prueba con un fichero de configuración se utiliza el sig
Este comando solicita dos argumentos. El primero (valor) es para indicar la cantidad de nodos a usar. Este comando solicita dos argumentos. El primero (valor) es para indicar la cantidad de nodos a usar.
El segundo es el nombre del archivo de configuración a utilizar. El segundo es el nombre del archivo de configuración a utilizar.
En la carpeta Codes/ se tiene un archivo de configuración de ejemplo llamado "test.ini". En la carpeta Codes/ se tiene un archivo de configuración de ejemplo llamado "test.ini".
--------------------------------
Para comprobar que las ejecuciones realizadas por run.sh son correctas y en caso de errores, arreglarlos si es posible
o indicarlo en caso de que no lo sea.
Su ejecucion se basa en el siguiente comando:
bash CheckRun.sh directorio cantidadTipos cantidadGrupos
- directorio: Nombre de la carpeta que se quiere revisar
- cantidadTipos: Numero de configuraciones diferentes. Dentro del directorio a revisar, es el numero de subdirectorios
- cantidadGrupos: Numero de grupos de procesos en cada ejecucion.
Actualmente, este comando no funciona si entre las ejecuciones del directorio, algunas tienen cantidades diferentes de grupos de procesos
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment