Skip to content

Commit ff393c7

Browse files
committed
TEST: add mpi dyn seg alltoallv test
1 parent 4081ed6 commit ff393c7

4 files changed

Lines changed: 32 additions & 7 deletions

File tree

test/mpi/test_alltoallv.cc

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,9 @@ TestAlltoallv::TestAlltoallv(ucc_test_team_t &_team, TestCaseParams &params) :
2525
std::default_random_engine eng;
2626
size_t dt_size, count;
2727
int rank, nprocs, rank_count;
28-
bool is_onesided;
2928
void *work_buf;
29+
bool is_onesided;
30+
bool use_dynamic_segments;
3031

3132
dt = params.dt;
3233
dt_size = ucc_dt_size(dt);
@@ -44,13 +45,17 @@ TestAlltoallv::TestAlltoallv(ucc_test_team_t &_team, TestCaseParams &params) :
4445
count_bits = params.count_bits;
4546
displ_bits = params.displ_bits;
4647
is_onesided = (params.buffers != NULL);
48+
/* Dynamic segments are enabled when buffers are provided but
49+
* use_dynamic_segments is set */
50+
use_dynamic_segments = is_onesided && params.use_dynamic_segments;
4751
work_buf = NULL;
4852

4953
std::uniform_int_distribution<int> urd(count / 2, count);
5054
eng.seed(test_rand_seed);
5155

5256
MPI_Comm_rank(team.comm, &rank);
5357
MPI_Comm_size(team.comm, &nprocs);
58+
//MPI_Barrier(team.comm);
5459

5560
if (TEST_SKIP_NONE != skip_reduce(test_max_size < (msgsize * nprocs),
5661
TEST_SKIP_MEM_LIMIT, team.comm)) {
@@ -62,7 +67,10 @@ TestAlltoallv::TestAlltoallv(ucc_test_team_t &_team, TestCaseParams &params) :
6267
UCC_COLL_ARGS_FLAG_CONTIG_DST_BUFFER;
6368
if (is_onesided) {
6469
args.mask |= UCC_COLL_ARGS_FIELD_GLOBAL_WORK_BUFFER;
65-
args.flags |= UCC_COLL_ARGS_FLAG_MEM_MAPPED_BUFFERS;
70+
/* For dynamic segments, do not set MEM_MAPPED_BUFFERS flag */
71+
if (!use_dynamic_segments) {
72+
args.flags |= UCC_COLL_ARGS_FLAG_MEM_MAPPED_BUFFERS;
73+
}
6674
}
6775
if (count_bits == TEST_FLAG_VSIZE_64BIT) {
6876
args.flags |= UCC_COLL_ARGS_FLAG_COUNT_64BIT;
@@ -103,23 +111,27 @@ TestAlltoallv::TestAlltoallv(ucc_test_team_t &_team, TestCaseParams &params) :
103111
check_buf = ucc_malloc(rncounts * dt_size, "check buf");
104112
UCC_MALLOC_CHECK(check_buf);
105113

106-
if (!is_onesided) {
114+
if (!is_onesided || (is_onesided && use_dynamic_segments)) {
107115
UCC_CHECK(ucc_mc_alloc(&sbuf_mc_header, sncounts * dt_size, mem_type));
108116
UCC_CHECK(ucc_mc_alloc(&rbuf_mc_header, rncounts * dt_size, mem_type));
109117
sbuf = sbuf_mc_header->addr;
110118
rbuf = rbuf_mc_header->addr;
111119
} else {
112-
sbuf = params.buffers[MEM_SEND_SEGMENT];
113-
rbuf = params.buffers[MEM_RECV_SEGMENT];
120+
/* Traditional onesided: use pre-mapped buffers */
121+
sbuf = params.buffers[MEM_SEND_SEGMENT];
122+
rbuf = params.buffers[MEM_RECV_SEGMENT];
123+
}
124+
125+
if (is_onesided) {
114126
work_buf = params.buffers[MEM_WORK_SEGMENT];
115127
args.global_work_buffer = work_buf;
116128
}
117129

118-
args.src.info_v.buffer = sbuf;
130+
args.src.info_v.buffer = sbuf;
119131
args.src.info_v.datatype = dt;
120132
args.src.info_v.mem_type = mem_type;
121133

122-
args.dst.info_v.buffer = rbuf;
134+
args.dst.info_v.buffer = rbuf;
123135
args.dst.info_v.datatype = dt;
124136
args.dst.info_v.mem_type = mem_type;
125137

test/mpi/test_case.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,8 @@ std::string TestCase::str() {
124124
std::string _str = std::string("tc=");
125125
if (args.flags & UCC_COLL_ARGS_FLAG_MEM_MAPPED_BUFFERS) {
126126
_str += std::string("Onesided ");
127+
} else if (args.mask & UCC_COLL_ARGS_FIELD_GLOBAL_WORK_BUFFER) {
128+
_str += std::string("DynSeg ");
127129
}
128130

129131
_str += std::string(ucc_coll_type_str(args.coll_type)) +

test/mpi/test_mpi.cc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -629,10 +629,20 @@ void UccTestMpi::run_all_at_team(ucc_test_team_t &team,
629629
params.count_bits = count_bits;
630630
params.displ_bits = displ_bits;
631631
params.buffers = onesided_bufs;
632+
params.use_dynamic_segments = false;
632633

633634
auto tcs = TestCase::init(team, c, nt, params);
634635
auto res = exec_tests(tcs, triggered, persistent);
635636
rst.insert(rst.end(), res.begin(), res.end());
637+
638+
/* Test dynamic segments for onesided alltoallv */
639+
if ((c == UCC_COLL_TYPE_ALLTOALLV) &&
640+
(team.ctx != ctx) && (mt == UCC_MEMORY_TYPE_HOST)) {
641+
params.use_dynamic_segments = true;
642+
auto tcs_dynseg = TestCase::init(team, c, nt, params);
643+
auto res_dynseg = exec_tests(tcs_dynseg, triggered, persistent);
644+
rst.insert(rst.end(), res_dynseg.begin(), res_dynseg.end());
645+
}
636646
}
637647
}
638648
}

test/mpi/test_mpi.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,7 @@ struct TestCaseParams {
257257
void **buffers;
258258
ucc_test_vsize_flag_t count_bits;
259259
ucc_test_vsize_flag_t displ_bits;
260+
bool use_dynamic_segments;
260261
};
261262

262263
class TestCase {

0 commit comments

Comments
 (0)