Commit 79f5835d authored by iker_martin's avatar iker_martin
Browse files

Cambios en los archivos de ejecucion para permitir mas opciones y...

Cambios en los archivos de ejecucion para permitir mas opciones y automaticamente relanzar trabajos con errores
parent 926feb73
...@@ -28,11 +28,6 @@ void recv_sync_arrays(struct Dist_data dist_data, char *array, int root, int num ...@@ -28,11 +28,6 @@ void recv_sync_arrays(struct Dist_data dist_data, char *array, int root, int num
void send_async_arrays(struct Dist_data dist_data, char *array, int root, int numP_child, int idI, int idE, struct Counts counts, MPI_Request *comm_req); void send_async_arrays(struct Dist_data dist_data, char *array, int root, int numP_child, int idI, int idE, struct Counts counts, MPI_Request *comm_req);
void recv_async_arrays(struct Dist_data dist_data, char *array, int root, int numP_parents, int idI, int idE, struct Counts counts, MPI_Request *comm_req); void recv_async_arrays(struct Dist_data dist_data, char *array, int root, int numP_parents, int idI, int idE, struct Counts counts, MPI_Request *comm_req);
//TESTS
void send_async_arrays2(struct Dist_data dist_data, char *array, int rootBcast, int numP_child, int idI, int idE, struct Counts counts, MPI_Request **comm_req);
void recv_async_arrays2(struct Dist_data dist_data, char *array, int root, int numP_parents, int idI, int idE, struct Counts counts, MPI_Request **comm_req);
//
// DIST FUNCTIONS // DIST FUNCTIONS
void get_dist(int qty, int id, int numP, struct Dist_data *dist_data); void get_dist(int qty, int id, int numP, struct Dist_data *dist_data);
void set_counts(int id, int numP, struct Dist_data data_dist, int *sendcounts); void set_counts(int id, int numP, struct Dist_data data_dist, int *sendcounts);
......
#!/bin/bash
dir="/home/martini/malleability_benchmark/"
codeDir="Codes/"
execDir="Exec/"
ResultsDir="Results/"
ResultsDirName=$1
maxIndex=$2
cd $dir$ResultsDir
if [ ! -d $ResultsDirName ]
then
echo "La carpeta de resultados $ResultsDirName no existe. Abortando"
exit -1
fi
cd $ResultsDirName
#Comprobar si hay errores
#Si los hay, salir
grep -i -e fatal -e error -e abort -e == */slurm* > errores2.txt
qty=$(wc -l errores2.txt | cut -d ' ' -f1)
if [ $qty -gt 0 ]
then
echo "Se han encontrado errores de ejecución graves. Abortando"
exit -2
fi
rm errores2.txt
#Comprobar si hay runs con tiempo negativos
#Si los hay, reejecutar e informar de cuales son
grep - */R* | grep Tex > errores.txt
qty=$(wc -l errores.txt | cut -d ' ' -f1)
if [ $qty -gt 0 ]
then
echo "Se han encontrado errores de ejecución leves. Volviendo a ejecutar"
while IFS="" read -r line || [ -n "$line" ]
do
run=$(echo $line | cut -d '/' -f1 | cut -d 'n' -f2)
echo "Run $run"
index=$(($run + $maxIndex))
sbatch -N 2 $dir$execDir./singleRun.sh config$run.ini $index
done < errores.txt
fi
...@@ -2,8 +2,7 @@ Los archivos de esta carpeta son para ejecutar pruebas con todas las posibles co ...@@ -2,8 +2,7 @@ Los archivos de esta carpeta son para ejecutar pruebas con todas las posibles co
Se tienen tres ficheros en esta carpeta: 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 una sola prueba con un fichero de configuración. -- singleRun.sh: Para ejecutar pruebas con un fichero de configuración.
-- tripleRun.sh: Para ejecutar tres pruebas con un fichero de configuración. Mismos argumentos que singleRun.sh
-- 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:
...@@ -22,6 +21,7 @@ tiempo-iteracion: Indica la cantidad de segundos que deben pasar para que una it ...@@ -22,6 +21,7 @@ tiempo-iteracion: Indica la cantidad de segundos que deben pasar para que una it
proceso-tiempo: Ligado al valor "tiempo-iteracion". Indica con cuantos procesos se llega al tiempo por iteracion indicado. proceso-tiempo: Ligado al valor "tiempo-iteracion". Indica con cuantos procesos se llega al tiempo por iteracion indicado.
Si se elige el valor "tiempo-iteracion=2" y "proceso-tiempo=8", con 8 procesos se tardarán 2 segundos por iteración. Si se elige el valor "tiempo-iteracion=2" y "proceso-tiempo=8", con 8 procesos se tardarán 2 segundos por iteración.
Este valor se utiliza para modificar el tiempo según la cantidad de procesos. Siguiendo el ejemplo, si se pasasen a ejecutar 16 procesos, el tiempo por iteración sería de 1 segundo. Este valor se utiliza para modificar el tiempo según la cantidad de procesos. Siguiendo el ejemplo, si se pasasen a ejecutar 16 procesos, el tiempo por iteración sería de 1 segundo.
Si se utiliza el valor 0 para este argumento, todos los procesos tendran un factor=1 (Independiente del numero de procesos, cada iteracion costara "tiempo-iteracion").
iteraciones-por-grupo: Cantidad de iteraciones a realizar en cada grupo para que consideren terminada su ejecución. iteraciones-por-grupo: Cantidad de iteraciones a realizar en cada grupo para que consideren terminada su ejecución.
Actualmente todos los grupos de procesos realizan la misma cantidad de iteraciones. Actualmente todos los grupos de procesos realizan la misma cantidad de iteraciones.
...@@ -31,7 +31,12 @@ cantidad-nodos: Cantidad de nodos a utilizar en las ejecuciones. La cantidad de ...@@ -31,7 +31,12 @@ cantidad-nodos: Cantidad de nodos a utilizar en las ejecuciones. La cantidad de
-------------------------------- --------------------------------
Para ejecutar una sola prueba con un fichero de configuración se utiliza el siguiente comando: Para ejecutar una sola prueba con un fichero de configuración se utiliza el siguiente comando:
sbatch -N valor singleRun.sh configure.ini sbatch -N valor singleRun.sh configure.ini indiceSalida cantidadPruebas
- valor: Número de nodos a utilizar.
- configure.ini: Nombre del fichero de configuración.
- indiceSalida: Indice del fichero de salida. Si no se quiere usar, cualquier valor entero es válido.
- cantidadPruebas: Entero que idnca cuantas veces se ejecutarán las pruebas.
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.
......
...@@ -32,7 +32,7 @@ do ...@@ -32,7 +32,7 @@ do
for index in 1 2 3 for index in 1 2 3
do do
numP=$(bash $dir$codeDir/recordMachinefile.sh $config_file) # Crea el fichero hostfile numP=$(bash $dir$codeDir/recordMachinefile.sh $config_file) # Crea el fichero hostfile
mpirun -f hostfile.o$SLURM_JOB_ID -np $numP $dir$codeDir/a.out $config_file $i mpirun -f hostfile.o$SLURM_JOB_ID -np $numP $dir$codeDir/bench.out $config_file $i
rm hostfile.o$SLURM_JOB_ID rm hostfile.o$SLURM_JOB_ID
done done
done done
......
...@@ -42,6 +42,7 @@ sdr = sdr - adr ...@@ -42,6 +42,7 @@ sdr = sdr - adr
adr = str(adr) adr = str(adr)
sdr = str(sdr) sdr = str(sdr)
factor = 0
f = open(name, "w") f = open(name, "w")
general(f, str(resizes), matrix_tam, sdr, adr, aib, time) general(f, str(resizes), matrix_tam, sdr, adr, aib, time)
...@@ -50,7 +51,11 @@ for resize in range(resizes): ...@@ -50,7 +51,11 @@ for resize in range(resizes):
iters = sys.argv[9 + 3 * resize] iters = sys.argv[9 + 3 * resize]
procs = sys.argv[9 + 3 * resize + 1] procs = sys.argv[9 + 3 * resize + 1]
physical_dist = sys.argv[9 + 3 * resize + 2] physical_dist = sys.argv[9 + 3 * resize + 2]
factor = proc_time / float(procs)
if proc_time != 0: # Si el argumento proc_time es 0, todos los grupos tienen un factor de 1
factor = proc_time / float(procs)
else:
factor = 1
resize_section(f, str(resize), iters, procs, str(factor), physical_dist) resize_section(f, str(resize), iters, procs, str(factor), physical_dist)
......
...@@ -75,7 +75,6 @@ do ...@@ -75,7 +75,6 @@ do
done done
done done
aux=$(($j * 10)) #TODO Poner a 20 cuando se use ibarrier aux=$(($j * 10)) #TODO Poner a 20 cuando se use ibarrier
#bash $dir$execDir./arrayRun.sh $dir$ResultsDir$name_res $aux $procs_parents $procs_sons
# LANZAR SCRIPT # LANZAR SCRIPT
echo $aux echo $aux
sbatch -N $node_qty $dir$execDir./arrayRun.sh $dir$ResultsDir$name_res $aux $procs_parents $procs_sons sbatch -N $node_qty $dir$execDir./arrayRun.sh $dir$ResultsDir$name_res $aux $procs_parents $procs_sons
......
#!/bin/bash #!/bin/bash
#SBATCH --exclude=c01
dir="/home/martini/malleability_benchmark" dir="/home/martini/malleability_benchmark"
codeDir="/Codes" codeDir="/Codes"
ResultsDir="/Results" ResultsDir="/Results"
...@@ -7,8 +9,22 @@ ResultsDir="/Results" ...@@ -7,8 +9,22 @@ ResultsDir="/Results"
module load mpich-3.4.1-noucx module load mpich-3.4.1-noucx
echo "START TEST" echo "START TEST"
numP=$(bash $dir$codeDir/recordMachinefile.sh $1) #$1 == configFile
mpirun -f hostfile.o$SLURM_JOB_ID -np $numP $dir$codeDir/a.out $1 $2 #$2 == outFileIndex
rm hostfile.o$SLURM_JOB_ID #$3 == cantidad de ejecuciones
if [ $# -gt 2 ]
then
qty=$3
else
qty=1
fi
for ((i=0; i<qty; i++))
do
numP=$(bash $dir$codeDir/recordMachinefile.sh $1)
mpirun -f hostfile.o$SLURM_JOB_ID -np $numP $dir$codeDir/bench.out $1 $2
rm hostfile.o$SLURM_JOB_ID
done
echo "END TEST" echo "END TEST"
#!/bin/bash
dir="/home/martini/malleability_benchmark"
codeDir="/Codes"
ResultsDir="/Results"
module load mpich-3.4.1-noucx
echo "START TEST"
for index in 1 2 3
do
numP=$(bash $dir$codeDir/recordMachinefile.sh $1)
mpirun -f hostfile.o$SLURM_JOB_ID -np $numP $dir$codeDir/a.out $1 $2
rm hostfile.o$SLURM_JOB_ID
done
echo "END TEST"
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