Commit ea728f5e authored by Thomas Jahns's avatar Thomas Jahns 🤸
Browse files

Move initialization of destination buffer into check_redist.

parent 20b696f4
......@@ -99,15 +99,15 @@ int main(void) {
double dst_data[nselect];
static const double ref_dst_data[nselect] = {1,3,5};
for (size_t i = 0; i < nselect; ++i) dst_data[i] = -1;
check_redist(redist_coll, src_data, nselect,
dst_data, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
dst_data, fill_array_double, NULL,
ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
Xt_redist redist_coll_copy = xt_redist_copy(redist_coll);
for (size_t i = 0; i < nselect; ++i) dst_data[i] = -1;
check_redist(redist_coll_copy, src_data, nselect,
dst_data, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
dst_data, fill_array_double, NULL,
ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
// clean up
xt_redist_delete(redist_coll_copy);
......
......@@ -94,11 +94,13 @@ int main(void) {
// test exchange
static const double src_data[] = {1,2,3,4,5};
double dst_data[] = {-1,-1,-1};
static const double ref_dst_data[] = {1,3,5};
enum { num_dst_elems = sizeof (ref_dst_data) / sizeof (ref_dst_data[0]) };
double dst_data[num_dst_elems];
check_redist(redist_coll, src_data,
sizeof (dst_data) / sizeof (dst_data[0]),
dst_data, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
num_dst_elems, dst_data, fill_array_double, NULL,
ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
// clean up
......@@ -116,7 +118,7 @@ int main(void) {
// generate redist_collection
Xt_redist redists[3] = {redist, redist, redist};
static const double src_data[3][5]
static const double src_data[3][src_slice_len]
= {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};
double dst_data[3][3];
MPI_Aint src_displacements[3]
......@@ -140,14 +142,11 @@ int main(void) {
// test exchange
for (size_t j = 0; j < 3; ++j)
for (size_t i = 0; i < 3; ++i)
dst_data[j][i] = -1.0;
static const double ref_dst_data[3][3] = {{1,3,5},{6,8,10},{11,13,15}};
check_redist(redist_coll, src_data,
sizeof (dst_data) / sizeof (dst_data[0][0]),
dst_data, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
dst_data, fill_array_double, NULL,
ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
// clean up
......
......@@ -92,7 +92,10 @@ int communicators_are_congruent(MPI_Comm comm1, MPI_Comm comm2) {
void
check_redist_(Xt_redist redist, const void *src,
size_t dst_size, void *dst, const void *ref_dst_data,
size_t dst_num_elems, void *dst,
prepare_dst dst_prep,
const void *dst_prep_info,
const void *ref_dst_data,
MPI_Datatype dst_data_dt,
MPI_Datatype ref_dst_data_dt,
const char *file, int line)
......@@ -104,12 +107,9 @@ check_redist_(Xt_redist redist, const void *src,
xt_mpi_call(MPI_Type_get_extent(dst_data_dt, &dt_lb, &dt_extent_), comm);
dt_extent = (size_t)dt_extent_;
}
size_t dst_size_ = dst_size * dt_extent;
void *tmp_dst = malloc(dst_size_);
size_t dst_size = dst_num_elems * dt_extent;
for (int txmode = 0; txmode < 2; ++txmode) {
void *dst_target = txmode == 0 ? tmp_dst : dst;
const void *dst_orig = txmode == 0 ? dst : tmp_dst;
memcpy(dst_target, dst_orig, dst_size);
dst_prep(dst, dst_prep_info, dst_num_elems);
if (txmode == 0) {
xt_redist_s_exchange1(redist, src, dst);
} else {
......@@ -117,31 +117,31 @@ check_redist_(Xt_redist redist, const void *src,
}
bool compare_failed = false;
if (dst_data_dt == ref_dst_data_dt) {
compare_failed = memcmp(dst, ref_dst_data, dst_size_);
compare_failed = memcmp(dst, ref_dst_data, dst_size);
} else if (dst_data_dt == MPI_DOUBLE && ref_dst_data_dt == MPI_INT) {
const double *dst_cmp = dst;
const int *ref_dst_cmp = ref_dst_data;
for (size_t i = 0; i < dst_size; ++i)
for (size_t i = 0; i < dst_num_elems; ++i)
compare_failed |= (dst_cmp[i] != ref_dst_cmp[i]);
} else if (dst_data_dt == MPI_DOUBLE && ref_dst_data_dt == MPI_LONG) {
const double *dst_cmp = dst;
const long *ref_dst_cmp = ref_dst_data;
for (size_t i = 0; i < dst_size; ++i)
for (size_t i = 0; i < dst_num_elems; ++i)
compare_failed |= (dst_cmp[i] != ref_dst_cmp[i]);
} else if (dst_data_dt == MPI_DOUBLE && ref_dst_data_dt == MPI_SHORT) {
const double *dst_cmp = dst;
const short *ref_dst_cmp = ref_dst_data;
for (size_t i = 0; i < dst_size; ++i)
for (size_t i = 0; i < dst_num_elems; ++i)
compare_failed |= (dst_cmp[i] != ref_dst_cmp[i]);
} else if (dst_data_dt == MPI_DOUBLE && ref_dst_data_dt == MPI_LONG_LONG) {
const double *dst_cmp = dst;
const long long *ref_dst_cmp = ref_dst_data;
for (size_t i = 0; i < dst_size; ++i)
for (size_t i = 0; i < dst_num_elems; ++i)
compare_failed |= (dst_cmp[i] != ref_dst_cmp[i]);
} else if (dst_data_dt == MPI_DOUBLE
&& ref_dst_data_dt == MPI_DATATYPE_NULL) {
const double *dst_cmp = dst;
for (size_t i = 0; i < dst_size; ++i)
for (size_t i = 0; i < dst_num_elems; ++i)
compare_failed |= (dst_cmp[i] != (double)i);
} else
Xt_abort(comm, "internal error: unhandled test case!", file, line);
......@@ -149,9 +149,36 @@ check_redist_(Xt_redist redist, const void *src,
PUT_ERR("error in xt_redist_s/a_exchange, called from %s, line %d\n",
file, line);
}
free(tmp_dst);
}
void
fill_array_double(void *dst, const void *dst_prep_info, size_t dst_num_elems)
{
(void)dst_prep_info;
double *restrict a = dst;
for (size_t i = 0; i < dst_num_elems; ++i)
a[i] = -1;
}
void
fill_array_long(void *dst, const void *dst_prep_info, size_t dst_num_elems)
{
(void)dst_prep_info;
long *restrict a = dst;
for (size_t i = 0; i < dst_num_elems; ++i)
a[i] = -1L;
}
void
fill_array_int(void *dst, const void *dst_prep_info, size_t dst_num_elems)
{
(void)dst_prep_info;
int *restrict a = dst;
for (size_t i = 0; i < dst_num_elems; ++i)
a[i] = -1;
}
void
check_wait_request_(Xt_request *request, const char *file, int line)
{
......
......@@ -61,17 +61,32 @@ build_odd_selection_xmap(int src_num_indices);
int communicators_are_congruent(MPI_Comm comm1, MPI_Comm comm2);
typedef void (*prepare_dst)(void *dst, const void *dst_prep_info,
size_t dst_num_elems);
void
check_redist_(Xt_redist redist, const void *src,
size_t dst_size,
void *dst, const void *ref_dst_data,
size_t dst_num_elems,
void *dst,
prepare_dst dst_prep,
const void *dst_prep_info,
const void *ref_dst_data,
MPI_Datatype dst_data_dt, MPI_Datatype ref_dst_data_dt,
const char *file, int line);
#define check_redist(redist, src, dst_size,dst, ref_dst_data, \
dst_data_dt, ref_dst_data_dt) \
check_redist_(redist, src, dst_size,dst, ref_dst_data, \
dst_data_dt, ref_dst_data_dt, __FILE__, __LINE__)
#define check_redist(redist, src, dst_size, dst, dst_prep, dst_prep_info, \
ref_dst_data, dst_data_dt, ref_dst_data_dt) \
check_redist_(redist, src, dst_size, dst, dst_prep, dst_prep_info, \
ref_dst_data, dst_data_dt, ref_dst_data_dt, __FILE__, __LINE__)
void
fill_array_double(void *dst, const void *dst_prep_info, size_t dst_num_elems);
void
fill_array_long(void *dst, const void *dst_prep_info, size_t dst_num_elems);
void
fill_array_int(void *dst, const void *dst_prep_info, size_t dst_num_elems);
void
wrap_a_exchange(Xt_redist redist, int num_data_p, const void *src_data_p[],
......
......@@ -99,16 +99,12 @@ int main(void) {
static const double ref_dst_data[] = {0,2,13,9,7,0,2,0,2,13,4,6,7};
enum { num_ref_values = sizeof(ref_dst_data) / sizeof(ref_dst_data[0]) };
double dst_data[dst_num];
for (size_t i = 0; i < dst_num; ++i)
dst_data[i] = -1.0;
check_redist(redist, src_data, num_ref_values,
dst_data, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
check_redist(redist, src_data, num_ref_values, dst_data,
fill_array_double, NULL, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
Xt_redist redist_copy = xt_redist_copy(redist);
xt_redist_delete(redist);
for (size_t i = 0; i < dst_num; ++i)
dst_data[i] = -1.0;
check_redist(redist_copy, src_data, num_ref_values,
dst_data, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
check_redist(redist_copy, src_data, num_ref_values, dst_data,
fill_array_double, NULL, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
// clean up
xt_redist_delete(redist_copy);
......@@ -160,16 +156,12 @@ int main(void) {
assert(sizeof(src_data)/sizeof(src_data[0]) == src_num);
static const double ref_dst_data[] = {7,6,4,13,2,0,2,0,7,9,13,2,0};
double dst_data[dst_num];
for (size_t i = 0; i < dst_num; ++i)
dst_data[i] = -1.0;
check_redist(redist, src_data, dst_num,
dst_data, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
check_redist(redist, src_data, dst_num, dst_data,
fill_array_double, NULL, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
Xt_redist redist_copy = xt_redist_copy(redist);
xt_redist_delete(redist);
for (size_t i = 0; i < dst_num; ++i)
dst_data[i] = -1.0;
check_redist(redist_copy, src_data, dst_num,
dst_data, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
check_redist(redist_copy, src_data, dst_num, dst_data,
fill_array_double, NULL, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
// clean up
xt_redist_delete(redist_copy);
......@@ -218,16 +210,12 @@ int main(void) {
assert(sizeof(src_data)/sizeof(src_data[0]) == src_num);
static const long ref_dst_data[] = {7,6,4,13,2,0,2,0,7,9,13,2,0};
long dst_data[dst_num];
for (size_t i = 0; i < dst_num; ++i)
dst_data[i] = -1L;
check_redist(redist, src_data, dst_num,
dst_data, ref_dst_data, MPI_LONG, MPI_LONG);
check_redist(redist, src_data, dst_num, dst_data,
fill_array_long, NULL, ref_dst_data, MPI_LONG, MPI_LONG);
Xt_redist redist_copy = xt_redist_copy(redist);
xt_redist_delete(redist);
for (size_t i = 0; i < dst_num; ++i)
dst_data[i] = -1L;
check_redist(redist_copy, src_data, dst_num,
dst_data, ref_dst_data, MPI_LONG, MPI_LONG);
check_redist(redist_copy, src_data, dst_num, dst_data,
fill_array_long, NULL, ref_dst_data, MPI_LONG, MPI_LONG);
// clean up
xt_redist_delete(redist_copy);
......
......@@ -57,6 +57,8 @@
#define VERBOSE
#include "tests.h"
#include "test_redist_common.h"
int main(void) {
// init mpi
......@@ -105,12 +107,12 @@ int main(void) {
// test synchronous and asynchronous exchange
double src_data[dataSize];
double dst_data[dataSize] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
double dst_data[dataSize];
for (int i = 0; i < src_num_indices; ++i)
src_data[i] = (double)(rank * dataSize + i);
check_redist(redist, src_data, dataSize, dst_data,
check_redist(redist, src_data, dataSize, dst_data, fill_array_double, NULL,
dst_index_list, MPI_DOUBLE, XT_INT_MPIDT);
// clean up
......@@ -163,11 +165,8 @@ int main(void) {
for (int i = 0; i < size; ++i)
src_data[i] = -2.0;
for (int i = 0; i < size; ++i)
dst_data[i] = -1.0;
check_redist(redist, src_data, (size_t)size, dst_data,
NULL, MPI_DOUBLE, MPI_DATATYPE_NULL);
fill_array_double, NULL, NULL, MPI_DOUBLE, MPI_DATATYPE_NULL);
// clean up
xt_redist_delete(redist);
......@@ -243,9 +242,8 @@ int main(void) {
b_surfdata_ref[i] = gsurfdata[ivecb[i]];
}
for (int i = 0; i < nwin; i++) b_surfdata[i] = -1;
check_redist(redist, a_surfdata, (size_t)nwin, b_surfdata, b_surfdata_ref,
MPI_INT, MPI_INT);
check_redist(redist, a_surfdata, (size_t)nwin, b_surfdata,
fill_array_int, NULL, b_surfdata_ref, MPI_INT, MPI_INT);
xt_redist_delete(redist);
......@@ -324,11 +322,8 @@ int main(void) {
MPI_COMM_WORLD))
PUT_ERR("error in xt_redist_get_MPI_Comm\n");
for (int i = 0; i < gvol_size; i++) b_voldata[i] = -1;
check_redist(block_redist, a_voldata,
(size_t)gvol_size, b_voldata, b_voldata_ref,
MPI_INT, MPI_INT);
check_redist(block_redist, a_voldata, (size_t)gvol_size, b_voldata,
fill_array_int, NULL, b_voldata_ref, MPI_INT, MPI_INT);
// redist with blocks but without explicit offsets:
Xt_redist block_redist2
......@@ -341,11 +336,8 @@ int main(void) {
PUT_ERR("error in xt_redist_get_MPI_Comm\n");
for (int i = 0; i < gvol_size; i++) b_voldata[i] = -1;
check_redist(block_redist2, a_voldata,
(size_t)gvol_size, b_voldata, b_voldata_ref,
MPI_INT, MPI_INT);
check_redist(block_redist2, a_voldata, (size_t)gvol_size, b_voldata,
fill_array_int, NULL, b_voldata_ref, MPI_INT, MPI_INT);
xt_redist_delete(block_redist);
xt_redist_delete(block_redist2);
......
......@@ -75,7 +75,7 @@ int main(void) {
// generate redist_repeatection
static const double src_data[] = {1,2,3,4,5};
double dst_data[] = {-1,-1,-1};
double dst_data[dst_slice_len];
Xt_redist redist_repeat;
MPI_Aint src_extent = (MPI_Aint)(sizeof(src_data)),
dst_extent = (MPI_Aint)(sizeof(dst_data));
......@@ -95,9 +95,8 @@ int main(void) {
// test exchange
static const double ref_dst_data[] = {1,3,5};
check_redist(redist_repeat, src_data,
sizeof(dst_data) / sizeof (dst_data[0]),
dst_data, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
check_redist(redist_repeat, src_data, dst_slice_len, dst_data,
fill_array_double, NULL, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
// clean up
xt_redist_delete(redist_repeat);
......@@ -136,14 +135,10 @@ int main(void) {
xt_redist_delete(redist);
// test exchange
for (size_t j = 0; j < num_repetitions; ++j)
for (size_t i = 0; i < dst_slice_len; ++i)
dst_data[j][i] = -1.0;
static const double ref_dst_data[num_repetitions][dst_slice_len]
= {{1,3,5},{6,8,10},{11,13,15}};
check_redist(redist_repeat, src_data,
num_repetitions * dst_slice_len, dst_data, ref_dst_data,
check_redist(redist_repeat, src_data, num_repetitions * dst_slice_len,
dst_data, fill_array_double, NULL, ref_dst_data,
MPI_DOUBLE, MPI_DOUBLE);
// clean up
......@@ -186,14 +181,10 @@ int main(void) {
xt_redist_delete(redist);
// test exchange
for (size_t j = 0; j < num_repetitions; ++j)
for (size_t i = 0; i < dst_slice_len; ++i)
dst_data[j][i] = -1.0;
static const double ref_dst_data[num_repetitions][dst_slice_len]
= {{11,13,15},{6,8,10},{1,3,5}};
check_redist(redist_repeat, src_data,
num_repetitions * dst_slice_len, dst_data, ref_dst_data,
check_redist(redist_repeat, src_data, num_repetitions * dst_slice_len,
dst_data, fill_array_double, NULL, ref_dst_data,
MPI_DOUBLE, MPI_DOUBLE);
// clean up
......@@ -226,12 +217,11 @@ int main(void) {
// test exchange
static const double src_data[rep_dim_size][src_slice_len]
= {{1,2,3,4,5},{-1},{6,7,8,9,10},{-1},{11,12,13,14,15}};
double dst_data[rep_dim_size][dst_slice_len]
= {{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1}};
double dst_data[rep_dim_size][dst_slice_len];
static const double ref_dst_data[rep_dim_size][dst_slice_len]
= {{1,3,5},{-1,-1,-1},{6,8,10},{-1,-1,-1},{11,13,15}};
check_redist(redist_repeat, src_data,
rep_dim_size * dst_slice_len, dst_data, ref_dst_data,
check_redist(redist_repeat, src_data, rep_dim_size * dst_slice_len,
dst_data, fill_array_double, NULL, ref_dst_data,
MPI_DOUBLE, MPI_DOUBLE);
// clean up
......@@ -292,10 +282,8 @@ int main(void) {
PUT_ERR("error in xt_redist_get_MPI_Comm\n");
// test exchange
for(int i = 0; i<npt; i++) dst_data[i] = -1;
check_redist(redist_repeat, src_data,
npt, dst_data, ref_dst_data,
MPI_DOUBLE, MPI_DOUBLE);
check_redist(redist_repeat, src_data, npt, dst_data,
fill_array_double, NULL, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
// clean up
xt_redist_delete(redist);
......
......@@ -99,14 +99,13 @@ int main(void) {
static const double ref_dst_data[] = {0};
enum { num_ref_values = sizeof(ref_dst_data) / sizeof(ref_dst_data[0]) };
double dst_data[num_ref_values];
for (size_t i = 0; i < num_ref_values; ++i) dst_data[i] = -1.0;
check_redist(redist, src_data, num_ref_values, dst_data, ref_dst_data,
check_redist(redist, src_data, num_ref_values, dst_data,
fill_array_double, NULL, ref_dst_data,
MPI_DOUBLE, MPI_DOUBLE);
Xt_redist redist_copy = xt_redist_copy(redist);
xt_redist_delete(redist);
for (size_t i = 0; i < num_ref_values; ++i) dst_data[i] = -1.0;
check_redist(redist_copy, src_data, num_ref_values,
dst_data, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
check_redist(redist_copy, src_data, num_ref_values, dst_data,
fill_array_double, NULL, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
// clean up
xt_redist_delete(redist_copy);
......@@ -153,14 +152,12 @@ int main(void) {
static const double ref_dst_data[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
enum { num_ref_values = sizeof(ref_dst_data) / sizeof(ref_dst_data[0]) };
double dst_data[num_ref_values];
for (size_t i = 0; i < num_ref_values; ++i) dst_data[i] = -1.0;
check_redist(redist, src_data, num_ref_values,
dst_data, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
check_redist(redist, src_data, num_ref_values, dst_data,
fill_array_double, NULL, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
Xt_redist redist_copy = xt_redist_copy(redist);
xt_redist_delete(redist);
for (size_t i = 0; i < num_ref_values; ++i) dst_data[i] = -1.0;
check_redist(redist_copy, src_data, num_ref_values,
dst_data, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
check_redist(redist_copy, src_data, num_ref_values, dst_data,
fill_array_double, NULL, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
// clean up
xt_redist_delete(redist_copy);
......
......@@ -105,14 +105,12 @@ int main(void) {
double dst_data[num_dst_values];
src_data[0] = rank;
ref_dst_data[0] = (rank + size - 1)%size;
for (size_t i = 0; i < num_dst_values; ++i) dst_data[i] = -1.0;
check_redist(redist, src_data, num_dst_values, dst_data, ref_dst_data,
MPI_DOUBLE, MPI_DOUBLE);
check_redist(redist, src_data, num_dst_values, dst_data,
fill_array_double, NULL, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
Xt_redist redist_copy = xt_redist_copy(redist);
xt_redist_delete(redist);
for (size_t i = 0; i < num_dst_values; ++i) dst_data[i] = -1.0;
check_redist(redist_copy, src_data, num_dst_values,
dst_data, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
check_redist(redist_copy, src_data, num_dst_values, dst_data,
fill_array_double, NULL, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
// clean up
xt_redist_delete(redist_copy);
......@@ -161,14 +159,12 @@ int main(void) {
double *dst_data = xmalloc((size_t)size * sizeof(*dst_data));
src_data[0] = rank;
for (int i = 0; i < size; ++i) ref_dst_data[i] = i;
for (size_t i = 0; i < (size_t)size; ++i) dst_data[i] = -1.0;
check_redist(redist, src_data, (size_t)size,
dst_data, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
check_redist(redist, src_data, (size_t)size, dst_data,
fill_array_double, NULL, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
Xt_redist redist_copy = xt_redist_copy(redist);
xt_redist_delete(redist);
for (size_t i = 0; i < (size_t)size; ++i) dst_data[i] = -1.0;
check_redist(redist_copy, src_data, (size_t)size,
dst_data, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
check_redist(redist_copy, src_data, (size_t)size, dst_data,
fill_array_double, NULL, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
// clean up
free(dst_data);
......@@ -221,14 +217,12 @@ int main(void) {
double dst_data[num_dst_values];
if (rank == 0) for (int i = 0; i < size; ++i) src_data[i] = i;
ref_dst_data[0] = rank;
dst_data[0] = -1.0;
check_redist(redist, src_data, num_dst_values, dst_data, ref_dst_data,
MPI_DOUBLE, MPI_DOUBLE);
check_redist(redist, src_data, num_dst_values, dst_data,
fill_array_double, NULL, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
Xt_redist redist_copy = xt_redist_copy(redist);
xt_redist_delete(redist);
dst_data[0] = -1.0;
check_redist(redist_copy, src_data, num_dst_values, dst_data,
ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
fill_array_double, NULL, ref_dst_data, MPI_DOUBLE, MPI_DOUBLE);
// clean up
free(src_data);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment