New comlib strategies for CPMD. Propagates faster than a ring and is largely contenti...
[charm.git] / src / ck-com / MultiRingMulticast.h
1 #ifndef MULTIRING_MULTICAST_STRATEGY
2 #define MULTIRING_MULTICAST_STRATEGY
3
4 #include "DirectMulticastStrategy.h"
5
6 /***************************************************************
7               Section multicast strategy that sends data along a ring 
8               with multiple start points on the ring
9
10       Sameer - 04/19/05
11 *************************************************************/
12
13
14 class MultiRingMulticast: public DirectMulticastStrategy {
15     
16  protected:
17     
18     int isEndOfRing(int next_pe, int src_pe);
19     
20     //Defining the two entries of the section multicast interface
21     virtual ComlibSectionHashObject *createObjectOnSrcPe(int nelements, 
22                                                          CkArrayIndexMax *elements);
23     
24     virtual ComlibSectionHashObject *createObjectOnIntermediatePe
25         (int nelements, CkArrayIndexMax *elements, int src_pe);
26     
27  public:
28     
29     //Array constructor
30     MultiRingMulticast(CkArrayID dest_id, int flag = 0);    
31     MultiRingMulticast(CkMigrateMessage *m) : DirectMulticastStrategy(m){}
32
33     //Destructor
34     ~MultiRingMulticast() {}
35     
36     void pup(PUP::er &p);    
37     void beginProcessing(int nelements);
38     
39     PUPable_decl(MultiRingMulticast);
40 };
41
42 #endif
43