00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef SST_CORE_SYNC_H
00014 #define SST_CORE_SYNC_H
00015
00016 #include <map>
00017
00018 #include "sst/core/sst_types.h"
00019 #include "sst/core/action.h"
00020
00021 namespace SST {
00022
00023 #define _SYNC_DBG( fmt, args...) __DBG( DBG_SYNC, Sync, fmt, ## args )
00024
00025 class SyncQueue;
00026 class Link;
00027 class TimeConverter;
00028
00029 class Sync : public Action {
00030 public:
00031 Sync(TimeConverter* period);
00032 ~Sync();
00033
00034 SyncQueue* registerLink(int rank, LinkId_t link_id, Link* link);
00035 void execute(void);
00036
00037 private:
00038 typedef std::map<int, std::pair<SyncQueue*, std::vector<Activity*>* > > comm_map_t;
00039 typedef std::map<LinkId_t, Link*> link_map_t;
00040
00041 Sync() { }
00042
00043 TimeConverter* period;
00044 comm_map_t comm_map;
00045 link_map_t link_map;
00046 boost::mpi::communicator comm;
00047
00048 friend class boost::serialization::access;
00049 template<class Archive>
00050 void serialize(Archive & ar, const unsigned int version);
00051 };
00052
00053 }
00054
00055 BOOST_CLASS_EXPORT_KEY(SST::Sync)
00056
00057 #endif // SST_SYNC_H