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[]) {
int numP, myId, res;
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_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);
MPI_Comm_get_parent(&(group->parents));
......
......@@ -6,6 +6,6 @@ if [ $# -gt 0 ]
then
if [ $1 = "-e" ]
then
cp a.out benchm.out
cp a.out bench.out
fi
fi
......@@ -76,4 +76,15 @@ then
cd $dir$ResultsDir$ResultsDirName
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
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.
-- 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.
-- 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
-- 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:
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,
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
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
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.
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
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:
......
#!/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/"
ResultsDir="Results/"
#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"
groups=$1 #TODO Modificar para que admita más de dos grupos de procesos
......@@ -15,27 +24,37 @@ N_qty=$4 # Datos a redistribuir
time=$5
proc_init=$6 #El tiempo por iteracion es para esta cantidad de procesos
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))
procs_array=()
procs_array=(2 10)
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 ]]
i=0
while [[ $value -lt $max_procs ]]
do
i=$(($i + 1))
value=$((2 ** $i))
value=$((20 * $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')
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
......@@ -46,42 +65,37 @@ 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 adr_perc in "${percs_array[@]}"
for phy_dist in cpu node
do
for phy_dist in cpu node
for ibarrier_use in 0 #TODO Poner a 0 1
do
i=$(($i + 1))
for ibarrier_use in 0 #TODO Poner a 0 1
do
i=$(($i + 1))
# Crear directorio para esta ejecucion
cd $dir$ResultsDir$name_res
mkdir Run$i
cd Run$i
# 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_first_group $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[@]}"
# 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
aux=$(($j * 10)) #TODO Poner a 20 cuando se use ibarrier
# LANZAR SCRIPT
echo $aux
sbatch -N $node_qty $dir$execDir./arrayRun.sh $dir$ResultsDir$name_res $aux $procs_parents $procs_sons
j=$(($j + 1))
fi
done
aux=$(($j * 10)) #TODO Poner a 20 cuando se use ibarrier
# LANZAR SCRIPT
echo $aux
sbatch -N $node_qty $dir$execDir./arrayRun.sh $dir$ResultsDir$name_res $aux $procs_parents $procs_sons
j=$(($j + 1))
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
for ((i=0; i<qty; i++))
do
echo "Iter $i"
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
......
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