Commit 197adfb1 authored by iker_martin's avatar iker_martin
Browse files

Modificado cantidades de procesos al ejecutar y otros cambios menores. Hay un...

Modificado cantidades de procesos al ejecutar y otros cambios menores. Hay un error en la comunicacion del computo con la asincrona
parent 3819a29c
...@@ -69,10 +69,14 @@ int main(int argc, char *argv[]) { ...@@ -69,10 +69,14 @@ int main(int argc, char *argv[]) {
int numP, myId, res; int numP, myId, res;
int req; int req;
MPI_Init_thread(&argc, &argv, MPI_THREAD_SINGLE, &req); MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &req);
MPI_Comm_size(MPI_COMM_WORLD, &numP); MPI_Comm_size(MPI_COMM_WORLD, &numP);
MPI_Comm_rank(MPI_COMM_WORLD, &myId); MPI_Comm_rank(MPI_COMM_WORLD, &myId);
if(req != MPI_THREAD_MULTIPLE) {
printf("No se ha obtenido la configuración de hilos necesaria\nSolicitada %d -- Devuelta %d\n", req, MPI_THREAD_MULTIPLE);
}
init_group_struct(argv, argc, myId, numP); init_group_struct(argv, argc, myId, numP);
MPI_Comm_get_parent(&(group->parents)); MPI_Comm_get_parent(&(group->parents));
......
...@@ -6,6 +6,6 @@ if [ $# -gt 0 ] ...@@ -6,6 +6,6 @@ if [ $# -gt 0 ]
then then
if [ $1 = "-e" ] if [ $1 = "-e" ]
then then
cp a.out benchm.out cp a.out bench.out
fi fi
fi fi
...@@ -76,4 +76,15 @@ then ...@@ -76,4 +76,15 @@ then
cd $dir$ResultsDir$ResultsDirName cd $dir$ResultsDir$ResultsDirName
done < errores.txt done < errores.txt
exit 0
fi
qtyG=$(ls R*/R*_Global.out | wc -l)
qtyG=$(($qtyG * 2))
qtyL=$(ls R*/R*_G?N*.out | wc -l)
if [ $qtyG == $qtyL ]
then
echo "Ejecucciones correctas"
else # TODO Expandir indicando cuales
echo "Faltan ejecuciones Locales o globales"
fi fi
Los archivos de esta carpeta son para ejecutar pruebas con todas las posibles configuraciones. Los archivos de esta carpeta son para ejecutar pruebas con todas las posibles configuraciones.
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 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. -- 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
-- runSpawn.sh: Para ejecutar una serie de pruebas dedicadas a la creacion de procesos.
-- arraySpawnRun.sh: Script para ejecutar por slurm las pruebas. Es llamado por runSpawn.sh
Para que la mayoria de estos scripts funcionen correctamente es necesario compilar el código
en la carpeta "Codes". Ejecutar dentro de esa carpeta lo siguiente: "./compila -e"
-------------------------------- --------------------------------
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
...@@ -16,6 +22,8 @@ grupos-hijos: Es la cantidad de grupos hijos de procesos a ejecutar. Por tanto, ...@@ -16,6 +22,8 @@ grupos-hijos: Es la cantidad de grupos hijos de procesos a ejecutar. Por tanto,
tamaño-matriz: Cantidad de filas en la matriz rectangular. Esta matriz se utiliza para realizar el computo de la aplicación. tamaño-matriz: Cantidad de filas en la matriz rectangular. Esta matriz se utiliza para realizar el computo de la aplicación.
tamaño-comunicacion: Numero de bytes a comunicar en la aplicacion cuando se realiza computo.
cantidad-datos-sincronos: Indica la cantidad de bytes que se tienen que transmitir desde un grupo de procesos a otro en una redimensió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. tiempo-iteracion: Indica la cantidad de segundos que deben pasar para que una iteración se considere terminada.
...@@ -28,8 +36,13 @@ proceso-tiempo: Ligado al valor "tiempo-iteracion". Indica con cuantos procesos ...@@ -28,8 +36,13 @@ proceso-tiempo: Ligado al valor "tiempo-iteracion". Indica con cuantos procesos
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.
primera-iter: Indica si el primer grupo de procesos sigue el valor en "iteraciones-por-grupo" (0), o realiza el numero indicado en este argumento antes de realizar la redistribucion (>=1).
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 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. 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.
EJEMPLO:
bash run.sh 1 100000 10000000 1000000000 2 2 10 1 2
-------------------------------- --------------------------------
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:
......
#!/bin/bash
#SBATCH --exclude=n[06-07],c01
dir="/home/martini/malleability_benchmark"
codeDir="/Codes"
ResultsDir="/Results"
module load mpich-3.4.1-noucx
name_dir=$1
i=$2
procs_parents=$3
procs_sons=$4
aux=$(($i + 1))
echo "START TEST init=$aux"
for phy_dist in cpu node
do
i=$(($i + 1))
cd $name_dir/Run$i
config_file="config$i.ini"
echo "EXEC $procs_parents -- $procs_sons -- $phy_dist -- RUN $i"
for index in 1 2 3
do
numP=$(bash $dir$codeDir/recordMachinefile.sh $config_file) # Crea el fichero hostfile
mpirun -f hostfile.o$SLURM_JOB_ID -np $numP $dir$codeDir/bench.out $config_file $i
rm hostfile.o$SLURM_JOB_ID
done
done
echo "END TEST"
...@@ -6,6 +6,15 @@ execDir="Exec/" ...@@ -6,6 +6,15 @@ execDir="Exec/"
ResultsDir="Results/" ResultsDir="Results/"
#TODO Añadir diferenciar phy_dist de padres e hijos al ejecutar #TODO Añadir diferenciar phy_dist de padres e hijos al ejecutar
#TODO Añadir que se considere la cantidad de nucleos de un nodo y no este fijada
if [[ $# -lt 9 ]]
then
echo "Faltan argumentos"
echo "bash run.sh grupos tam_computo tam_comm tam_resize tiempo proc_init iters first_iter node_qty"
exit -1
fi
echo "START TEST" echo "START TEST"
groups=$1 #TODO Modificar para que admita más de dos grupos de procesos groups=$1 #TODO Modificar para que admita más de dos grupos de procesos
...@@ -15,27 +24,37 @@ N_qty=$4 # Datos a redistribuir ...@@ -15,27 +24,37 @@ N_qty=$4 # Datos a redistribuir
time=$5 time=$5
proc_init=$6 #El tiempo por iteracion es para esta cantidad de procesos proc_init=$6 #El tiempo por iteracion es para esta cantidad de procesos
iters=$7 iters=$7
node_qty=$8 first_iter=$8
node_qty=$9
# Si el valor es 0 el primer grupo de procesos realiza $iters iteraciones antes de redimensionar
if [[ $first_iter -eq 0 ]]
then
iters_first_group=$iters
# Si el valor es diferente a 0, el primer grupo de procesos realiza $first_iter iteraciones antes de redimensionar
else
iters_first_group=$first_iter
fi
max_procs=$(($node_qty * 20)) max_procs=$(($node_qty * 20))
procs_array=() procs_array=(2 10)
percs_array=(0 25 50 75 100) percs_array=(0 25 50 75 100)
i=1
value=$((2 ** $i))
procs_array=(${procs_array[@]} $value)
#Obtener cantidades de procesos posibles a ejecutar #Obtener cantidades de procesos posibles a ejecutar
while [[ $value -le $max_procs ]] i=0
while [[ $value -lt $max_procs ]]
do do
i=$(($i + 1)) i=$(($i + 1))
value=$((2 ** $i)) value=$((20 * $i))
procs_array=(${procs_array[@]} $value) procs_array=(${procs_array[@]} $value)
done done
unset procs_array[-1]
#Crear carpeta de resultados #Crear carpeta de resultados
cd $dir$ResultsDir cd $dir$ResultsDir
name_res=$node_qty"N-"$(date '+%m-%d') name_res=$node_qty"N-"$(date '+%m-%d')
if [ -d $name_res ] # Si ya existe el directorio, modificar levemente el nombre y crear otro
then
name_res=$name_res"-"$(date '+%H:%M')
fi
echo "Localizacion de los resultados: $dir$ResultsDir$name_res" echo "Localizacion de los resultados: $dir$ResultsDir$name_res"
mkdir $name_res mkdir $name_res
...@@ -46,42 +65,37 @@ for procs_parents in "${procs_array[@]}" ...@@ -46,42 +65,37 @@ for procs_parents in "${procs_array[@]}"
do do
for procs_sons in "${procs_array[@]}" for procs_sons in "${procs_array[@]}"
do do
if [ $procs_sons -ne $procs_parents ] for adr_perc in "${percs_array[@]}"
then do
for adr_perc in "${percs_array[@]}" for phy_dist in cpu node
do do
for phy_dist in cpu node for ibarrier_use in 0 #TODO Poner a 0 1
do do
i=$(($i + 1))
for ibarrier_use in 0 #TODO Poner a 0 1 # Crear directorio para esta ejecucion
do cd $dir$ResultsDir$name_res
i=$(($i + 1)) mkdir Run$i
cd Run$i
# Crear directorio para esta ejecucion # Crear archivo de configuracion
cd $dir$ResultsDir$name_res echo "Config $procs_parents -- $procs_sons -- $adr_perc -- $ibarrier_use -- $phy_dist -- RUN $i"
mkdir Run$i array0=($iters_first_group $procs_parents $phy_dist)
cd Run$i array=("${array0[@]}")
array0=($iters $procs_sons $phy_dist)
array+=("${array0[@]}")
python3 $dir$execDir/./create_ini.py config$i.ini 1 $matrix_tam $comm_tam $N_qty $adr_perc $ibarrier_use $time $proc_init "${array[@]}"
# Crear archivo de configuracion
echo "Config $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 $comm_tam $N_qty $adr_perc $ibarrier_use $time $proc_init "${array[@]}"
done
done done
done done
aux=$(($j * 10)) #TODO Poner a 20 cuando se use ibarrier done
# LANZAR SCRIPT aux=$(($j * 10)) #TODO Poner a 20 cuando se use ibarrier
echo $aux # LANZAR SCRIPT
sbatch -N $node_qty $dir$execDir./arrayRun.sh $dir$ResultsDir$name_res $aux $procs_parents $procs_sons echo $aux
j=$(($j + 1)) sbatch -N $node_qty $dir$execDir./arrayRun.sh $dir$ResultsDir$name_res $aux $procs_parents $procs_sons
j=$(($j + 1))
fi
done done
done done
......
#!/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=100000
comm_tam=0
N_qty=0 # Datos a redistribuir
time=0.5
proc_init=2 #El tiempo por iteracion es para esta cantidad de procesos
iters=100
node_qty=$2
max_procs=$(($node_qty * 20))
procs_array=(2 10)
#Obtener cantidades de procesos posibles a ejecutar
i=0
while [[ $value -lt $max_procs ]]
do
i=$(($i + 1))
value=$((20 * $i))
procs_array=(${procs_array[@]} $value)
done
#Crear carpeta de resultados
cd $dir$ResultsDir
name_res="S-"$node_qty"N-"$(date '+%m-%d')
if [ -d $name_res ] # Si ya existe el directorio, modificar levemente el nombre y crear otro
then
name_res=$name_res"-"$(date '+%H:%M')
fi
echo "Localizacion de los resultados: $dir$ResultsDir$name_res"
mkdir $name_res
# Ejecutar pruebas
i=0
j=0
for procs_parents in "${procs_array[@]}"
do
for procs_sons in "${procs_array[@]}"
do
for phy_dist in cpu node
do
i=$(($i + 1))
# Crear directorio para esta ejecucion
cd $dir$ResultsDir$name_res
mkdir Run$i
cd Run$i
# Crear archivo de configuracion
echo "Config $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 $comm_tam $N_qty $adr_perc $ibarrier_use $time $proc_init "${array[@]}"
done
aux=$(($j * 10))
# LANZAR SCRIPT
echo $aux
sbatch -N $node_qty $dir$execDir./arraySpawnRun.sh $dir$ResultsDir$name_res $aux $procs_parents $procs_sons
j=$(($j + 1))
done
done
...@@ -22,6 +22,7 @@ fi ...@@ -22,6 +22,7 @@ fi
for ((i=0; i<qty; i++)) for ((i=0; i<qty; i++))
do do
echo "Iter $i"
numP=$(bash $dir$codeDir/recordMachinefile.sh $1) numP=$(bash $dir$codeDir/recordMachinefile.sh $1)
mpirun -f hostfile.o$SLURM_JOB_ID -np $numP $dir$codeDir/bench.out $1 $2 mpirun -f hostfile.o$SLURM_JOB_ID -np $numP $dir$codeDir/bench.out $1 $2
rm hostfile.o$SLURM_JOB_ID rm hostfile.o$SLURM_JOB_ID
......
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