@@ -25,8 +25,9 @@ TestAlltoallv::TestAlltoallv(ucc_test_team_t &_team, TestCaseParams ¶ms) :
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 ¶ms) :
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 ¶ms) :
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 ¶ms) :
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
0 commit comments