15 Xt_redist redist, MPI_Datatype(*xt_redist_get_MPI_Datatype)(Xt_redist,
int)) {
17 if (redist == NULL)
return 0;
19 MPI_Comm comm = xt_redist_get_MPI_Comm(redist);
25 for (
int i = 0; i < comm_size; ++i) {
27 MPI_Datatype dt = xt_redist_get_MPI_Datatype(redist, i);
28 if (dt == MPI_DATATYPE_NULL)
continue;
30 yac_mpi_call(MPI_Type_get_extent(dt, &lb, &extent), comm);
31 size_t curr_size = (size_t)extent + (
size_t)lb;
32 if (curr_size > max_size) max_size = curr_size;
54 "ERROR(get_buffer_sizes): invalid buffer type");
60 size_t * buffer_sizes;
61 if (redists == NULL) {
74 size_t total_buffer_size = 0;
76 total_buffer_size += buffer_sizes[i];
77 double ** buffer_data =
81 for (
size_t j = 0; j <
num_fields; offset += buffer_sizes[j++]) {
83 (
double*)((
char*)(buffer_data[0]) + offset);
102 Xt_redist * redists,
size_t * min_buffer_sizes,
size_t num_fields,
132 free(
buffer->buffer_sizes);
#define YAC_ASSERT(exp, msg)
static double ** allocate_buffer(size_t *buffer_sizes, size_t num_fields, size_t collection_size)
static size_t xt_redist_get_buffer_size(Xt_redist redist, MPI_Datatype(*xt_redist_get_MPI_Datatype)(Xt_redist, int))
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)
static size_t xt_redist_get_recv_buffer_size(Xt_redist redist)
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)
static size_t * get_buffer_sizes(Xt_redist *redists, size_t num_fields, enum yac_interpolation_buffer_type type)
static size_t xt_redist_get_send_buffer_size(Xt_redist redist)
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)
yac_interpolation_buffer_type
#define xcalloc(nmemb, size)
#define COPY_DATA(data, count)
#define yac_mpi_call(call, comm)