Added strategy parameters for maximum buffer size and maximum message size
[charm.git] / src / ck-com / PrioStreaming.h
1
2 #ifndef PRIO_STREAMING
3 #define PRIO_STREAMING
4
5 #include "ComlibManager.h"
6 #include "StreamingStrategy.h"
7
8
9 class PrioStreaming : public StreamingStrategy {
10  protected:
11     int basePriority;
12     CkVec<int> minPrioVec;
13     
14  public:
15     /**
16      Create a priority based streaming strategy, suitable for passing
17      to ComlibManager.  
18      These are the criteria for flushing all pending messages: 
19
20      - it's been at least period (in ms) since the last flush, or 
21
22      - the processor just went idle.  Thses criteria flush a single 
23      PE's pending messages: 
24
25      - more than bufferMax messages to buffered for one PE.
26
27      - Current message is a high priority message
28     */
29
30     PrioStreaming(int periodMs=DEFAULT_TIMEOUT, 
31                   int bufferMax=MAX_NUM_STREAMING_MESSAGES, 
32                   int prio=0,
33                   int msgSizeMax=MAX_STREAMING_MESSAGE_SIZE,
34                   int bufSizeMAX=MAX_STREAMING_MESSAGE_SIZE*MAX_NUM_STREAMING_MESSAGES);
35     PrioStreaming(CkMigrateMessage *m) : StreamingStrategy(m) {}
36     
37     virtual void insertMessage(CharmMessageHolder *msg);
38
39     //If new priority is greater than current priority, 
40     //then flush all queues which have relatively high priority messages
41     inline void setBasePriority(int p) {
42         if(p > basePriority) {
43             for(int count =0; count < CkNumPes(); count++)
44                 if(minPrioVec[count] <= p)
45                     flushPE(count);
46         }        
47         basePriority = p;
48     }
49
50     virtual void pup(PUP::er &p);
51     PUPable_decl(PrioStreaming);
52 };
53 #endif