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
5e73e8ba
Commit
5e73e8ba
authored
Jul 12, 2021
by
iker_martin
Browse files
Arreglado error de memoria en los vectores de resultados de iteraciones
parent
a49aea25
Changes
4
Hide whitespace changes
Inline
Side-by-side
Codes/IOcodes/results.c
View file @
5e73e8ba
...
...
@@ -108,7 +108,7 @@ void print_iter_results(results_data *results, int last_normal_iter_index) {
printf
(
"%d "
,
results
->
iters_type
[
i
]
==
0
);
}
printf
(
"
\n
Top: "
);
//
FIXME
modificar a imprimir solo cuantas operaciones cuestan una iteracion
printf
(
"
\n
Top: "
);
//
TODO
modificar a imprimir solo cuantas operaciones cuestan una iteracion
?
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
];
printf
(
"%d "
,
aux
);
...
...
@@ -161,11 +161,28 @@ void init_results_data(results_data **results, int resizes, int iters_size) {
(
*
results
)
->
sync_time
=
calloc
(
resizes
,
sizeof
(
double
));
(
*
results
)
->
async_time
=
calloc
(
resizes
,
sizeof
(
double
));
(
*
results
)
->
iters_time
=
calloc
(
iters_size
*
20
+
100
,
sizeof
(
double
));
//FIXME Numero magico - Añadir funcion que amplie tamaño
(
*
results
)
->
iters_type
=
calloc
(
iters_size
*
20
+
100
,
sizeof
(
int
));
(
*
results
)
->
iters_size
=
iters_size
+
100
;
(
*
results
)
->
iters_time
=
calloc
(
iters_size
+
100
,
sizeof
(
double
));
//FIXME Numero magico - Añadir funcion que amplie tamaño
(
*
results
)
->
iters_type
=
calloc
(
iters_size
+
100
,
sizeof
(
int
));
(
*
results
)
->
iter_index
=
0
;
}
void
realloc_results_iters
(
results_data
*
results
,
int
needed
)
{
double
*
time_aux
;
int
*
type_aux
;
time_aux
=
(
double
*
)
realloc
(
results
->
iters_time
,
needed
*
sizeof
(
double
));
type_aux
=
(
int
*
)
realloc
(
results
->
iters_type
,
needed
*
sizeof
(
int
));
if
(
time_aux
==
NULL
||
type_aux
==
NULL
)
{
fprintf
(
stderr
,
"No se ha podido realojar la memoria de resultados
\n
"
);
MPI_Abort
(
MPI_COMM_WORLD
,
1
);
}
results
->
iters_time
=
time_aux
;
results
->
iters_type
=
type_aux
;
}
/*
* Libera toda la memoria asociada con una estructura de resultados.
*/
...
...
Codes/IOcodes/results.h
View file @
5e73e8ba
...
...
@@ -5,7 +5,7 @@
typedef
struct
{
// Iters data
double
*
iters_time
;
int
*
iters_type
,
iter_index
;
int
*
iters_type
,
iter_index
,
iters_size
;
// Spawn, Sync and Async time
double
spawn_start
,
*
spawn_time
;
...
...
@@ -21,4 +21,5 @@ void recv_results(results_data *results, int root, int resizes, MPI_Comm interco
void
print_iter_results
(
results_data
*
results
,
int
last_normal_iter_index
);
void
print_global_results
(
results_data
*
results
,
int
resizes
);
void
init_results_data
(
results_data
**
results
,
int
resizes
,
int
iters_size
);
void
realloc_results_iters
(
results_data
*
results
,
int
needed
);
void
free_results_data
(
results_data
**
results
);
Codes/Main/Main.c
View file @
5e73e8ba
...
...
@@ -438,9 +438,14 @@ void iterate(double *matrix, int n, int async_comm) {
operations
=
0
;
}
if
(
results
->
iter_index
==
results
->
iters_size
)
{
// Aumentar tamaño de ambos vectores de resultados
realloc_results_iters
(
results
,
results
->
iters_size
+
100
);
}
results
->
iters_time
[
results
->
iter_index
]
=
actual_time
-
start_time
;
results
->
iters_type
[
results
->
iter_index
]
=
operations
;
results
->
iter_index
=
results
->
iter_index
+
1
;
}
//======================================================||
...
...
@@ -556,15 +561,15 @@ void init_application() {
*/
void
obtain_op_times
()
{
double
result
,
start_time
=
MPI_Wtime
();
int
i
;
int
i
,
qty
=
20000
;
result
=
0
;
for
(
i
=
0
;
i
<
20000
;
i
++
)
{
for
(
i
=
0
;
i
<
qty
;
i
++
)
{
result
+=
computePiSerial
(
config_file
->
matrix_tam
);
}
printf
(
"Creado Top con valor %lf
\n
"
,
result
);
fflush
(
stdout
);
config_file
->
Top
=
(
MPI_Wtime
()
-
start_time
)
/
20000
;
//Tiempo de una operacion
config_file
->
Top
=
(
MPI_Wtime
()
-
start_time
)
/
qty
;
//Tiempo de una operacion
MPI_Bcast
(
&
(
config_file
->
Top
),
1
,
MPI_DOUBLE
,
ROOT
,
MPI_COMM_WORLD
);
}
...
...
Codes/test.ini
View file @
5e73e8ba
[general]
resizes
=
1 ; Numero de redistribuciones
matrix_tam
=
1000 ; Tamaño en bytes de la matriz de computo
SDR
=
100 ; Tamaño en bytes a redistribuir de forma sincrona
ADR
=
100 ; Tamaño en bytes a redistribuir de forma asincrona 1000000000
AIB
=
0 ; Indica si las redistribuciones asíncronas se consideran terminadas para los padres
comm_tam
=
10000000 ; Tamaño en bytes de los datos a comunicar en cada iteracion. Una sola vez
SDR
=
1000 ; Tamaño en bytes a redistribuir de forma sincrona
ADR
=
1000 ; Tamaño en bytes a redistribuir de forma asincrona 1000000000
AIB
=
3 ; Indica si las redistribuciones asíncronas se consideran terminadas para los padres
; cuando terminan de enviar (0) o cuando terminan de recibir los valores (1)
time
=
1 ; Tiempo necesario para realizar una iteracion
[resize0]
; Grupo inicial(mpirun)
iters
=
1
0
; Numero de iteraciones a realizar por este grupo
iters
=
1 ; Numero de iteraciones a realizar por este grupo
procs
=
2 ; Cantidad de procesos en el grupo
factor
=
1 ; Factor de coste
physical_dist
=
cpu
; Tipo de redistribución física de los procesos
physical_dist
=
node
; Tipo de redistribución física de los procesos
;end [resize0]
[resize1]
; Grupo de hijos 1
iters
=
20
procs
=
4
factor
=
0.5
physical_dist
=
cpu
physical_dist
=
node
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