Removing assert statement that caused strategies only to work with 1d chare arrays.
[charm.git] / src / ck-com / MultiRingMulticast.h
1 /**
2    @addtogroup ComlibCharmStrategy
3    @{
4    @file 
5    @brief Section multicast strategy that sends data along two rings
6
7 */
8
9 #ifndef MULTIRING_MULTICAST_STRATEGY
10 #define MULTIRING_MULTICAST_STRATEGY
11
12 #include "MulticastStrategy.h"
13
14 /**
15  Multicast strategy that sends the data using two rings. It divides the total
16  number of processors involved in the multicast in two (after ordering them).
17  Then two rings are created, one starting with the source processor and its
18  half, the other starting at (CkMyPe()+CkNumPes()/2)%CkNumPes().
19 */
20 class MultiRingMulticastStrategy: public MulticastStrategy {
21     
22  protected:
23     
24     ///Defines the two entries of the section multicast interface
25   virtual void createObjectOnSrcPe(ComlibSectionHashObject *obj, int npes, ComlibMulticastIndexCount *pelist);
26
27     ///Creates the propagation across the half ring
28     virtual void createObjectOnIntermediatePe(ComlibSectionHashObject *obj, int npes, ComlibMulticastIndexCount *counts, int srcpe);
29
30     ///Specifies that the multicast messages need the processor list to be ordered
31     virtual int needSorting() { return 1; }
32     
33  public:
34     //Array constructor
35     MultiRingMulticastStrategy(): MulticastStrategy() {}
36     MultiRingMulticastStrategy(CkMigrateMessage *m): MulticastStrategy(m) {}
37
38    
39     PUPable_decl(MultiRingMulticastStrategy);
40 };
41
42 #endif
43
44 /*@}*/