00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef _INTROSPECTOR_CPUTEMPERATURE_H
00013 #define _INTROSPECTOR_CPUTEMPERATURE_H
00014
00015 #include <sst/core/eventFunctor.h>
00016
00017 #include <sst/core/introspector.h>
00018
00019
00020 using namespace SST;
00021
00022 #if DBG_INTROSPECTOR_CPUTEMPERATURE
00023 #define _INTROSPECTOR_CPUTEMPERATURE_DBG( fmt, args...)\
00024 printf( "%d:Introspector_cpuTemperature::%s():%d: "fmt, _debug_rank, __FUNCTION__,__LINE__, ## args )
00025 #else
00026 #define _INTROSPECTOR_CPUTEMPERATURE_DBG( fmt, args...)
00027 #endif
00028
00029
00030
00031 class Introspector_cpuTemperature : public Introspector {
00032
00033 public:
00034 Introspector_cpuTemperature( ComponentId_t id, Component::Params_t& params ) :
00035 Introspector( id),
00036 params( params ),
00037 frequency( "1ns" )
00038 {
00039 _INTROSPECTOR_CPUTEMPERATURE_DBG( "new id=%lu\n", id );
00040
00041 registerExit();
00042
00043 Component::Params_t::iterator it = params.begin();
00044 while( it != params.end() ) {
00045 _INTROSPECTOR_CPUTEMPERATURE_DBG("key=%s value=%s\n",
00046 it->first.c_str(),it->second.c_str());
00047 if ( ! it->first.compare("period") ) {
00048 frequency = it->second;
00049 }
00050 else if ( ! it->first.compare("model") ) {
00051 model = it->second;
00052 }
00053 ++it;
00054 }
00055
00056
00057 handler = new EventHandler< Introspector_cpuTemperature, bool, Cycle_t >
00058 ( this, &Introspector_cpuTemperature::pullData );
00059 _INTROSPECTOR_CPUTEMPERATURE_DBG("-->frequency=%s\n",frequency.c_str());
00060 TimeConverter* tc = registerClock( frequency, handler );
00061 printf("INTROSPECTOR_CPUTEMPERATURE period: %ld\n",tc->getFactor());
00062 _INTROSPECTOR_CPUTEMPERATURE_DBG("Done registering clock\n");
00063
00064
00065 }
00066 int Setup() {
00067 std::pair<bool, int> pint;
00068 std::pair<bool, double*> pdouble;
00069
00070
00071 MyCompList = getModels(model);
00072
00073 for (std::list<Component*>::iterator i = MyCompList.begin();
00074 i != MyCompList.end(); ++i) {
00075
00076
00077 monitorComponent(*i);
00078
00079
00080 pint = (*i)->ifMonitorIntData("core_temperature");
00081
00082
00083
00084
00085
00086
00087
00088 if(pint.first){
00089
00090
00091 addToIntDatabase(*i, pint.second);
00092
00093 }
00094
00095
00096
00097
00098
00099
00100 }
00101
00102 _INTROSPECTOR_CPUTEMPERATURE_DBG("\n");
00103 return 0;
00104 }
00105 int Finish() {
00106 _INTROSPECTOR_CPUTEMPERATURE_DBG("\n");
00107 unregisterExit();
00108 return 0;
00109 }
00110
00111
00112 private:
00113
00114 Introspector_cpuTemperature( const Introspector_cpuTemperature& c );
00115 Introspector_cpuTemperature() {}
00116
00117 bool pullData( Cycle_t );
00118
00119
00120 ClockHandler_t* handler;
00121 Component::Params_t params;
00122 std::string frequency;
00123 std::string model;
00124
00125 #if WANT_CHECKPOINT_SUPPORT2
00126 BOOST_SERIALIZE {
00127 printf("introspector_cpuTemperature::serialize()\n");
00128 _AR_DBG( Introspector_cpuTemperature, "start\n" );
00129 printf(" doing void cast\n");
00130 BOOST_VOID_CAST_REGISTER( Introspector_cpuTemperature*, Introspector* );
00131 printf(" base serializing: introspector\n");
00132 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Introspector );
00133 printf(" serializing: handler\n");
00134 ar & BOOST_SERIALIZATION_NVP( handler );
00135 _AR_DBG( Introspector_cpuTemperature, "done\n" );
00136 }
00137 #endif
00138 };
00139
00140 #endif