From 5e0399c913e6962c39698630b77cef6d7aab720e Mon Sep 17 00:00:00 2001 From: lykos98 <francy273998@gmail.com> Date: Fri, 31 Jan 2025 07:20:03 +0100 Subject: [PATCH] added flag to turn on experimental h1 cener elimination, currently not working correctly --- src/adp/adp.c | 47 ++++++++++++++++++++++------------------------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/src/adp/adp.c b/src/adp/adp.c index b6b7e38..35f61e2 100644 --- a/src/adp/adp.c +++ b/src/adp/adp.c @@ -768,38 +768,36 @@ clusters_t Heuristic1(global_context_t *ctx) * use an array of locks, and compare and swap to actually gain control of the thing * * */ - #pragma omp critical - { - int owner = foreign_owner(ctx, jidx); - idx_t jpos = jidx - ctx -> rank_idx_start[owner]; +#ifdef EXPERIMENTAL_H1 + int owner = foreign_owner(ctx, jidx); + idx_t jpos = jidx - ctx -> rank_idx_start[owner]; - lock_t state = LOCK_FREE; + lock_t state = LOCK_FREE; - state = h1_lock_acquire(ctx, win_locks, owner, jpos, state); + state = h1_lock_acquire(ctx, win_locks, owner, jpos, state); - heap_node mask_element; - MPI_Request request; + heap_node mask_element; + MPI_Request request; - MPI_Rget(&mask_element, sizeof(heap_node), MPI_BYTE, - owner, jpos * sizeof(heap_node), sizeof(heap_node), MPI_BYTE, win_to_remove_mask, &request); - MPI_Wait(&request, MPI_STATUS_IGNORE); + MPI_Rget(&mask_element, sizeof(heap_node), MPI_BYTE, + owner, jpos * sizeof(heap_node), sizeof(heap_node), MPI_BYTE, win_to_remove_mask, &request); + MPI_Wait(&request, MPI_STATUS_IGNORE); - int flag = mask_element.array_idx == MY_SIZE_MAX; - if(flag || i_point.g > mask_element.value ) - { - heap_node tmp_mask_element = {.array_idx = i_point.array_idx, .value = i_point.g}; - MPI_Request request; - MPI_Rput(&tmp_mask_element, sizeof(heap_node), MPI_BYTE, owner, - jpos*sizeof(heap_node), sizeof(heap_node), MPI_BYTE, win_to_remove_mask, &request); - MPI_Wait(&request, MPI_STATUS_IGNORE); - - } + int flag = mask_element.array_idx == MY_SIZE_MAX; + if(flag || i_point.g > mask_element.value ) + { + heap_node tmp_mask_element = {.array_idx = i_point.array_idx, .value = i_point.g}; + MPI_Request request; + MPI_Rput(&tmp_mask_element, sizeof(heap_node), MPI_BYTE, owner, + jpos*sizeof(heap_node), sizeof(heap_node), MPI_BYTE, win_to_remove_mask, &request); + MPI_Wait(&request, MPI_STATUS_IGNORE); - state = h1_lock_free(ctx, win_locks, owner, jpos, state); } - /* + state = h1_lock_free(ctx, win_locks, owner, jpos, state); +#else + #pragma omp critical (h1_centers_elimination) { int owner = foreign_owner(ctx, jidx); @@ -824,8 +822,7 @@ clusters_t Heuristic1(global_context_t *ctx) } MPI_Win_unlock(owner, win_to_remove_mask); - } - */ +#endif } } } -- GitLab