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) {
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++) {
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++) {
aux = results->iters_type[i] == 0 ? results->iters_type[last_normal_iter_index] : results->iters_type[i];
printf("%d ", aux);
......
......@@ -4,6 +4,7 @@
#include <fcntl.h>
#include <sys/stat.h>
#include <pthread.h>
#include "computing_func.h"
#include "../IOcodes/read_ini.h"
#include "../IOcodes/results.h"
#include "../malleability/ProcessDist.h"
......@@ -25,9 +26,6 @@ int thread_check();
void* thread_async_work(void* void_arg);
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_application();
......@@ -420,58 +418,6 @@ void iterate(double *matrix, int n, int async_comm) {
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================||
......@@ -584,7 +530,7 @@ void init_application() {
printf("Creado Top con valor %lf\n", result);
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);
}
......
#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
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/"
ResultsDirName=$1
maxIndex=$2
cantidadGrupos=$3 #Contando a los padres
cd $dir$ResultsDir
if [ ! -d $ResultsDirName ]
......@@ -36,11 +37,43 @@ if [ $qty -gt 0 ]
then
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
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"
index=$(($run + $maxIndex))
sbatch -N 2 $dir$execDir./singleRun.sh config$run.ini $index
cd Run$realRun
#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
fi
......@@ -3,8 +3,10 @@ Se tienen tres ficheros en esta carpeta:
-- run.sh: Para ejecutar una serie de pruebas.
-- 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.
-- 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
--------------------------------
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
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
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.
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