Hi Jason, we run Simflex only on 32-bit machines, here at CMU. We haven't thoroughly tested Simflex on a 64-bit machine. However, we have a list of modifications that need to be applied for Simflex to compile and run on a 64-bit machine. I attach a file with these modifications. Please note that any line numbers reported in there may not match your version of Simflex code or either the latest released version, since they haven't been applied yet on the codebase.
Regards, Evangelos Vlachos On Wed, 22 Oct 2008, Jason Zebchuk wrote: > Hi guys, > > Do you have any experience trying to run simulations on 64-bit machines? I'm > trying to take advantage of a larger memory space to speed up some of our > simulations. > > Is there anything you know of that might cause problems with compiling and > running Flexus on a 64-bit machine? > > > > Jason > _______________________________________________ > SimFlex mailing list > [email protected] > https://sos.ece.cmu.edu/mailman/listinfo/simflex > SimFlex web page: http://www.ece.cmu.edu/~simflex > -------------- next part -------------- diff -c -r -b --exclude=.svn trunk/components/Common/BranchPredictor.cpp test/components/Common/BranchPredictor.cpp *** trunk/components/Common/BranchPredictor.cpp 2007-07-06 14:31:00.000000000 -0400 --- test/components/Common/BranchPredictor.cpp 2007-10-01 14:39:58.186318000 -0400 *************** *** 37,42 **** --- 37,44 ---- #include <boost/archive/binary_oarchive.hpp> #include <boost/archive/binary_iarchive.hpp> + #include <boost/archive/text_oarchive.hpp> + #include <boost/archive/text_iarchive.hpp> #include <list> #include <iostream> *************** *** 720,727 **** DBG_(Verb, ( << "Leaving feedback.") ); } ! ! void saveState(std::string const & aDirName) const { std::string fname( aDirName); fname += "/bpred-" + boost::padded_string_cast<2,'0'>(theIndex); std::ofstream ofs(fname.c_str(), std::ios::binary); --- 722,728 ---- DBG_(Verb, ( << "Leaving feedback.") ); } ! void saveStateBinary(std::string const & aDirName) const { std::string fname( aDirName); fname += "/bpred-" + boost::padded_string_cast<2,'0'>(theIndex); std::ofstream ofs(fname.c_str(), std::ios::binary); *************** *** 736,747 **** ofs.close(); } ! void loadState(std::string const & aDirName) { std::string fname( aDirName); fname += "/bpred-" + boost::padded_string_cast<2,'0'>(theIndex); std::ifstream ifs(fname.c_str(), std::ios::binary); if (ifs.good()) { boost::archive::binary_iarchive ia(ifs); ia >> theBTB; --- 737,763 ---- ofs.close(); } + void saveState(std::string const & aDirName) const { + std::string fname( aDirName); + fname += "/bpredtxt-" + boost::padded_string_cast<2,'0'>(theIndex); + std::ofstream ofs(fname.c_str()); + boost::archive::text_oarchive oa(ofs); ! oa << theBTB; ! oa << theBimodal; ! oa << theMeta; ! oa << theGShare; ! ! // close archive ! ofs.close(); ! } ! ! void loadStateBinary(std::string const & aDirName) { std::string fname( aDirName); fname += "/bpred-" + boost::padded_string_cast<2,'0'>(theIndex); std::ifstream ifs(fname.c_str(), std::ios::binary); if (ifs.good()) { + try { boost::archive::binary_iarchive ia(ifs); ia >> theBTB; *************** *** 751,761 **** --- 767,801 ---- DBG_( Dev, ( << theName << " loaded branch predictor. BTB size: " << theBTB.theBTBSets << " by " << theBTB.theBTBAssoc << " Bimodal size: " << theBimodal.theSize << " Meta size: " << theMeta.theSize << " Gshare size: " << theGShare.theShiftRegSize ) ); ifs.close(); + } catch (...) { + DBG_Assert( false, ( << "Unable to load bpred state" ) ); + } + } else { DBG_(Dev, ( << "Unable to load bpred state " << fname << ". Using default state." ) ); } } + + void loadState(std::string const & aDirName) { + std::string fname( aDirName); + fname += "/bpredtxt-" + boost::padded_string_cast<2,'0'>(theIndex); + std::ifstream ifs(fname.c_str()); + if (ifs.good()) { + boost::archive::text_iarchive ia(ifs); + + ia >> theBTB; + ia >> theBimodal; + ia >> theMeta; + ia >> theGShare; + DBG_( Dev, ( << theName << " loaded branch predictor. BTB size: " << theBTB.theBTBSets << " by " << theBTB.theBTBAssoc << " Bimodal size: " << theBimodal.theSize << " Meta size: " << theMeta.theSize << " Gshare size: " << theGShare.theShiftRegSize ) ); + + ifs.close(); + } else { + loadStateBinary(aDirName); + } + } + }; *************** *** 1060,1066 **** } ! void saveState(std::string const & aDirName) const { std::string fname( aDirName); fname += "/bpred-" + boost::padded_string_cast<2,'0'>(theIndex); std::ofstream ofs(fname.c_str(), std::ios::binary); --- 1100,1106 ---- } ! void saveStateBinary(std::string const & aDirName) const { std::string fname( aDirName); fname += "/bpred-" + boost::padded_string_cast<2,'0'>(theIndex); std::ofstream ofs(fname.c_str(), std::ios::binary); *************** *** 1075,1086 **** --- 1115,1165 ---- ofs.close(); } + void saveState(std::string const & aDirName) const { + std::string fname( aDirName); + fname += "/bpredtxt-" + boost::padded_string_cast<2,'0'>(theIndex); + std::ofstream ofs(fname.c_str()); + boost::archive::text_oarchive oa(ofs); + + oa << theBTB; + oa << theBimodal; + oa << theMeta; + oa << theGShare; + + // close archive + ofs.close(); + } + void loadState(std::string const & aDirName) { + + std::string fname( aDirName); + fname += "/bpred-" + boost::padded_string_cast<2,'0'>(theIndex); + std::ifstream ifs(fname.c_str()); + if (ifs.good()) { + boost::archive::text_iarchive ia(ifs); + + + ia >> theBTB; + ia >> theBimodal; + ia >> theMeta; + ia >> theGShare; + DBG_( Dev, ( << theName << " loaded branch predictor. BTB size: " << theBTB.theBTBSets << " by " << theBTB.theBTBAssoc << " Bimodal size: " << theBimodal.theSize << " Meta size: " << theMeta.theSize << " Gshare size: " << theGShare.theShiftRegSize ) ); + + + ifs.close(); + } else { + loadStateBinary(aDirName); + DBG_(Dev, ( << "Unable to load bpred state " << fname << ". Using default state." ) ); + } + } + + void loadStateBinary(std::string const & aDirName) { std::string fname( aDirName); fname += "/bpred-" + boost::padded_string_cast<2,'0'>(theIndex); std::ifstream ifs(fname.c_str(), std::ios::binary); if (ifs.good()) { + try { boost::archive::binary_iarchive ia(ifs); ia >> theBTB; *************** *** 1089,1096 **** ia >> theGShare; DBG_( Dev, ( << theName << " loaded branch predictor. BTB size: " << theBTB.theBTBSets << " by " << theBTB.theBTBAssoc << " Bimodal size: " << theBimodal.theSize << " Meta size: " << theMeta.theSize << " Gshare size: " << theGShare.theShiftRegSize ) ); - ifs.close(); } else { DBG_(Dev, ( << "Unable to load bpred state " << fname << ". Using default state." ) ); } --- 1168,1177 ---- ia >> theGShare; DBG_( Dev, ( << theName << " loaded branch predictor. BTB size: " << theBTB.theBTBSets << " by " << theBTB.theBTBAssoc << " Bimodal size: " << theBimodal.theSize << " Meta size: " << theMeta.theSize << " Gshare size: " << theGShare.theShiftRegSize ) ); ifs.close(); + } catch (...) { + DBG_Assert( false, ( << "Unable to load bpred state" ) ); + } } else { DBG_(Dev, ( << "Unable to load bpred state " << fname << ". Using default state." ) ); } *************** *** 1109,1115 **** } std::ostream & operator << (std::ostream & anOstream, eBranchType aType) { ! char * types[] = { "NonBranch" , "Conditional" , "Unconditional" --- 1190,1196 ---- } std::ostream & operator << (std::ostream & anOstream, eBranchType aType) { ! char const * types[] = { "NonBranch" , "Conditional" , "Unconditional" *************** *** 1125,1131 **** } std::ostream & operator << (std::ostream & anOstream, eDirection aDir) { ! char * dir[] = { "StronglyTaken" , "Taken" , "NotTaken" --- 1206,1212 ---- } std::ostream & operator << (std::ostream & anOstream, eDirection aDir) { ! char const * dir[] = { "StronglyTaken" , "Taken" , "NotTaken" diff -c -r -b --exclude=.svn trunk/components/TMSTracer/common.hpp test/components/TMSTracer/common.hpp *** trunk/components/TMSTracer/common.hpp 2007-07-06 14:30:53.000000000 -0400 --- test/components/TMSTracer/common.hpp 2007-10-05 03:51:36.543061000 -0400 *************** *** 91,97 **** } ! typedef unsigned long tAddress; typedef unsigned long long tVAddress; typedef int tID; --- 91,97 ---- } ! typedef unsigned int tAddress; typedef unsigned long long tVAddress; typedef int tID; *************** *** 120,125 **** --- 120,126 ---- }; struct TraceData { + TraceData() {} TraceData( unsigned long long aTime, tEventType anEventType, tID aNode, tAddress anAddress, tVAddress aPC, tFillType aFillType, tFillLevel aFillLevel, bool isOS ) : theTime(aTime) , theEventType(anEventType) *************** *** 135,141 **** tEventType theEventType; tID theNode; tAddress theAddress; ! tVAddress thePC; tFillType theFillType; tFillLevel theFillLevel; bool theOS; --- 136,142 ---- tEventType theEventType; tID theNode; tAddress theAddress; ! tVAddress thePC __attribute__ ((packed)); tFillType theFillType; tFillLevel theFillLevel; bool theOS; diff -c -r -b --exclude=.svn trunk/components/v9Decoder/InstructionComponentBuffer.hpp test/components/v9Decoder/InstructionComponentBuffer.hpp *** trunk/components/v9Decoder/InstructionComponentBuffer.hpp 2007-07-06 14:30:49.000000000 -0400 --- test/components/v9Decoder/InstructionComponentBuffer.hpp 2007-10-01 03:42:23.633501000 -0400 *************** *** 44,50 **** #include <core/types.hpp> #include <core/stats.hpp> ! static const int kICBSize = 2048; namespace nv9Decoder { extern Flexus::Stat::StatCounter theICBs; --- 44,50 ---- #include <core/types.hpp> #include <core/stats.hpp> ! static const unsigned int kICBSize = 2048; namespace nv9Decoder { extern Flexus::Stat::StatCounter theICBs; *************** *** 73,86 **** } void * alloc(size_t aSize) { ! if ( theFreeSpace - aSize < 0) { theFreeSpace = 0; theExtensionBuffer = new InstructionComponentBuffer(); return theExtensionBuffer->alloc( aSize ); } void * tmp = theNextAlloc; theNextAlloc += aSize; theFreeSpace -= aSize; return tmp; } }; --- 73,90 ---- } void * alloc(size_t aSize) { ! DBG_Assert( aSize < kICBSize ); ! if ( theFreeSpace - static_cast<int>(aSize) < 0) { theFreeSpace = 0; + if (theExtensionBuffer == 0) { theExtensionBuffer = new InstructionComponentBuffer(); + } return theExtensionBuffer->alloc( aSize ); } void * tmp = theNextAlloc; theNextAlloc += aSize; theFreeSpace -= aSize; + DBG_Assert(theFreeSpace >= 0); return tmp; } }; *************** *** 100,102 **** --- 104,107 ---- } //nv9Decoder #endif //FLEXUS_v9DECODER_INSTRUCTIONCOMPONENTBUFFER_HPP_INCLUDED + diff -c -r -b --exclude=.svn trunk/components/v9Decoder/SemanticInstruction.hpp test/components/v9Decoder/SemanticInstruction.hpp *** trunk/components/v9Decoder/SemanticInstruction.hpp 2007-07-06 14:30:50.000000000 -0400 --- test/components/v9Decoder/SemanticInstruction.hpp 2007-10-01 02:44:28.799271000 -0400 *************** *** 56,62 **** private: OperandMap theOperands; ! InstructionComponentBuffer theICB; EffectChain theDispatchEffects; std::list< BaseSemanticAction * > theDispatchActions; --- 56,62 ---- private: OperandMap theOperands; ! mutable InstructionComponentBuffer theICB; EffectChain theDispatchEffects; std::list< BaseSemanticAction * > theDispatchActions; *************** *** 102,108 **** SemanticInstruction(VirtualMemoryAddress aPC, VirtualMemoryAddress aNextPC, Opcode anOpcode, boost::intrusive_ptr<BPredState> bp_state, unsigned int aCPU, long long aSequenceNo); virtual ~SemanticInstruction(); ! InstructionComponentBuffer & icb() { return theICB; } bool advancesSimics() const; void setIsMicroOp(bool isUop) { theIsMicroOp = isUop; } --- 102,108 ---- SemanticInstruction(VirtualMemoryAddress aPC, VirtualMemoryAddress aNextPC, Opcode anOpcode, boost::intrusive_ptr<BPredState> bp_state, unsigned int aCPU, long long aSequenceNo); virtual ~SemanticInstruction(); ! InstructionComponentBuffer & icb() const { return theICB; } bool advancesSimics() const; void setIsMicroOp(bool isUop) { theIsMicroOp = isUop; } diff -c -r -b --exclude=.svn trunk/core/components/ComponentManager.cpp test/core/components/ComponentManager.cpp *** trunk/core/components/ComponentManager.cpp 2007-07-06 14:31:08.000000000 -0400 --- test/core/components/ComponentManager.cpp 2007-09-29 17:12:39.718930000 -0400 *************** *** 94,104 **** void initComponents() { DBG_( Dev, ( << "Initalizing components..." ) ); ! std::for_each ! ( theComponents.begin() ! , theComponents.end() ! , ll::bind( &ComponentInterface::initialize, ll::_1 ) ! ); } bool isQuiesced() const { --- 94,106 ---- void initComponents() { DBG_( Dev, ( << "Initalizing components..." ) ); ! std::vector< ComponentInterface * >::iterator iter = theComponents.begin(); ! std::vector< ComponentInterface * >::iterator end = theComponents.end(); ! while (iter != end){ ! DBG_( Dev, ( << "Initalizing " << (*iter)->name() ) ); ! (*iter)->initialize(); ! ++iter; ! } } bool isQuiesced() const { diff -c -r -b --exclude=.svn trunk/core/flexus.cpp test/core/flexus.cpp *** trunk/core/flexus.cpp 2007-07-06 14:31:18.000000000 -0400 --- test/core/flexus.cpp 2007-10-06 17:56:46.867740000 -0400 *************** *** 297,305 **** static unsigned long long last_profile = 0; if (theProfileInterval > 0 && theCycleCount - last_profile >= theProfileInterval) { ! DBG_(Dev, Core() ( << "Writing profile at: " << theCycleCount)); ! writeProfile("profile.out"); ! resetProfile(); last_profile = theCycleCount; } --- 297,307 ---- static unsigned long long last_profile = 0; if (theProfileInterval > 0 && theCycleCount - last_profile >= theProfileInterval) { ! //DBG_(Dev, Core() ( << "Writing profile at: " << theCycleCount)); ! DBG_(Dev, Core() ( << "Profiling disabled" ) ); ! ! //writeProfile("profile.out"); ! //resetProfile(); last_profile = theCycleCount; } diff -c -r -b --exclude=.svn trunk/core/performance/profile.hpp test/core/performance/profile.hpp *** trunk/core/performance/profile.hpp 2007-07-06 14:31:17.000000000 -0400 --- test/core/performance/profile.hpp 2007-10-06 17:52:55.048587000 -0400 *************** *** 167,172 **** --- 167,173 ---- } }; + #undef PROFILING_ENABLED #ifdef PROFILING_ENABLED #define FLEXUS_PROFILE() \ diff -c -r -b --exclude=.svn trunk/core/simics/attribute_value.hpp test/core/simics/attribute_value.hpp *** trunk/core/simics/attribute_value.hpp 2007-07-06 14:31:16.000000000 -0400 --- test/core/simics/attribute_value.hpp 2007-09-28 19:38:51.779234000 -0400 *************** *** 64,70 **** struct Nil {}; ! class AttributeValue { API::attr_value_t theSimicsValue; friend class aux_::AttributeFriend; --- 64,70 ---- struct Nil {}; ! struct AttributeValue { API::attr_value_t theSimicsValue; friend class aux_::AttributeFriend; diff -c -r -b --exclude=.svn trunk/core/simics/aux_/simics_command_manager.cpp test/core/simics/aux_/simics_command_manager.cpp *** trunk/core/simics/aux_/simics_command_manager.cpp 2007-07-06 14:31:13.000000000 -0400 --- test/core/simics/aux_/simics_command_manager.cpp 2007-09-29 16:24:58.486285000 -0400 *************** *** 78,84 **** --- 78,91 ---- DBG_Assert( aCommandManager ); DBG_Assert( aParameter ); DBG_( Verb, ( << "Call Gate: Parameter 1" ) ); + if (aParameter->kind == API::Sim_Val_String) { + DBG_(Verb, ( << "String in parameter 1 call gate") ); + reinterpret_cast<SimicsCommandManager *>(aCommandManager)->theParameter1.kind = API::Sim_Val_String; + reinterpret_cast<SimicsCommandManager *>(aCommandManager)->theParameter1.u.string = strdup(aParameter->u.string); + } else { + DBG_(Verb, ( << "Parameter 1 " << aParameter->kind) ); reinterpret_cast<SimicsCommandManager *>(aCommandManager)->theParameter1 = *aParameter; + } return API::Sim_Set_Ok; } *************** *** 86,92 **** --- 93,104 ---- DBG_Assert( aCommandManager ); DBG_Assert( aParameter ); DBG_( Verb, ( << "Call Gate: Parameter 2" ) ); + if (aParameter->kind == API::Sim_Val_String) { + reinterpret_cast<SimicsCommandManager *>(aCommandManager)->theParameter2.kind = API::Sim_Val_String; + reinterpret_cast<SimicsCommandManager *>(aCommandManager)->theParameter2.u.string = strdup(aParameter->u.string); + } else { reinterpret_cast<SimicsCommandManager *>(aCommandManager)->theParameter2 = *aParameter; + } return API::Sim_Set_Ok; } *************** *** 94,100 **** --- 106,119 ---- DBG_Assert( aCommandManager ); DBG_Assert( aParameter ); DBG_( Verb, ( << "Call Gate: Parameter 3" ) ); + + if (aParameter->kind == API::Sim_Val_String) { + reinterpret_cast<SimicsCommandManager *>(aCommandManager)->theParameter3.kind = API::Sim_Val_String; + reinterpret_cast<SimicsCommandManager *>(aCommandManager)->theParameter3.u.string = strdup(aParameter->u.string); + } else { reinterpret_cast<SimicsCommandManager *>(aCommandManager)->theParameter3 = *aParameter; + } + return API::Sim_Set_Ok; } Only in test/core/simics/aux_: simics_command_manager.cpp.bak diff -c -r -b --exclude=.svn trunk/core/simics/configuration_api.hpp test/core/simics/configuration_api.hpp *** trunk/core/simics/configuration_api.hpp 2007-07-06 14:31:16.000000000 -0400 --- test/core/simics/configuration_api.hpp 2007-09-28 19:38:14.212049000 -0400 *************** *** 323,328 **** --- 323,329 ---- , boost::bind ( & invoke1< Function, typename boost::member_function_traits<Function>::arg1_type > , aFunction + , aCommand , _1 , _2 , _3 *************** *** 348,353 **** --- 349,355 ---- , boost::bind ( & invoke2< Function, typename boost::member_function_traits<Function>::arg1_type, typename boost::member_function_traits<Function>::arg2_type > , aFunction + , aCommand , _1 , _2 , _3 *************** *** 376,381 **** --- 378,384 ---- , boost::bind ( & invoke3< Function, typename boost::member_function_traits<Function>::arg1_type, typename boost::member_function_traits<Function>::arg2_type, typename boost::member_function_traits<Function>::arg3_type > , aFunction + , aCommand , _1 , _2 , _3 *************** *** 393,418 **** template <class ImplementationFn> static void invoke0( ImplementationFn aFunction, API::conf_object_t * anObject, API::attr_value_t const & /* ignored */, API::attr_value_t const & /* ignored */, API::attr_value_t const & /* ignored */) { ! DBG_(VVerb, ( << " invoke" << CppObjectClass::className() ) ); ((*cast_object(anObject)) .* aFunction) (); } template <class ImplementationFn, class Arg1> ! static void invoke1( ImplementationFn aFunction, API::conf_object_t * anObject, API::attr_value_t const & anArg1, API::attr_value_t const & /* ignored */, API::attr_value_t const & /* ignored */) { ! DBG_(VVerb, ( << " invoke" << CppObjectClass::className() ) ); ((*cast_object(anObject)) .* aFunction) ( attribute_cast<Arg1>(anArg1) ); } template <class ImplementationFn, class Arg1, class Arg2> ! static void invoke2( ImplementationFn aFunction, API::conf_object_t * anObject, API::attr_value_t const & anArg1, API::attr_value_t const & anArg2, API::attr_value_t const & /* ignored */) { ! DBG_(VVerb, ( << " invoke" << CppObjectClass::className() ) ); ((*cast_object(anObject)) .* aFunction) ( attribute_cast<Arg1>(anArg1), attribute_cast<Arg2>(anArg2)); } template <class ImplementationFn, class Arg1, class Arg2, class Arg3> ! static void invoke3( ImplementationFn aFunction, API::conf_object_t * anObject, API::attr_value_t const & anArg1, API::attr_value_t const & anArg2, API::attr_value_t const & anArg3) { ! DBG_(VVerb, ( << " invoke" << CppObjectClass::className() ) ); ((*cast_object(anObject)) .* aFunction) ( attribute_cast<Arg1>(anArg1), attribute_cast<Arg2>(anArg2), attribute_cast<Arg3>(anArg3)); } --- 396,442 ---- template <class ImplementationFn> static void invoke0( ImplementationFn aFunction, API::conf_object_t * anObject, API::attr_value_t const & /* ignored */, API::attr_value_t const & /* ignored */, API::attr_value_t const & /* ignored */) { ! DBG_(Verb, ( << " invoke" << CppObjectClass::className() ) ); ((*cast_object(anObject)) .* aFunction) (); } template <class ImplementationFn, class Arg1> ! static void invoke1( ImplementationFn aFunction, std::string aCommand, API::conf_object_t * anObject, API::attr_value_t const & anArg1, API::attr_value_t const & anArg2, API::attr_value_t const & /* ignored */) { ! DBG_(Verb, ( << " invoke " << CppObjectClass::className() << ":" << aCommand) ); ! try { ((*cast_object(anObject)) .* aFunction) ( attribute_cast<Arg1>(anArg1) ); + } catch (bad_attribute_cast c) { + DBG_(Dev, ( << "Bad attribute cast." << anArg1.kind )); + DBG_(Verb, ( << "Obj name" << anObject->name )); + DBG_(Verb, ( << "Arg1.kind: " << anArg1.kind )); + } } template <class ImplementationFn, class Arg1, class Arg2> ! static void invoke2( ImplementationFn aFunction, std::string aCommand, API::conf_object_t * anObject, API::attr_value_t const & anArg1, API::attr_value_t const & anArg2, API::attr_value_t const & /* ignored */) { ! DBG_(Verb, ( << " invoke " << CppObjectClass::className() << ":" << aCommand) ); ! try { ((*cast_object(anObject)) .* aFunction) ( attribute_cast<Arg1>(anArg1), attribute_cast<Arg2>(anArg2)); + } catch (bad_attribute_cast c) { + DBG_(Dev, ( << "Bad attribute cast." << anArg1.kind )); + DBG_(Verb, ( << "Obj name" << anObject->name )); + DBG_(Verb, ( << "Arg1.kind: " << anArg1.kind )); + DBG_(Verb, ( << "Arg2.kind: " << anArg2.kind )); + } } template <class ImplementationFn, class Arg1, class Arg2, class Arg3> ! static void invoke3( ImplementationFn aFunction, std::string aCommand, API::conf_object_t * anObject, API::attr_value_t const & anArg1, API::attr_value_t const & anArg2, API::attr_value_t const & anArg3) { ! DBG_(Verb, ( << " invoke " << CppObjectClass::className() << ":" << aCommand) ); ! try { ((*cast_object(anObject)) .* aFunction) ( attribute_cast<Arg1>(anArg1), attribute_cast<Arg2>(anArg2), attribute_cast<Arg3>(anArg3)); + } catch (bad_attribute_cast c) { + DBG_(Dev, ( << "Bad attribute cast." << anArg1.kind )); + DBG_(Verb, ( << "Obj name" << anObject->name )); + DBG_(Verb, ( << "Arg1.kind: " << anArg1.kind )); + DBG_(Verb, ( << "Arg2.kind: " << anArg2.kind )); + DBG_(Verb, ( << "Arg3.kind: " << anArg3.kind )); + } } diff -c -r -b --exclude=.svn trunk/core/simics/mai_api.hpp test/core/simics/mai_api.hpp *** trunk/core/simics/mai_api.hpp 2007-07-06 14:31:16.000000000 -0400 --- test/core/simics/mai_api.hpp 2007-09-29 17:54:42.638787000 -0400 *************** *** 120,126 **** BaseProcessorImpl(API::conf_object_t * aProcessor) : theProcessor(aProcessor) ! , theProcessorNumber(APIFwd::SIM_get_processor_number(aProcessor)) {} public: --- 120,126 ---- BaseProcessorImpl(API::conf_object_t * aProcessor) : theProcessor(aProcessor) ! , theProcessorNumber(aProcessor == 0 ? 0 : APIFwd::SIM_get_processor_number(aProcessor)) {} public: diff -c -r -b --exclude=.svn trunk/makefile.defs test/makefile.defs *** trunk/makefile.defs 2007-09-27 02:33:23.191962000 -0400 --- test/makefile.defs 2007-09-28 17:43:40.000000000 -0400 *************** *** 41,54 **** # environment # GCC Compiler Settings ! GCC_PATH=/afs/scotch/project/tools/gcc-4.2.1 GCC_BINARY=g++-4.2.1 # Boost 1.33.1 path ! BOOST_PATH=/afs/scotch/project/tools/boost_1_33_1 # Simics 2.2.19 path ! SIMICS_PATH=/afs/scotch/project/simics/simics-3.0.22 # Is Simics 3.0? USING_SIMICS_3=1 --- 41,55 ---- # environment # GCC Compiler Settings ! GCC_PATH=/nfs/twenisch_vol/twenisch/tools/gcc-4.2.1 GCC_BINARY=g++-4.2.1 + SIMICS_GLIBC_NOCHECK=true # Boost 1.33.1 path ! BOOST_PATH=/nfs/twenisch_vol/twenisch/tools/boost_1_33_1 # Simics 2.2.19 path ! SIMICS_PATH=/nfs/twenisch_vol/twenisch/tools/simics-3.0.28 # Is Simics 3.0? USING_SIMICS_3=1 *************** *** 74,82 **** FLEXUS_INCLUDE=$(FLEXUS_ROOT) BOOST_INCLUDE=$(BOOST_PATH) ! SIMICS_LIB_DIR=$(SIMICS_PATH)/x86-linux/lib ! SIMICS_SYSLIB_DIR=$(SIMICS_PATH)/x86-linux/sys/lib ! SIMICS_INCLUDE=$(if $(USING_SIMICS_3),$(SIMICS_PATH)/src/include,$(SIMICS_PATH)/x86-linux/obj/include) SIMICS_V9_INCLUDE=$(SIMICS_INCLUDE)/simics SIMICS_X86_INCLUDE=$(SIMICS_INCLUDE)/simics --- 75,84 ---- FLEXUS_INCLUDE=$(FLEXUS_ROOT) BOOST_INCLUDE=$(BOOST_PATH) ! SIMICS_ARCH=amd64-linux ! SIMICS_LIB_DIR=$(SIMICS_PATH)/$(SIMICS_ARCH)/lib ! SIMICS_SYSLIB_DIR=$(SIMICS_PATH)/$(SIMICS_ARCH)/sys/lib ! SIMICS_INCLUDE=$(if $(USING_SIMICS_3),$(SIMICS_PATH)/src/include,$(SIMICS_PATH)/$(SIMICS_ARCH)/obj/include) SIMICS_V9_INCLUDE=$(SIMICS_INCLUDE)/simics SIMICS_X86_INCLUDE=$(SIMICS_INCLUDE)/simics *************** *** 92,100 **** # Compiler settings GCC=$(GCC_PATH)/bin/$(GCC_BINARY) ! GCC_LIB_PATH=$(GCC_PATH)/lib GCC_OPTFLAGS=-O3 -funroll-loops -fno-strict-aliasing -DVAG_CANNOT_FIX ! GCC_LANGFLAGS=-Wall -fmessage-length=160 -x c++ GCC_CFLAGS=-c $(GCC_OPTFLAGS) $(GCC_LANGFLAGS) GCC_LFLAGS=-Wl,--whole-archive GCC_SIMICS_LFLAGS=-shared -export-dynamic -Wl,--whole-archive --- 94,102 ---- # Compiler settings GCC=$(GCC_PATH)/bin/$(GCC_BINARY) ! GCC_LIB_PATH=$(GCC_PATH)/lib64 GCC_OPTFLAGS=-O3 -funroll-loops -fno-strict-aliasing -DVAG_CANNOT_FIX ! GCC_LANGFLAGS=-Wall -fmessage-length=160 -x c++ -fPIC GCC_CFLAGS=-c $(GCC_OPTFLAGS) $(GCC_LANGFLAGS) GCC_LFLAGS=-Wl,--whole-archive GCC_SIMICS_LFLAGS=-shared -export-dynamic -Wl,--whole-archive diff -c -r -b --exclude=.svn trunk/simulators/CMPFlex.OoO/wiring.cpp test/simulators/CMPFlex.OoO/wiring.cpp *** trunk/simulators/CMPFlex.OoO/wiring.cpp 2007-07-06 14:31:29.000000000 -0400 --- test/simulators/CMPFlex.OoO/wiring.cpp 2007-09-30 21:57:31.979940000 -0400 *************** *** 81,87 **** CREATE_CONFIGURATION( MemoryLoopback, "memory", theMemoryCfg ); CREATE_CONFIGURATION( MemoryMap, "memory-map", theMemoryMapCfg ); CREATE_CONFIGURATION( MagicBreak, "magic-break", theMagicBreakCfg ); ! CREATE_CONFIGURATION( TraceTrackerComponent, "trace-tracker", theTraceTrackerCfg ); //You may optionally initialize configuration parameters from within this //function. This initialization occur before the command line is processed, --- 81,87 ---- CREATE_CONFIGURATION( MemoryLoopback, "memory", theMemoryCfg ); CREATE_CONFIGURATION( MemoryMap, "memory-map", theMemoryMapCfg ); CREATE_CONFIGURATION( MagicBreak, "magic-break", theMagicBreakCfg ); ! //CREATE_CONFIGURATION( TraceTrackerComponent, "trace-tracker", theTraceTrackerCfg ); //You may optionally initialize configuration parameters from within this //function. This initialization occur before the command line is processed, *************** *** 106,111 **** --- 106,112 ---- theuFetchCfg.Size.initialize(65536); theuFetchCfg.Associativity.initialize(4); theuFetchCfg.MissQueueSize.initialize(4); + theuFetchCfg.CleanEvict.initialize(true); theDecoderCfg.Multithread.initialize(false); theDecoderCfg.FIQSize.initialize(16); *************** *** 183,188 **** --- 184,192 ---- theL2Cfg.MAFTargetsPerRequest.initialize(0); theL2Cfg.PreQueueSizes.initialize(4); theL2Cfg.TraceAddress.initialize(0); + theL2Cfg.AllowOffChipStreamFetch.initialize(false); + + theMemoryCfg.Delay.initialize(240); theMemoryCfg.MaxRequests.initialize(64); *************** *** 208,216 **** theMagicBreakCfg.TerminateOnMagicBreak.initialize(-1); theMagicBreakCfg.EnableIterationCounts.initialize(false); ! theTraceTrackerCfg.Enable.initialize(true); ! theTraceTrackerCfg.NumNodes.initialize( getSystemWidth() ); ! theTraceTrackerCfg.BlockSize.initialize(64); return true; //Abort simulation if parameters are not initialized } --- 212,220 ---- theMagicBreakCfg.TerminateOnMagicBreak.initialize(-1); theMagicBreakCfg.EnableIterationCounts.initialize(false); ! // theTraceTrackerCfg.Enable.initialize(false); ! // theTraceTrackerCfg.NumNodes.initialize( getSystemWidth() ); ! // theTraceTrackerCfg.BlockSize.initialize(64); return true; //Abort simulation if parameters are not initialized } *************** *** 229,235 **** FLEXUS_INSTANTIATE_COMPONENT( MemoryLoopback, theMemoryCfg, theMemory ); FLEXUS_INSTANTIATE_COMPONENT( MemoryMap, theMemoryMapCfg, theMemoryMap ); FLEXUS_INSTANTIATE_COMPONENT( MagicBreak, theMagicBreakCfg, theMagicBreak ); ! FLEXUS_INSTANTIATE_COMPONENT( TraceTrackerComponent, theTraceTrackerCfg, theTraceTracker ); #include FLEXUS_END_COMPONENT_INSTANTIATION_SECTION() --- 233,239 ---- FLEXUS_INSTANTIATE_COMPONENT( MemoryLoopback, theMemoryCfg, theMemory ); FLEXUS_INSTANTIATE_COMPONENT( MemoryMap, theMemoryMapCfg, theMemoryMap ); FLEXUS_INSTANTIATE_COMPONENT( MagicBreak, theMagicBreakCfg, theMagicBreak ); ! //FLEXUS_INSTANTIATE_COMPONENT( TraceTrackerComponent, theTraceTrackerCfg, theTraceTracker ); #include FLEXUS_END_COMPONENT_INSTANTIATION_SECTION() diff -c -r -b --exclude=.svn trunk/simulators/DSMFlex.OoO/wiring.cpp test/simulators/DSMFlex.OoO/wiring.cpp *** trunk/simulators/DSMFlex.OoO/wiring.cpp 2007-07-06 14:31:29.000000000 -0400 --- test/simulators/DSMFlex.OoO/wiring.cpp 2007-10-03 01:14:30.429224000 -0400 *************** *** 115,120 **** --- 115,121 ---- theuFetchCfg.Size.initialize(65536); theuFetchCfg.Associativity.initialize(2); theuFetchCfg.MissQueueSize.initialize(4); + theuFetchCfg.CleanEvict.initialize(false); theDecoderCfg.Multithread.initialize(false); theDecoderCfg.FIQSize.initialize(16); *************** *** 138,144 **** theuArchCfg.SpeculateOnAtomicValue.initialize(false); theuArchCfg.SpeculateOnAtomicValuePerfect.initialize(false); theuArchCfg.SpeculativeCheckpoints.initialize(0); ! theuArchCfg.CheckpointThreshold.initialize(0); theuArchCfg.InOrderExecute.initialize(false); theuArchCfg.InOrderMemory.initialize(false); theuArchCfg.OffChipLatency.initialize(320); --- 139,146 ---- theuArchCfg.SpeculateOnAtomicValue.initialize(false); theuArchCfg.SpeculateOnAtomicValuePerfect.initialize(false); theuArchCfg.SpeculativeCheckpoints.initialize(0); ! theuArchCfg.InstructionsPerCheckpoint.initialize(0); ! theuArchCfg.StoreAddressesPerCheckpoint.initialize(0); theuArchCfg.InOrderExecute.initialize(false); theuArchCfg.InOrderMemory.initialize(false); theuArchCfg.OffChipLatency.initialize(320);
