Skip to content

Commit cdc8984

Browse files
committed
update: use the new parsec dtd api to allocate initialize and free arena_datatypes in a consistent order (ICLDisco/parsec#623)
1 parent 36d60da commit cdc8984

File tree

7 files changed

+43
-27
lines changed

7 files changed

+43
-27
lines changed

src/utils/dplasma_arena_datatype.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,8 +227,10 @@ int dplasma_cleanup_datatype( parsec_datatype_t *dtt )
227227
#ifdef REUSE_ARENA_DATATYPE
228228
/* The key of a datatype can only be constructed with the arguments used during creation.
229229
* Thus, datatypes will be cleaned during callback during parsec context at fini.
230+
* Set the pointer to PARSEC_DATATYPE_NULL (so that adt_destruct doesn't complain) but
231+
* the actual datatype shall remain as it is still referenced from the hashtable.
230232
*/
231-
(void)dtt;
233+
*dtt = PARSEC_DATATYPE_NULL;
232234
return 0;
233235
#else
234236
return parsec_type_free( dtt );

tests/testing_zgemm_dtd.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,13 @@ int main(int argc, char ** argv)
9393
parsec_taskpool_t *dtd_tp = parsec_dtd_taskpool_new();
9494

9595
/* Default type */
96-
parsec_arena_datatype_t *tile_full = parsec_dtd_create_arena_datatype(parsec, &TILE_FULL);
96+
97+
parsec_arena_datatype_t *tile_full = PARSEC_OBJ_NEW(parsec_arena_datatype_t);
9798
dplasma_add2arena_tile( tile_full,
9899
dcA.super.mb*dcA.super.nb*sizeof(dplasma_complex64_t),
99100
PARSEC_ARENA_ALIGNMENT_SSE,
100101
parsec_datatype_double_complex_t, dcA.super.mb );
102+
parsec_dtd_attach_arena_datatype(parsec, tile_full, &TILE_FULL);
101103

102104
/* matrix generation */
103105
if(loud > 2) printf("+++ Generate matrices ... ");
@@ -261,7 +263,7 @@ int main(int argc, char ** argv)
261263

262264
/* Cleaning data arrays we allocated for communication */
263265
dplasma_matrix_del2arena( tile_full );
264-
parsec_dtd_destroy_arena_datatype(parsec, TILE_FULL);
266+
parsec_dtd_free_arena_datatype(parsec, TILE_FULL);
265267
parsec_dtd_data_collection_fini( (parsec_data_collection_t *)&dcA );
266268

267269
parsec_data_free(dcA.mat);
@@ -321,11 +323,12 @@ int main(int argc, char ** argv)
321323

322324
/* Allocating data arrays to be used by comm engine */
323325
/* Default type */
324-
parsec_arena_datatype_t *tile_full = parsec_dtd_create_arena_datatype(parsec, &TILE_FULL);
326+
parsec_arena_datatype_t *tile_full = PARSEC_OBJ_NEW(parsec_arena_datatype_t);
325327
dplasma_add2arena_tile( tile_full,
326328
dcA.super.mb*dcA.super.nb*sizeof(dplasma_complex64_t),
327329
PARSEC_ARENA_ALIGNMENT_SSE,
328330
parsec_datatype_double_complex_t, dcA.super.mb );
331+
parsec_dtd_attach_arena_datatype(parsec, tile_full, &TILE_FULL);
329332

330333
dplasma_zplrnt( parsec, 0, (parsec_tiled_matrix_t *)&dcA, Aseed);
331334
dplasma_zplrnt( parsec, 0, (parsec_tiled_matrix_t *)&dcB, Bseed);
@@ -505,7 +508,7 @@ int main(int argc, char ** argv)
505508

506509
/* Cleaning data arrays we allocated for communication */
507510
dplasma_matrix_del2arena( tile_full );
508-
parsec_dtd_destroy_arena_datatype(parsec, TILE_FULL);
511+
parsec_dtd_free_arena_datatype(parsec, TILE_FULL);
509512
parsec_dtd_data_collection_fini( (parsec_data_collection_t *)&dcA );
510513

511514
parsec_data_free(dcA.mat);

tests/testing_zgeqrf_dtd.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -218,17 +218,19 @@ int main(int argc, char **argv)
218218

219219
/* Allocating data arrays to be used by comm engine */
220220
/* Default type */
221-
parsec_arena_datatype_t *tile_full = parsec_dtd_create_arena_datatype(parsec, &TILE_FULL);
221+
parsec_arena_datatype_t *tile_full = PARSEC_OBJ_NEW(parsec_arena_datatype_t);
222222
dplasma_add2arena_tile( tile_full,
223223
dcA.super.mb*dcA.super.nb*sizeof(dplasma_complex64_t),
224224
PARSEC_ARENA_ALIGNMENT_SSE,
225225
parsec_datatype_double_complex_t, dcA.super.mb );
226+
parsec_dtd_attach_arena_datatype(parsec, tile_full, &TILE_FULL);
226227

227-
parsec_arena_datatype_t *tile_rectangle = parsec_dtd_create_arena_datatype(parsec, &TILE_RECTANGLE);
228+
parsec_arena_datatype_t *tile_rectangle = PARSEC_OBJ_NEW(parsec_arena_datatype_t);
228229
dplasma_add2arena_rectangle( tile_rectangle,
229230
dcT.super.mb*dcT.super.nb*sizeof(dplasma_complex64_t),
230231
PARSEC_ARENA_ALIGNMENT_SSE,
231232
parsec_datatype_double_complex_t, dcT.super.mb, dcT.super.nb, -1);
233+
parsec_dtd_attach_arena_datatype(parsec, tile_rectangle, &TILE_RECTANGLE);
232234

233235
/* Registering the handle with parsec context */
234236
parsec_context_add_taskpool(parsec, dtd_tp);
@@ -399,9 +401,9 @@ int main(int argc, char **argv)
399401

400402
/* Cleaning data arrays we allocated for communication */
401403
dplasma_matrix_del2arena( tile_full );
402-
parsec_dtd_destroy_arena_datatype(parsec, TILE_FULL);
404+
parsec_dtd_free_arena_datatype(parsec, TILE_FULL);
403405
dplasma_matrix_del2arena( tile_rectangle );
404-
parsec_dtd_destroy_arena_datatype(parsec, TILE_RECTANGLE);
406+
parsec_dtd_free_arena_datatype(parsec, TILE_RECTANGLE);
405407

406408
parsec_dtd_data_collection_fini( (parsec_data_collection_t *)&dcA );
407409
parsec_dtd_data_collection_fini( (parsec_data_collection_t *)&dcT );

tests/testing_zgeqrf_dtd_untied.c

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -341,31 +341,35 @@ int main(int argc, char ** argv)
341341

342342
/* Allocating data arrays to be used by comm engine */
343343
/* Default type */
344-
parsec_arena_datatype_t *tile_full = parsec_dtd_create_arena_datatype(parsec, &TILE_FULL);
344+
parsec_arena_datatype_t *tile_full = PARSEC_OBJ_NEW(parsec_arena_datatype_t);
345345
dplasma_add2arena_tile( tile_full,
346346
dcA.super.mb*dcA.super.nb*sizeof(dplasma_complex64_t),
347347
PARSEC_ARENA_ALIGNMENT_SSE,
348348
parsec_datatype_double_complex_t, dcA.super.mb );
349+
parsec_dtd_attach_arena_datatype(parsec, tile_full, &TILE_FULL);
349350

350351
/* Lower triangular part of tile without diagonal */
351-
parsec_arena_datatype_t *tile_lower = parsec_dtd_create_arena_datatype(parsec, &TILE_LOWER);
352+
parsec_arena_datatype_t *tile_lower = PARSEC_OBJ_NEW(parsec_arena_datatype_t);
352353
dplasma_add2arena_lower( tile_lower,
353354
dcA.super.mb*dcA.super.nb*sizeof(dplasma_complex64_t),
354355
PARSEC_ARENA_ALIGNMENT_SSE,
355356
parsec_datatype_double_complex_t, dcA.super.mb, 0 );
357+
parsec_dtd_attach_arena_datatype(parsec, tile_lower, &TILE_LOWER);
356358

357359
/* Upper triangular part of tile with diagonal */
358-
parsec_arena_datatype_t *tile_upper = parsec_dtd_create_arena_datatype(parsec, &TILE_UPPER);
360+
parsec_arena_datatype_t *tile_upper = PARSEC_OBJ_NEW(parsec_arena_datatype_t);
359361
dplasma_add2arena_upper( tile_upper,
360362
dcA.super.mb*dcA.super.nb*sizeof(dplasma_complex64_t),
361363
PARSEC_ARENA_ALIGNMENT_SSE,
362364
parsec_datatype_double_complex_t, dcA.super.mb, 1 );
365+
parsec_dtd_attach_arena_datatype(parsec, tile_upper, &TILE_UPPER);
363366

364-
parsec_arena_datatype_t *tile_rectangle = parsec_dtd_create_arena_datatype(parsec, &TILE_RECTANGLE);
367+
parsec_arena_datatype_t *tile_rectangle = PARSEC_OBJ_NEW(parsec_arena_datatype_t);
365368
dplasma_add2arena_rectangle( tile_rectangle,
366369
dcT.super.mb*dcT.super.nb*sizeof(dplasma_complex64_t),
367370
PARSEC_ARENA_ALIGNMENT_SSE,
368371
parsec_datatype_double_complex_t, dcT.super.mb, dcT.super.nb, -1);
372+
parsec_dtd_attach_arena_datatype(parsec, tile_rectangle, &TILE_RECTANGLE);
369373

370374
/* Registering the handle with parsec context */
371375
parsec_context_add_taskpool(parsec, dtd_tp);
@@ -448,13 +452,13 @@ int main(int argc, char ** argv)
448452

449453
/* Cleaning data arrays we allocated for communication */
450454
dplasma_matrix_del2arena( tile_full );
451-
parsec_dtd_destroy_arena_datatype(parsec, TILE_FULL);
455+
parsec_dtd_free_arena_datatype(parsec, TILE_FULL);
452456
dplasma_matrix_del2arena( tile_lower );
453-
parsec_dtd_destroy_arena_datatype(parsec, TILE_LOWER);
457+
parsec_dtd_free_arena_datatype(parsec, TILE_LOWER);
454458
dplasma_matrix_del2arena( tile_upper );
455-
parsec_dtd_destroy_arena_datatype(parsec, TILE_UPPER);
459+
parsec_dtd_free_arena_datatype(parsec, TILE_UPPER);
456460
dplasma_matrix_del2arena( tile_rectangle );
457-
parsec_dtd_destroy_arena_datatype(parsec, TILE_RECTANGLE);
461+
parsec_dtd_free_arena_datatype(parsec, TILE_RECTANGLE);
458462

459463
parsec_dtd_data_collection_fini( (parsec_data_collection_t *)&dcA );
460464
parsec_dtd_data_collection_fini( (parsec_data_collection_t *)&dcT );

tests/testing_zgetrf_incpiv_dtd.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -245,25 +245,28 @@ int main(int argc, char ** argv)
245245

246246
/* Allocating data arrays to be used by comm engine */
247247
/* A */
248-
parsec_arena_datatype_t *tile_full = parsec_dtd_create_arena_datatype(parsec, &TILE_FULL);
248+
parsec_arena_datatype_t *tile_full = PARSEC_OBJ_NEW(parsec_arena_datatype_t);
249249
dplasma_add2arena_tile( tile_full,
250250
dcA.super.mb*dcA.super.nb*sizeof(dplasma_complex64_t),
251251
PARSEC_ARENA_ALIGNMENT_SSE,
252252
parsec_datatype_double_complex_t, dcA.super.mb );
253+
parsec_dtd_attach_arena_datatype(parsec, tile_full, &TILE_FULL);
253254

254255
/* IPIV */
255-
parsec_arena_datatype_t *tile_rectangle = parsec_dtd_create_arena_datatype(parsec, &TILE_RECTANGLE);
256+
parsec_arena_datatype_t *tile_rectangle = PARSEC_OBJ_NEW(parsec_arena_datatype_t);
256257
dplasma_add2arena_rectangle( tile_rectangle,
257258
dcA.super.mb*sizeof(int),
258259
PARSEC_ARENA_ALIGNMENT_SSE,
259260
parsec_datatype_int_t, dcA.super.mb, 1, -1 );
261+
parsec_dtd_attach_arena_datatype(parsec, tile_rectangle, &TILE_RECTANGLE);
260262

261263
/* L */
262-
parsec_arena_datatype_t *l_tile_rectangle = parsec_dtd_create_arena_datatype(parsec, &L_TILE_RECTANGLE);
264+
parsec_arena_datatype_t *l_tile_rectangle = PARSEC_OBJ_NEW(parsec_arena_datatype_t);
263265
dplasma_add2arena_rectangle( l_tile_rectangle,
264266
dcL.super.mb*dcL.super.nb*sizeof(dplasma_complex64_t),
265267
PARSEC_ARENA_ALIGNMENT_SSE,
266268
parsec_datatype_double_complex_t, dcL.super.mb, dcL.super.nb, -1);
269+
parsec_dtd_attach_arena_datatype(parsec, l_tile_rectangle, &L_TILE_RECTANGLE);
267270

268271
/* Registering the handle with parsec context */
269272
parsec_context_add_taskpool( parsec, dtd_tp );
@@ -448,11 +451,11 @@ int main(int argc, char ** argv)
448451

449452
/* Cleaning data arrays we allocated for communication */
450453
dplasma_matrix_del2arena( tile_full );
451-
parsec_dtd_destroy_arena_datatype(parsec, TILE_FULL);
454+
parsec_dtd_free_arena_datatype(parsec, TILE_FULL);
452455
dplasma_matrix_del2arena( tile_rectangle );
453-
parsec_dtd_destroy_arena_datatype(parsec, TILE_RECTANGLE);
456+
parsec_dtd_free_arena_datatype(parsec, TILE_RECTANGLE);
454457
dplasma_matrix_del2arena( l_tile_rectangle );
455-
parsec_dtd_destroy_arena_datatype(parsec, L_TILE_RECTANGLE);
458+
parsec_dtd_free_arena_datatype(parsec, L_TILE_RECTANGLE);
456459

457460
parsec_dtd_data_collection_fini( (parsec_data_collection_t *)&dcA );
458461
parsec_dtd_data_collection_fini( (parsec_data_collection_t *)&dcL );

tests/testing_zpotrf_dtd.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,12 @@ int main(int argc, char **argv)
7474
parsec_taskpool_t *dtd_tp = parsec_dtd_taskpool_new();
7575

7676
/* Allocating data arrays to be used by comm engine */
77-
parsec_arena_datatype_t *tile_full = parsec_dtd_create_arena_datatype(parsec, &TILE_FULL);
77+
parsec_arena_datatype_t *tile_full = PARSEC_OBJ_NEW(parsec_arena_datatype_t);
7878
dplasma_add2arena_tile( tile_full,
7979
dcA.super.mb*dcA.super.nb*sizeof(dplasma_complex64_t),
8080
PARSEC_ARENA_ALIGNMENT_SSE,
8181
parsec_datatype_double_complex_t, dcA.super.mb );
82+
parsec_dtd_attach_arena_datatype(parsec, tile_full, &TILE_FULL);
8283

8384
/* Registering the handle with parsec context */
8485
parsec_context_add_taskpool( parsec, dtd_tp );
@@ -377,7 +378,7 @@ int main(int argc, char **argv)
377378

378379
/* Cleaning data arrays we allocated for communication */
379380
dplasma_matrix_del2arena( tile_full );
380-
parsec_dtd_destroy_arena_datatype(parsec, TILE_FULL);
381+
parsec_dtd_free_arena_datatype(parsec, TILE_FULL);
381382
parsec_dtd_data_collection_fini( (parsec_data_collection_t *)&dcA );
382383

383384
parsec_data_free(dcA.mat); dcA.mat = NULL;

tests/testing_zpotrf_dtd_untied.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -371,11 +371,12 @@ int main(int argc, char **argv)
371371
parsec_taskpool_t *dtd_tp = parsec_dtd_taskpool_new( );
372372

373373
/* Default type */
374-
parsec_arena_datatype_t *tile_full = parsec_dtd_create_arena_datatype(parsec, &TILE_FULL);
374+
parsec_arena_datatype_t *tile_full = PARSEC_OBJ_NEW(parsec_arena_datatype_t);
375375
dplasma_add2arena_tile( tile_full,
376376
dcA.super.mb*dcA.super.nb*sizeof(dplasma_complex64_t),
377377
PARSEC_ARENA_ALIGNMENT_SSE,
378378
parsec_datatype_double_complex_t, dcA.super.mb );
379+
parsec_dtd_attach_arena_datatype(parsec, tile_full, &TILE_FULL);
379380

380381
/* Registering the handle with parsec context */
381382
parsec_context_add_taskpool( parsec, dtd_tp );
@@ -477,7 +478,7 @@ int main(int argc, char **argv)
477478
}
478479

479480
dplasma_matrix_del2arena( tile_full );
480-
parsec_dtd_destroy_arena_datatype(parsec, TILE_FULL);
481+
parsec_dtd_free_arena_datatype(parsec, TILE_FULL);
481482
parsec_dtd_data_collection_fini( (parsec_data_collection_t *)&dcA );
482483
parsec_data_free(dcA.mat); dcA.mat = NULL;
483484
parsec_tiled_matrix_destroy( (parsec_tiled_matrix_t*)&dcA);

0 commit comments

Comments
 (0)