Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Iker Martín Álvarez
Proteo
Commits
2663ec23
Commit
2663ec23
authored
Jul 06, 2021
by
iker_martin
Browse files
Anadido nuevo script para comprobar resultados. Otros cambios menores
parent
79f5835d
Changes
7
Hide whitespace changes
Inline
Side-by-side
Codes/IOcodes/results.c
View file @
2663ec23
...
@@ -103,12 +103,12 @@ void print_iter_results(results_data *results, int last_normal_iter_index) {
...
@@ -103,12 +103,12 @@ void print_iter_results(results_data *results, int last_normal_iter_index) {
printf
(
"%lf "
,
results
->
iters_time
[
i
]);
printf
(
"%lf "
,
results
->
iters_time
[
i
]);
}
}
printf
(
"
\n
Ttype: "
);
printf
(
"
\n
Ttype: "
);
//FIXME modificar a imprimir solo la cantidad de asincronas
for
(
i
=
0
;
i
<
results
->
iter_index
;
i
++
)
{
for
(
i
=
0
;
i
<
results
->
iter_index
;
i
++
)
{
printf
(
"%d "
,
results
->
iters_type
[
i
]
==
0
);
printf
(
"%d "
,
results
->
iters_type
[
i
]
==
0
);
}
}
printf
(
"
\n
Top: "
);
printf
(
"
\n
Top: "
);
//FIXME modificar a imprimir solo cuantas operaciones cuestan una iteracion
for
(
i
=
0
;
i
<
results
->
iter_index
;
i
++
)
{
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
];
aux
=
results
->
iters_type
[
i
]
==
0
?
results
->
iters_type
[
last_normal_iter_index
]
:
results
->
iters_type
[
i
];
printf
(
"%d "
,
aux
);
printf
(
"%d "
,
aux
);
...
...
Codes/Main/Main.c
View file @
2663ec23
...
@@ -4,6 +4,7 @@
...
@@ -4,6 +4,7 @@
#include <fcntl.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/stat.h>
#include <pthread.h>
#include <pthread.h>
#include "computing_func.h"
#include "../IOcodes/read_ini.h"
#include "../IOcodes/read_ini.h"
#include "../IOcodes/results.h"
#include "../IOcodes/results.h"
#include "../malleability/ProcessDist.h"
#include "../malleability/ProcessDist.h"
...
@@ -25,9 +26,6 @@ int thread_check();
...
@@ -25,9 +26,6 @@ int thread_check();
void
*
thread_async_work
(
void
*
void_arg
);
void
*
thread_async_work
(
void
*
void_arg
);
void
iterate
(
double
*
matrix
,
int
n
,
int
async_comm
);
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_group_struct
(
char
*
argv
[],
int
argc
,
int
myId
,
int
numP
);
void
init_application
();
void
init_application
();
...
@@ -420,58 +418,6 @@ void iterate(double *matrix, int n, int async_comm) {
...
@@ -420,58 +418,6 @@ void iterate(double *matrix, int n, int async_comm) {
results
->
iter_index
=
results
->
iter_index
+
1
;
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================||
//=============INIT/FREE/PRINT FUNCTIONS================||
...
@@ -584,7 +530,7 @@ void init_application() {
...
@@ -584,7 +530,7 @@ void init_application() {
printf
(
"Creado Top con valor %lf
\n
"
,
result
);
printf
(
"Creado Top con valor %lf
\n
"
,
result
);
fflush
(
stdout
);
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
);
MPI_Bcast
(
&
(
config_file
->
Top
),
1
,
MPI_DOUBLE
,
ROOT
,
MPI_COMM_WORLD
);
}
}
...
...
Codes/Main/computing_func.c
0 → 100644
View file @
2663ec23
#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
;
}
}
}
}
Codes/Main/computing_func.h
0 → 100644
View file @
2663ec23
double
computeMatrix
(
double
*
matrix
,
int
n
);
double
computePiSerial
(
int
n
);
void
initMatrix
(
double
**
matrix
,
int
n
);
Codes/compila.sh
View file @
2663ec23
module load mpich-3.4.1-noucx
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
Exec/CheckRun.sh
View file @
2663ec23
...
@@ -7,6 +7,7 @@ ResultsDir="Results/"
...
@@ -7,6 +7,7 @@ ResultsDir="Results/"
ResultsDirName
=
$1
ResultsDirName
=
$1
maxIndex
=
$2
maxIndex
=
$2
cantidadGrupos
=
$3
#Contando a los padres
cd
$dir$ResultsDir
cd
$dir$ResultsDir
if
[
!
-d
$ResultsDirName
]
if
[
!
-d
$ResultsDirName
]
...
@@ -36,11 +37,43 @@ if [ $qty -gt 0 ]
...
@@ -36,11 +37,43 @@ if [ $qty -gt 0 ]
then
then
echo
"Se han encontrado errores de ejecución leves. Volviendo a ejecutar"
echo
"Se han encontrado errores de ejecución leves. Volviendo a ejecutar"
while
IFS
=
""
read
-r
line
||
[
-n
"
$line
"
]
while
IFS
=
""
read
-r
line
Run
||
[
-n
"
$line
Run
"
]
do
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
"
echo
"Run
$run
"
index
=
$((
$run
+
$maxIndex
))
cd
Run
$realRun
sbatch
-N
2
$dir$execDir
./singleRun.sh config
$run
.ini
$index
#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
done
< errores.txt
fi
fi
Exec/README.md
View file @
2663ec23
...
@@ -3,8 +3,10 @@ Se tienen tres ficheros en esta carpeta:
...
@@ -3,8 +3,10 @@ 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 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.
-- 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:
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
Este script crea subcarpetas en "Results" donde almacena los resultados y los ficheros de configuración que crea.
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
...
@@ -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.
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.
En la carpeta Codes/ se tiene un archivo de configuración de ejemplo llamado "test.ini".
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
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment