14
14
#include "coll_adapt.h"
15
15
#include "coll_adapt_algorithms.h"
16
16
#include "coll_adapt_context.h"
17
- #include "ompi/mca/coll/base/coll_tags .h"
17
+ #include "ompi/mca/coll/base/coll_base_util .h"
18
18
#include "ompi/mca/coll/base/coll_base_functions.h"
19
19
#include "opal/util/bit_ops.h"
20
20
#include "opal/sys/atomic.h"
@@ -27,8 +27,7 @@ typedef int (*ompi_coll_adapt_ibcast_fn_t) (void *buff,
27
27
int root ,
28
28
struct ompi_communicator_t * comm ,
29
29
ompi_request_t * * request ,
30
- mca_coll_base_module_t * module ,
31
- int ibcast_tag );
30
+ mca_coll_base_module_t * module );
32
31
33
32
static ompi_coll_adapt_algorithm_index_t ompi_coll_adapt_ibcast_algorithm_index [] = {
34
33
{0 , (uintptr_t ) ompi_coll_adapt_ibcast_tuned },
@@ -158,11 +157,11 @@ static int send_cb(ompi_request_t * req)
158
157
"[%d]: Send(start in send cb): segment %d to %d at buff %p send_count %d tag %d\n" ,
159
158
ompi_comm_rank (send_context -> con -> comm ), send_context -> frag_id ,
160
159
send_context -> peer , (void * ) send_context -> buff , send_count ,
161
- ( send_context -> con -> ibcast_tag << 16 ) + new_id ));
160
+ send_context -> con -> ibcast_tag - new_id ));
162
161
err =
163
162
MCA_PML_CALL (isend
164
163
(send_buff , send_count , send_context -> con -> datatype , send_context -> peer ,
165
- ( send_context -> con -> ibcast_tag << 16 ) + new_id ,
164
+ send_context -> con -> ibcast_tag - new_id ,
166
165
MCA_PML_BASE_SEND_SYNCHRONOUS , send_context -> con -> comm , & send_req ));
167
166
if (MPI_SUCCESS != err ) {
168
167
OPAL_THREAD_UNLOCK (context -> con -> mutex );
@@ -245,10 +244,10 @@ static int recv_cb(ompi_request_t * req)
245
244
"[%d]: Recv(start in recv cb): segment %d from %d at buff %p recv_count %d tag %d\n" ,
246
245
ompi_comm_rank (context -> con -> comm ), context -> frag_id , context -> peer ,
247
246
(void * ) recv_buff , recv_count ,
248
- ( recv_context -> con -> ibcast_tag << 16 ) + recv_context -> frag_id ));
247
+ recv_context -> con -> ibcast_tag - recv_context -> frag_id ));
249
248
MCA_PML_CALL (irecv
250
249
(recv_buff , recv_count , recv_context -> con -> datatype , recv_context -> peer ,
251
- ( recv_context -> con -> ibcast_tag << 16 ) + recv_context -> frag_id ,
250
+ recv_context -> con -> ibcast_tag - recv_context -> frag_id ,
252
251
recv_context -> con -> comm , & recv_req ));
253
252
254
253
/* Invoke recvive call back */
@@ -282,12 +281,12 @@ static int recv_cb(ompi_request_t * req)
282
281
"[%d]: Send(start in recv cb): segment %d to %d at buff %p send_count %d tag %d\n" ,
283
282
ompi_comm_rank (send_context -> con -> comm ), send_context -> frag_id ,
284
283
send_context -> peer , (void * ) send_context -> buff , send_count ,
285
- ( send_context -> con -> ibcast_tag << 16 ) + send_context -> frag_id ));
284
+ send_context -> con -> ibcast_tag - send_context -> frag_id ));
286
285
err =
287
286
MCA_PML_CALL (isend
288
287
(send_buff , send_count , send_context -> con -> datatype ,
289
288
send_context -> peer ,
290
- ( send_context -> con -> ibcast_tag << 16 ) + send_context -> frag_id ,
289
+ send_context -> con -> ibcast_tag - send_context -> frag_id ,
291
290
MCA_PML_BASE_SEND_SYNCHRONOUS , send_context -> con -> comm , & send_req ));
292
291
if (MPI_SUCCESS != err ) {
293
292
OPAL_THREAD_UNLOCK (context -> con -> mutex );
@@ -344,12 +343,10 @@ int ompi_coll_adapt_ibcast(void *buff, int count, struct ompi_datatype_t *dataty
344
343
* request = temp_request ;
345
344
return MPI_SUCCESS ;
346
345
}
347
- int ibcast_tag = opal_atomic_add_fetch_32 (& (comm -> c_ibcast_tag ), 1 );
348
- ibcast_tag = ibcast_tag % 4096 ;
349
346
350
347
OPAL_OUTPUT_VERBOSE ((10 , mca_coll_adapt_component .adapt_output ,
351
- "ibcast tag %d root %d, algorithm %d, coll_adapt_ibcast_segment_size %zu, coll_adapt_ibcast_max_send_requests %d, coll_adapt_ibcast_max_recv_requests %d\n" ,
352
- ibcast_tag , root , mca_coll_adapt_component .adapt_ibcast_algorithm ,
348
+ "ibcast root %d, algorithm %d, coll_adapt_ibcast_segment_size %zu, coll_adapt_ibcast_max_send_requests %d, coll_adapt_ibcast_max_recv_requests %d\n" ,
349
+ root , mca_coll_adapt_component .adapt_ibcast_algorithm ,
353
350
mca_coll_adapt_component .adapt_ibcast_segment_size ,
354
351
mca_coll_adapt_component .adapt_ibcast_max_send_requests ,
355
352
mca_coll_adapt_component .adapt_ibcast_max_recv_requests ));
@@ -358,89 +355,82 @@ int ompi_coll_adapt_ibcast(void *buff, int count, struct ompi_datatype_t *dataty
358
355
(ompi_coll_adapt_ibcast_fn_t )
359
356
ompi_coll_adapt_ibcast_algorithm_index [mca_coll_adapt_component .adapt_ibcast_algorithm ].
360
357
algorithm_fn_ptr ;
361
- return bcast_func (buff , count , datatype , root , comm , request , module , ibcast_tag );
358
+ return bcast_func (buff , count , datatype , root , comm , request , module );
362
359
}
363
360
364
361
/*
365
362
* Ibcast functions with different algorithms
366
363
*/
367
364
int ompi_coll_adapt_ibcast_tuned (void * buff , int count , struct ompi_datatype_t * datatype ,
368
- int root , struct ompi_communicator_t * comm ,
369
- ompi_request_t * * request ,
370
- mca_coll_base_module_t * module , int ibcast_tag )
365
+ int root , struct ompi_communicator_t * comm ,
366
+ ompi_request_t * * request ,
367
+ mca_coll_base_module_t * module )
371
368
{
372
369
OPAL_OUTPUT_VERBOSE ((10 , mca_coll_adapt_component .adapt_output , "tuned not implemented\n" ));
373
370
return OMPI_ERR_NOT_IMPLEMENTED ;
374
371
}
375
372
376
373
int ompi_coll_adapt_ibcast_binomial (void * buff , int count , struct ompi_datatype_t * datatype ,
377
- int root , struct ompi_communicator_t * comm ,
378
- ompi_request_t * * request , mca_coll_base_module_t * module ,
379
- int ibcast_tag )
374
+ int root , struct ompi_communicator_t * comm ,
375
+ ompi_request_t * * request , mca_coll_base_module_t * module )
380
376
{
381
377
ompi_coll_tree_t * tree = ompi_coll_base_topo_build_bmtree (comm , root );
382
378
int err =
383
379
ompi_coll_adapt_ibcast_generic (buff , count , datatype , root , comm , request , module , tree ,
384
- mca_coll_adapt_component .adapt_ibcast_segment_size ,
385
- ibcast_tag );
380
+ mca_coll_adapt_component .adapt_ibcast_segment_size );
386
381
return err ;
387
382
}
388
383
389
384
int ompi_coll_adapt_ibcast_in_order_binomial (void * buff , int count , struct ompi_datatype_t * datatype ,
390
- int root , struct ompi_communicator_t * comm ,
391
- ompi_request_t * * request ,
392
- mca_coll_base_module_t * module , int ibcast_tag )
385
+ int root , struct ompi_communicator_t * comm ,
386
+ ompi_request_t * * request ,
387
+ mca_coll_base_module_t * module )
393
388
{
394
389
ompi_coll_tree_t * tree = ompi_coll_base_topo_build_in_order_bmtree (comm , root );
395
390
int err =
396
391
ompi_coll_adapt_ibcast_generic (buff , count , datatype , root , comm , request , module , tree ,
397
- mca_coll_adapt_component .adapt_ibcast_segment_size ,
398
- ibcast_tag );
392
+ mca_coll_adapt_component .adapt_ibcast_segment_size );
399
393
return err ;
400
394
}
401
395
402
396
403
397
int ompi_coll_adapt_ibcast_binary (void * buff , int count , struct ompi_datatype_t * datatype , int root ,
404
- struct ompi_communicator_t * comm , ompi_request_t * * request ,
405
- mca_coll_base_module_t * module , int ibcast_tag )
398
+ struct ompi_communicator_t * comm , ompi_request_t * * request ,
399
+ mca_coll_base_module_t * module )
406
400
{
407
401
ompi_coll_tree_t * tree = ompi_coll_base_topo_build_tree (2 , comm , root );
408
402
int err =
409
403
ompi_coll_adapt_ibcast_generic (buff , count , datatype , root , comm , request , module , tree ,
410
- mca_coll_adapt_component .adapt_ibcast_segment_size ,
411
- ibcast_tag );
404
+ mca_coll_adapt_component .adapt_ibcast_segment_size );
412
405
return err ;
413
406
}
414
407
415
408
int ompi_coll_adapt_ibcast_pipeline (void * buff , int count , struct ompi_datatype_t * datatype ,
416
- int root , struct ompi_communicator_t * comm ,
417
- ompi_request_t * * request , mca_coll_base_module_t * module ,
418
- int ibcast_tag )
409
+ int root , struct ompi_communicator_t * comm ,
410
+ ompi_request_t * * request , mca_coll_base_module_t * module )
419
411
{
420
412
ompi_coll_tree_t * tree = ompi_coll_base_topo_build_chain (1 , comm , root );
421
413
int err =
422
414
ompi_coll_adapt_ibcast_generic (buff , count , datatype , root , comm , request , module , tree ,
423
- mca_coll_adapt_component .adapt_ibcast_segment_size ,
424
- ibcast_tag );
415
+ mca_coll_adapt_component .adapt_ibcast_segment_size );
425
416
return err ;
426
417
}
427
418
428
419
429
420
int ompi_coll_adapt_ibcast_chain (void * buff , int count , struct ompi_datatype_t * datatype , int root ,
430
- struct ompi_communicator_t * comm , ompi_request_t * * request ,
431
- mca_coll_base_module_t * module , int ibcast_tag )
421
+ struct ompi_communicator_t * comm , ompi_request_t * * request ,
422
+ mca_coll_base_module_t * module )
432
423
{
433
424
ompi_coll_tree_t * tree = ompi_coll_base_topo_build_chain (4 , comm , root );
434
425
int err =
435
426
ompi_coll_adapt_ibcast_generic (buff , count , datatype , root , comm , request , module , tree ,
436
- mca_coll_adapt_component .adapt_ibcast_segment_size ,
437
- ibcast_tag );
427
+ mca_coll_adapt_component .adapt_ibcast_segment_size );
438
428
return err ;
439
429
}
440
430
441
431
int ompi_coll_adapt_ibcast_linear (void * buff , int count , struct ompi_datatype_t * datatype , int root ,
442
- struct ompi_communicator_t * comm , ompi_request_t * * request ,
443
- mca_coll_base_module_t * module , int ibcast_tag )
432
+ struct ompi_communicator_t * comm , ompi_request_t * * request ,
433
+ mca_coll_base_module_t * module )
444
434
{
445
435
int fanout = ompi_comm_size (comm ) - 1 ;
446
436
ompi_coll_tree_t * tree ;
@@ -453,16 +443,15 @@ int ompi_coll_adapt_ibcast_linear(void *buff, int count, struct ompi_datatype_t
453
443
}
454
444
int err =
455
445
ompi_coll_adapt_ibcast_generic (buff , count , datatype , root , comm , request , module , tree ,
456
- mca_coll_adapt_component .adapt_ibcast_segment_size ,
457
- ibcast_tag );
446
+ mca_coll_adapt_component .adapt_ibcast_segment_size );
458
447
return err ;
459
448
}
460
449
461
450
462
451
int ompi_coll_adapt_ibcast_generic (void * buff , int count , struct ompi_datatype_t * datatype , int root ,
463
- struct ompi_communicator_t * comm , ompi_request_t * * request ,
464
- mca_coll_base_module_t * module , ompi_coll_tree_t * tree ,
465
- size_t seg_size , int ibcast_tag )
452
+ struct ompi_communicator_t * comm , ompi_request_t * * request ,
453
+ mca_coll_base_module_t * module , ompi_coll_tree_t * tree ,
454
+ size_t seg_size )
466
455
{
467
456
int i , j , rank , err ;
468
457
/* The min of num_segs and SEND_NUM or RECV_NUM, in case the num_segs is less than SEND_NUM or RECV_NUM */
@@ -555,11 +544,11 @@ int ompi_coll_adapt_ibcast_generic(void *buff, int count, struct ompi_datatype_t
555
544
con -> mutex = mutex ;
556
545
con -> request = temp_request ;
557
546
con -> tree = tree ;
558
- con -> ibcast_tag = ibcast_tag ;
547
+ con -> ibcast_tag = ompi_coll_base_nbc_reserve_tags ( comm , num_segs ) ;
559
548
560
549
OPAL_OUTPUT_VERBOSE ((30 , mca_coll_adapt_component .adapt_output ,
561
550
"[%d]: Ibcast, root %d, tag %d\n" , rank , root ,
562
- ibcast_tag ));
551
+ con -> ibcast_tag ));
563
552
OPAL_OUTPUT_VERBOSE ((30 , mca_coll_adapt_component .adapt_output ,
564
553
"[%d]: con->mutex = %p, num_children = %d, num_segs = %d, real_seg_size = %d, seg_count = %d, tree_adreess = %p\n" ,
565
554
rank , (void * ) con -> mutex , tree -> tree_nextsize , num_segs ,
@@ -610,11 +599,11 @@ int ompi_coll_adapt_ibcast_generic(void *buff, int count, struct ompi_datatype_t
610
599
OPAL_OUTPUT_VERBOSE ((30 , mca_coll_adapt_component .adapt_output ,
611
600
"[%d]: Send(start in main): segment %d to %d at buff %p send_count %d tag %d\n" ,
612
601
rank , context -> frag_id , context -> peer ,
613
- (void * ) send_buff , send_count , ( ibcast_tag << 16 ) + i ));
602
+ (void * ) send_buff , send_count , con -> ibcast_tag - i ));
614
603
err =
615
604
MCA_PML_CALL (isend
616
605
(send_buff , send_count , datatype , context -> peer ,
617
- ( ibcast_tag << 16 ) + i , MCA_PML_BASE_SEND_SYNCHRONOUS , comm ,
606
+ con -> ibcast_tag - i , MCA_PML_BASE_SEND_SYNCHRONOUS , comm ,
618
607
& send_req ));
619
608
if (MPI_SUCCESS != err ) {
620
609
return err ;
@@ -668,11 +657,11 @@ int ompi_coll_adapt_ibcast_generic(void *buff, int count, struct ompi_datatype_t
668
657
"[%d]: Recv(start in main): segment %d from %d at buff %p recv_count %d tag %d\n" ,
669
658
ompi_comm_rank (context -> con -> comm ), context -> frag_id ,
670
659
context -> peer , (void * ) recv_buff , recv_count ,
671
- ( ibcast_tag << 16 ) + i ));
660
+ con -> ibcast_tag - i ));
672
661
err =
673
662
MCA_PML_CALL (irecv
674
663
(recv_buff , recv_count , datatype , context -> peer ,
675
- ( ibcast_tag << 16 ) + i , comm , & recv_req ));
664
+ con -> ibcast_tag - i , comm , & recv_req ));
676
665
if (MPI_SUCCESS != err ) {
677
666
return err ;
678
667
}
0 commit comments