00001 #ifndef _PHXEVENT_H
00002 #define _PHXEVENT_H
00003
00004 #include <sst/core/event.h>
00005
00006
00007
00008
00009 struct matVecAddrList {
00010 vector<unsigned int> CV, I, X;
00011 unsigned int sum;
00012 };
00013
00014 struct forceCAddrList {
00015 vector<unsigned int> inits;
00016 vector<unsigned int> a_fs;
00017 };
00018
00019 struct pagerankAddrList {
00020 vector<unsigned int> inits;
00021 vector<unsigned int> neigh;
00022 vector<unsigned int> care_neigh;
00023 int num_care_neigh;
00024 unsigned int total;
00025 };
00026
00027 typedef enum {MATVEC,FORCE_CALC,RESET,PAGERANK,LAST_EVENT} PHXEventType_t;
00028 typedef enum {INIT,
00029
00030
00031 ISSUE_I_AND_CV,
00032 WAIT_I_AND_CV,
00033 ISSUE_X,
00034 WAIT_X,
00035
00036
00037 ISSUE_INITS,
00038 WAIT_INITS_AND_CALC,
00039 CHECK_BRANCH,
00040 CALC_FORCE,
00041 ISSUE_AF_READS,
00042 WAIT_AF_READS_AND_CALC,
00043 ISSUE_SENDS,
00044
00045
00046
00047
00048 ISSUE_NEIGH,
00049 WAIT_NEIGH,
00050 ISSUE_CARE_NEIGH,
00051 WAIT_CARE_NEIGH_AND_CALC,
00052 ISSUE_SEND,
00053
00054 LAST_STATE
00055
00056 } PHXEventState_t;
00057
00058 class PHXEvent : public SST::Event {
00059 public:
00060 PHXEvent() : SST::Event() { }
00061 unsigned int eventID;
00062 PHXEventType_t eventType;
00063 PHXEventState_t state;
00064
00065 matVecAddrList mvAddrs;
00066 forceCAddrList fAddrs;
00067 pagerankAddrList pAddrs;
00068 bool tookBranch;
00069
00070 private:
00071 friend class boost::serialization::access;
00072 template<class Archive>
00073 void
00074 serialize(Archive & ar, const unsigned int version )
00075 {
00076 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Event);
00077 ar & BOOST_SERIALIZATION_NVP(eventType);
00078 }
00079 };
00080
00081 #endif