From 3b0b9c96f407ba90f0ad0eed87f36dac9d5d4330 Mon Sep 17 00:00:00 2001 From: Mathieu Faverge <mathieu.faverge@inria.fr> Date: Mon, 11 Oct 2021 18:33:00 +0200 Subject: [PATCH] descriptor: add an exec field in the accessor macros --- control/descriptor.h | 58 +++++++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/control/descriptor.h b/control/descriptor.h index 6bf6d9a81..dda8fa719 100644 --- a/control/descriptor.h +++ b/control/descriptor.h @@ -233,33 +233,41 @@ inline static int chameleon_desc_islocal( const CHAM_desc_t *A, int m, int n ) * CHAMELEON_ACCESS_RW(C, Cm, Cn) * CHAMELEON_END_ACCESS_DECLARATION */ -#define CHAMELEON_BEGIN_ACCESS_DECLARATION { \ - unsigned __chameleon_need_submit = 0; \ +#define CHAMELEON_BEGIN_ACCESS_DECLARATION { \ + unsigned __chameleon_need_exec = 0; \ + unsigned __chameleon_need_submit = 0; \ RUNTIME_BEGIN_ACCESS_DECLARATION -#define CHAMELEON_ACCESS_R(A, Am, An) do { \ - if (chameleon_desc_islocal(A, Am, An)) __chameleon_need_submit = 1; \ - RUNTIME_ACCESS_R(A, Am, An); \ -} while(0) - -#define CHAMELEON_ACCESS_W(A, Am, An) do { \ - if (chameleon_desc_islocal(A, Am, An)) __chameleon_need_submit = 1; \ - RUNTIME_ACCESS_W(A, Am, An); \ -} while(0) - -#define CHAMELEON_ACCESS_RW(A, Am, An) do { \ - if (chameleon_desc_islocal(A, Am, An)) __chameleon_need_submit = 1; \ - RUNTIME_ACCESS_RW(A, Am, An); \ -} while(0) - -#define CHAMELEON_RANK_CHANGED(rank) do {\ - __chameleon_need_submit = 1; \ - RUNTIME_RANK_CHANGED(rank); \ -} while (0) - -#define CHAMELEON_END_ACCESS_DECLARATION \ - RUNTIME_END_ACCESS_DECLARATION; \ - if (!__chameleon_need_submit) return; \ +#define CHAMELEON_ACCESS_R(A, Am, An) do { \ + if (chameleon_desc_islocal(A, Am, An)) __chameleon_need_submit = 1; \ + RUNTIME_ACCESS_R(A, Am, An); \ + } while(0) + +#define CHAMELEON_ACCESS_W(A, Am, An) do { \ + if (chameleon_desc_islocal(A, Am, An)) { \ + __chameleon_need_exec = 1; \ + __chameleon_need_submit = 1; \ + } \ + RUNTIME_ACCESS_W(A, Am, An); \ + } while(0) + +#define CHAMELEON_ACCESS_RW(A, Am, An) do { \ + if (chameleon_desc_islocal(A, Am, An)) { \ + __chameleon_need_exec = 1; \ + __chameleon_need_submit = 1; \ + } \ + RUNTIME_ACCESS_RW(A, Am, An); \ + } while(0) + +#define CHAMELEON_RANK_CHANGED(rank) do { \ + __chameleon_need_submit = 1; \ + RUNTIME_RANK_CHANGED(rank); \ + } while (0) + +#define CHAMELEON_END_ACCESS_DECLARATION \ + RUNTIME_END_ACCESS_DECLARATION; \ + if (!__chameleon_need_submit) return; \ + (void)__chameleon_need_exec; \ } #ifdef __cplusplus -- GitLab