From 3a4ec19c7387b14c19c6babac65cbb5fed673be3 Mon Sep 17 00:00:00 2001 From: "raphael.bach" <raphael.bach@etu.hesge.ch> Date: Thu, 30 Jun 2022 23:34:59 +0200 Subject: [PATCH] Add `fmpi_domain_set_inner()` --- include/fmpi_domain.h | 7 +++++++ src/fmpi_domain.c | 13 +++++++++++++ src/fmpi_task.c | 15 +++++---------- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/include/fmpi_domain.h b/include/fmpi_domain.h index 41c8c61..51cb754 100644 --- a/include/fmpi_domain.h +++ b/include/fmpi_domain.h @@ -58,6 +58,13 @@ struct fmpi_domain fmpi_new_domain( const struct fmpi_ctx * ctx, const struct fmpi_data * data, struct fmpi_stencil stencil ); +/*------------------------------------------------------------------------------ + fmpi_domain_set_inner() +------------------------------------------------------------------------------*/ +void fmpi_domain_set_inner( + const struct fmpi_ctx * ctx, const struct fmpi_domain * domain, + const void * data +); /*============================================================================== GUARD ==============================================================================*/ diff --git a/src/fmpi_domain.c b/src/fmpi_domain.c index a83d4d3..4927832 100644 --- a/src/fmpi_domain.c +++ b/src/fmpi_domain.c @@ -73,9 +73,22 @@ struct fmpi_domain fmpi_new_domain( domain.inner = fmpi_partition_block_1d(ctx, data); if(stencil.type != FMPI_STENCIL_NONE) { domain.halo = fmpi_halo_1d(ctx, domain.inner, stencil); + domain.inner.raw = (char *)domain.halo.raw + (data->type.size * stencil.length); } return domain; } +/*------------------------------------------------------------------------------ + fmpi_domain_set_inner() +------------------------------------------------------------------------------*/ +void fmpi_domain_set_inner( + const struct fmpi_ctx * const ctx, const struct fmpi_domain * const domain, + const void * const data +){ + assert(ctx != NULL); + assert(domain != NULL); + assert(data != NULL); + memcpy(domain->inner.raw, data, domain->inner.size); +} /*============================================================================== PRIVATE FUNCTION DEFINITION ==============================================================================*/ diff --git a/src/fmpi_task.c b/src/fmpi_task.c index 6022fb1..3119a20 100644 --- a/src/fmpi_task.c +++ b/src/fmpi_task.c @@ -116,7 +116,7 @@ int fmpi_task_run_sync( "fmpi_futhark_get_data_sync() failed!" ); } - const int err = fmpi_futhark_free_data_sync( + int err = fmpi_futhark_free_data_sync( ctx->fut, task->args.out.gpu, task->args.out.type.base, task->args.out.dim_cnt ); @@ -127,16 +127,11 @@ int fmpi_task_run_sync( } } if(task->stencil.type != FMPI_STENCIL_NONE) { - const int rank = ctx->mpi->rank; - size_t type_size = task->domains[0].halo.type.size; - void * const halo = task->domains[0].halo.raw; - const void * const inner = task->args.out.raw; - void * const dest = (rank == 0) ? ((char *)halo + type_size) : halo; - const void * const src = (rank != 0) ? ((const char *)inner - type_size) : inner; - const size_t inner_size = task->domains[0].inner.size; - const size_t size = (rank != (ctx->mpi->size - 1)) ? (inner_size + type_size) : inner_size; - memcpy(dest, src, size); + fmpi_domain_set_inner(ctx, &task->domains[0], task->args.out.raw); + const int rank = ctx->mpi->rank; + size_t type_size = task->domains[0].inner.type.size; + const size_t idx_1 = type_size; const size_t idx_nm2 = (task->domains[0].halo.cnt-2) * type_size; const size_t idx_nm1 = idx_nm2 + idx_1; -- GitLab