Commit b51ca918 authored by iker_martin's avatar iker_martin
Browse files

Anadidos archivos para la ejecucion de pruebas

parent ed0b0390
Los archivos de esta carpeta son para ejecutar pruebas con todas las posibles configuraciones.
Se tienen tres ficheros en esta carpeta:
-- run.sh: Para ejecutar una serie de pruebas.
-- runResults.sh: Para ejecutar tres pruebas con un fichero de configuración.
-- singleRun.sh: Para ejecutar una sola prueba con un fichero de configuración.
-- 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.
grupos-hijos: Es la cantidad de grupos hijos de procesos a ejecutar. Por tanto, el valor 1 indicaría el grupo de procesos padres y un grupo de procesos hijos.
Actualmente solo funciona con el valor |1|
tamaño-matriz: Cantidad de filas en la matriz rectangular. Esta matriz se utiliza para realizar el computo de la aplicación.
cantidad-datos-sincronos: Indica la cantidad de bytes que se tienen que transmitir desde un grupo de procesos a otro en una redimensión
tiempo-iteracion: Indica la cantidad de segundos que deben pasar para que una iteración se considere terminada.
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.
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.
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.
cantidad-nodos: Cantidad de nodos a utilizar en las ejecuciones. La cantidad de nodos también influye en la cantidad de procesos por grupo, donde nunca habrá más procesos en un grupo
que núcleos entre todos los nodos. Si se elige el valor 2 y habiendo 20 núcleos por nodo, no se realizarán pruebas con más de 40 procesos por grupo.
--------------------------------
Para ejecutar una sola prueba con un fichero de configuración se utiliza el siguiente comando:
sbatch -N valor singleRun.sh configure.ini
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".
import sys
import glob
def general(f, resizes, matrix_tam, sdr, adr, aib, time):
f.write("[general]\n")
f.write("resizes=" + resizes +"\n")
f.write("matrix_tam=" + matrix_tam +"\n")
f.write("SDR=" + sdr +"\n")
f.write("ADR=" + adr +"\n")
f.write("AIB=" + aib +"\n")
f.write("time=" + time +"\n")
f.write("; end [general]\n")
def resize_section(f, resize, iters, procs, factor, physical_dist):
f.write("[resize" + resize + "]\n")
f.write("iters=" + iters +"\n")
f.write("procs=" + procs +"\n")
f.write("factor=" + factor +"\n")
f.write("physical_dist=" + physical_dist +"\n")
f.write(";end [resize" + resize +"]\n")
if len(sys.argv) < 2:
print("The config file name is missing\nUsage: python3 program nameFile args\nArgs: resizes matrix_tam SDR ADR AIB time iters0 procs0 dist0 iters1 procs1 dist1 ...")
exit(1)
if len(sys.argv) < 12:
print("The are not enough arguments\nUsage: python3 program nameFile args\nArgs: resizes matrix_tam SDR ADR_perc AIB time proc_time iters0 procs0 dist0 iters1 procs1 dist1 ...")
exit(1)
name = sys.argv[1]
resizes = int(sys.argv[2])
matrix_tam = sys.argv[3]
sdr = int(sys.argv[4])
adr_perc = float(sys.argv[5])
aib = sys.argv[6]
time = sys.argv[7]
proc_time = float(sys.argv[8]) # Usado para calcular el factor de cada proceso
adr = (sdr * adr_perc) / 100
sdr = sdr - adr
adr = str(adr)
sdr = str(sdr)
f = open(name, "w")
general(f, str(resizes), matrix_tam, sdr, adr, aib, time)
resizes = resizes + 1 # Internamente, los primeros procesos se muestran como un grupo
for resize in range(resizes):
iters = sys.argv[9 + 3 * resize]
procs = sys.argv[9 + 3 * resize + 1]
physical_dist = sys.argv[9 + 3 * resize + 2]
factor = proc_time / float(procs)
resize_section(f, str(resize), iters, procs, str(factor), physical_dist)
f.close()
exit(1)
#!/bin/bash
dir="/home/martini/malleability_benchmark/"
codeDir="Codes/"
execDir="Exec/"
ResultsDir="Results/"
#TODO Añadir diferenciar phy_dist de padres e hijos al ejecutar
echo "START TEST"
groups=$1 #TODO Modificar para que admita más de dos grupos de procesos
matrix_tam=$2
N_qty=$3
time=$4
proc_init=$5 #El tiempo por iteracion es para esta cantidad de procesos
iters=$6
node_qty=$7
max_procs=$(($node_qty * 20))
procs_array=()
percs_array=(0 25 50 75 100)
i=1
value=$((2 ** $i))
procs_array=(${procs_array[@]} $value)
#Obtener cantidades de procesos posibles a ejecutar
while [[ $value -le $max_procs ]]
do
i=$(($i + 1))
value=$((2 ** $i))
procs_array=(${procs_array[@]} $value)
done
unset procs_array[-1]
#Crear carpeta de resultados
cd $dir$ResultsDir
name_res=$node_qty"N-"$(date '+%m-%d')
echo "Localizacion de los resultados: $dir$ResultsDir$name_res"
mkdir $name_res
# Ejecutar pruebas
i=0
for procs_parents in "${procs_array[@]}"
do
for procs_sons in "${procs_array[@]}"
do
if [ $procs_sons -ne $procs_parents ]
then
for adr_perc in "${percs_array[@]}"
do
for phy_dist in cpu node
do
for ibarrier_use in 0 #TODO Poner a 0 1
do
i=$(($i + 1))
# Crear directorio para esta ejecucion
cd $dir$ResultsDir$name_res
name_run="Run$i"
mkdir Run$i
cd Run$i
# Crear archivo de configuracion
echo "$procs_parents -- $procs_sons -- $adr_perc -- $ibarrier_use -- $phy_dist -- RUN $i"
array0=($iters $procs_parents $phy_dist)
array=("${array0[@]}")
array0=($iters $procs_sons $phy_dist)
array+=("${array0[@]}")
python3 $dir$execDir/./create_ini.py config$i.ini 1 $matrix_tam $N_qty $adr_perc $ibarrier_use $time $proc_init "${array[@]}"
# LANZAR SCRIPT
sbatch -N $node_qty $dir$execDir./runResults.sh config$i.ini $i
done
done
done
fi
done
done
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"
#!/bin/bash
dir="/home/martini/malleability_benchmark"
codeDir="/Codes"
ResultsDir="/Results"
module load mpich-3.4.1-noucx
echo "START TEST"
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
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