19 double *** src_fields,
double *** src_frac_masks,
double ** tgt_field,
20 double frac_mask_fallback_value,
double scale_factor,
double scale_summand);
23 double *** src_fields,
double *** src_frac_masks,
24 int is_target,
double frac_mask_fallback_value,
25 double scale_factor,
double scale_summand);
28 double frac_mask_fallback_value,
double scale_factor,
double scale_summand);
31 double frac_mask_fallback_value,
double scale_factor,
double scale_summand);
114 size_t collection_size,
118 size_t * tgt_pos,
size_t tgt_count,
size_t * prefix_num_src_per_tgt,
119 double * weights,
size_t * src_field_idx,
size_t * src_idx,
120 size_t num_src_fields,
int with_frac_mask,
int * ref_count) {
123 xmalloc(1 *
sizeof(*mvp_at_tgt));
167 size_t collection_size, Xt_redist * src_redists,
size_t * tgt_pos,
168 size_t tgt_count,
size_t * num_src_per_tgt,
double * weights,
169 size_t * src_field_idx,
size_t * src_idx,
170 size_t num_src_fields,
int with_frac_mask) {
172 size_t total_num_src = 0;
173 size_t * prefix_num_src_per_tgt =
174 xmalloc((tgt_count + 1) *
sizeof(*prefix_num_src_per_tgt));
175 for (
size_t i = 0; i < tgt_count; ++i) {
176 prefix_num_src_per_tgt[i] = total_num_src;
177 total_num_src += num_src_per_tgt[i];
179 prefix_num_src_per_tgt[tgt_count] = total_num_src;
185 size_t * min_buffer_sizes =
186 xcalloc(num_src_fields,
sizeof(*min_buffer_sizes));
187 for (
size_t i = 0, offset = 0; i < tgt_count; ++i) {
188 size_t curr_num_src = num_src_per_tgt[i];
189 for (
size_t j = 0; j < curr_num_src; ++j, ++offset) {
190 size_t curr_src_field_idx = src_field_idx[offset];
191 if (curr_src_field_idx == SIZE_MAX)
continue;
192 size_t curr_src_extent = (src_idx[offset] + 1) *
sizeof(
double);
193 if (min_buffer_sizes[curr_src_field_idx] < curr_src_extent)
194 min_buffer_sizes[curr_src_field_idx] = curr_src_extent;
202 src_redists, min_buffer_sizes, num_src_fields,
203 with_frac_mask?2*collection_size:collection_size,
SEND_BUFFER),
205 src_redists, num_src_fields,
206 with_frac_mask?2*collection_size:collection_size,
RECV_BUFFER),
208 src_redists, num_src_fields,
209 collection_size, with_frac_mask,
"source to target"),
210 COPY_DATA(tgt_pos, tgt_count), tgt_count,
211 prefix_num_src_per_tgt,
212 (weights != NULL)?
COPY_DATA(weights, total_num_src):NULL,
215 num_src_fields, with_frac_mask, NULL);
217 free(min_buffer_sizes);
270 sum_mvp_at_tgt->
src2tgt, (
double const **)temp_src_fields,
271 src_recv_buffer,
"yac_interpolation_sum_mvp_at_tgt_execute");
276 (
double const * restrict *)src_recv_buffer,
277 (
double const * restrict *)(
301 "yac_interpolation_sum_mvp_at_tgt_execute_get") !=
305 double ** src_send_buffer = NULL;
320 src_send_buffer_sizes[j]);
332 sum_mvp_at_tgt->
src2tgt, (
double const **)src_send_buffer,
333 "yac_interpolation_sum_mvp_at_tgt_execute_put");
349 (
double const * restrict **)(sum_mvp_at_tgt->
src_fields),
350 (
double const * restrict **)(
352 (
double const * restrict *)src_recv_buffer,
353 (
double const * restrict *)(
380 "yac_interpolation_sum_mvp_at_tgt_execute_get") !=
387 "yac_interpolation_sum_mvp_at_tgt_execute_get");
418 "yac_interpolation_sum_mvp_at_tgt_execute_get");
430 "yac_interpolation_sum_mvp_at_tgt_execute_put_test");
447 "yac_interpolation_sum_mvp_at_tgt_execute_get_test");
463 "yac_interpolation_sum_mvp_at_tgt_execute_wait");
497 if (interp == NULL)
return;
506 sum_mvp_at_tgt->
src2tgt,
"yac_interpolation_sum_mvp_at_tgt_delete");
519 free(sum_mvp_at_tgt);
int yac_interpolation_exchange_put_test(struct yac_interpolation_exchange *exchange, char const *routine_name)
void yac_interpolation_exchange_execute_get_async(struct yac_interpolation_exchange *exchange, double **recv_data, char const *routine_name)
struct yac_interpolation_exchange * yac_interpolation_exchange_copy(struct yac_interpolation_exchange *exchange)
void yac_interpolation_exchange_delete(struct yac_interpolation_exchange *exchange, char const *routine_name)
void yac_interpolation_exchange_execute_get(struct yac_interpolation_exchange *exchange, double **recv_data, char const *routine_name)
void yac_interpolation_exchange_wait(struct yac_interpolation_exchange *exchange, char const *routine_name)
void yac_interpolation_exchange_execute_put(struct yac_interpolation_exchange *exchange, double const **send_data, char const *routine_name)
struct yac_interpolation_exchange * yac_interpolation_exchange_new(Xt_redist *redists, size_t num_fields, size_t collection_size, int with_frac_mask, char const *name)
void yac_interpolation_exchange_execute(struct yac_interpolation_exchange *exchange, double const **send_data_, double **recv_data_, char const *routine_name)
enum YAC_INTERP_EXCH_STATUS yac_interpolation_exchange_status(struct yac_interpolation_exchange *exchange, char const *routine_name)
int yac_interpolation_exchange_get_test(struct yac_interpolation_exchange *exchange, char const *routine_name)
int yac_interpolation_exchange_is_source(struct yac_interpolation_exchange *exchange)
@ YAC_INTERP_EXCH_WAIT_PUT
@ YAC_INTERP_EXCH_WAIT_GET
static struct yac_interpolation_type_vtable const interpolation_sum_mvp_at_tgt_vtable
static void yac_interpolation_sum_mvp_at_tgt_execute_get_async(struct yac_interpolation_type *interp, double **tgt_field, double frac_mask_fallback_value, double scale_factor, double scale_summand)
struct yac_interpolation_type * yac_interpolation_sum_mvp_at_tgt_new(size_t collection_size, Xt_redist *src_redists, size_t *tgt_pos, size_t tgt_count, size_t *num_src_per_tgt, double *weights, size_t *src_field_idx, size_t *src_idx, size_t num_src_fields, int with_frac_mask)
static struct yac_interpolation_type * yac_interpolation_sum_mvp_at_tgt_new_(size_t collection_size, struct yac_interpolation_buffer src_send_data, struct yac_interpolation_buffer src_recv_data, struct yac_interpolation_exchange *src2tgt, size_t *tgt_pos, size_t tgt_count, size_t *prefix_num_src_per_tgt, double *weights, size_t *src_field_idx, size_t *src_idx, size_t num_src_fields, int with_frac_mask, int *ref_count)
static struct yac_interpolation_type * yac_interpolation_sum_mvp_at_tgt_copy(struct yac_interpolation_type *interp)
static int yac_interpolation_sum_mvp_at_tgt_execute_put_test(struct yac_interpolation_type *interp)
static int yac_interpolation_sum_mvp_at_tgt_is_target(struct yac_interpolation_type *interp)
static void yac_interpolation_sum_mvp_at_tgt_delete(struct yac_interpolation_type *interp)
static void yac_interpolation_sum_mvp_at_tgt_execute_get(struct yac_interpolation_type *interp, double **tgt_field, double frac_mask_fallback_value, double scale_factor, double scale_summand)
static void yac_interpolation_sum_mvp_at_tgt_execute_wait(struct yac_interpolation_type *interp)
static void yac_interpolation_sum_mvp_at_tgt_execute(struct yac_interpolation_type *interp, double ***src_fields, double ***src_frac_masks, double **tgt_field, double frac_mask_fallback_value, double scale_factor, double scale_summand)
static void yac_interpolation_sum_mvp_at_tgt_execute_put(struct yac_interpolation_type *interp, double ***src_fields, double ***src_frac_masks, int is_target, double frac_mask_fallback_value, double scale_factor, double scale_summand)
static int yac_interpolation_sum_mvp_at_tgt_is_source(struct yac_interpolation_type *interp)
static void compute_tgt(struct yac_interpolation_sum_mvp_at_tgt *sum_mvp_at_tgt)
static int yac_interpolation_sum_mvp_at_tgt_execute_get_test(struct yac_interpolation_type *interp)
struct yac_interpolation_buffer yac_interpolation_buffer_init_2(Xt_redist *redists, size_t *min_buffer_sizes, size_t num_fields, size_t collection_size, enum yac_interpolation_buffer_type type)
struct yac_interpolation_buffer yac_interpolation_buffer_copy(struct yac_interpolation_buffer src, size_t num_fields, size_t collection_size)
void yac_interpolation_buffer_free(struct yac_interpolation_buffer *buffer)
struct yac_interpolation_buffer yac_interpolation_buffer_init(Xt_redist *redists, size_t num_fields, size_t collection_size, enum yac_interpolation_buffer_type type)
static void compute_tgt_field_wgt(double const *restrict **src_fields, double const *restrict **src_frac_masks, double const *restrict *remote_src_fields, double const *restrict *remote_src_frac_masks, double *restrict *tgt_field, size_t const *restrict tgt_pos, size_t tgt_count, size_t const *restrict prefix_num_src_per_tgt, double const *restrict weights, size_t const *restrict src_field_idx, size_t const *restrict src_idx, size_t num_src_fields, size_t collection_size, double frac_mask_fallback_value, double scale_factor, double scale_summand)
#define CHECK_WITH_FRAC_MASK(ROUTINE)
#define xcalloc(nmemb, size)
struct yac_interpolation_type_vtable const * vtable
double frac_mask_fallback_value
size_t * prefix_num_src_per_tgt
struct yac_interpolation_buffer src_send_data
double ** src_fields_buffer
double *** src_frac_masks
struct yac_interpolation_exchange * src2tgt
struct yac_interpolation_buffer src_recv_data
int(* is_source)(struct yac_interpolation_type *interp)
#define COPY_DATA(data, count)