From 4642c6b8e942815aaf6f591b5f90e52c5a9cba2b Mon Sep 17 00:00:00 2001 From: Izajasz P Wrosz Date: Tue, 11 Feb 2025 16:20:40 +0000 Subject: [PATCH 1/4] Ember: create all motifs during simulation startup --- src/sst/elements/ember/emberengine.cc | 233 +++++++++++------- src/sst/elements/ember/emberengine.h | 34 +-- src/sst/elements/ember/embergen.h | 12 +- src/sst/elements/ember/mpi/embermpigen.h | 6 +- .../elements/ember/mpi/motifs/ember3damr.cc | 1 - .../elements/ember/mpi/motifs/ember3damr.h | 47 ++-- .../ember/mpi/motifs/ember3dcommdbl.cc | 10 +- .../ember/mpi/motifs/ember3dcommdbl.h | 10 +- .../ember/mpi/motifs/emberTrafficGen.cc | 2 - .../ember/mpi/motifs/emberTrafficGen.h | 13 +- .../elements/ember/mpi/motifs/embercmt1d.cc | 3 - .../elements/ember/mpi/motifs/embercmt1d.h | 6 +- .../elements/ember/mpi/motifs/embercmt2d.cc | 6 - .../elements/ember/mpi/motifs/embercmt2d.h | 4 +- .../elements/ember/mpi/motifs/embercmt3d.cc | 3 - .../elements/ember/mpi/motifs/embercmt3d.h | 4 +- .../elements/ember/mpi/motifs/embercmtcr.cc | 5 - .../elements/ember/mpi/motifs/embercmtcr.h | 4 +- .../elements/ember/mpi/motifs/emberfft3d.cc | 2 - .../elements/ember/mpi/motifs/emberfft3d.h | 4 +- .../elements/ember/mpi/motifs/emberhalo2d.cc | 2 - .../elements/ember/mpi/motifs/emberhalo2d.h | 8 +- .../ember/mpi/motifs/emberhalo2dNBR.cc | 2 - .../ember/mpi/motifs/emberhalo2dNBR.h | 8 +- .../elements/ember/mpi/motifs/emberhalo3d.cc | 5 +- .../elements/ember/mpi/motifs/emberhalo3d.h | 6 +- .../ember/mpi/motifs/emberhalo3dsv.cc | 2 - .../elements/ember/mpi/motifs/emberhalo3dsv.h | 8 +- .../elements/ember/mpi/motifs/emberlqcd.cc | 3 - src/sst/elements/ember/mpi/motifs/emberlqcd.h | 6 +- .../elements/ember/mpi/motifs/embernaslu.cc | 2 - .../elements/ember/mpi/motifs/embernaslu.h | 6 +- .../elements/ember/mpi/motifs/emberotf2.cc | 212 ++++++++-------- src/sst/elements/ember/mpi/motifs/emberotf2.h | 10 +- .../elements/ember/mpi/motifs/embersweep2d.cc | 2 - .../elements/ember/mpi/motifs/embersweep2d.h | 6 +- .../elements/ember/mpi/motifs/embersweep3d.cc | 1 - .../elements/ember/mpi/motifs/embersweep3d.h | 6 +- .../ember/mpi/motifs/emberunstructured.cc | 6 +- .../ember/mpi/motifs/emberunstructured.h | 6 +- src/sst/elements/ember/shmem/emberShmemGen.h | 24 +- 41 files changed, 397 insertions(+), 343 deletions(-) diff --git a/src/sst/elements/ember/emberengine.cc b/src/sst/elements/ember/emberengine.cc index 871828f1db..fa290ec9f1 100644 --- a/src/sst/elements/ember/emberengine.cc +++ b/src/sst/elements/ember/emberengine.cc @@ -27,23 +27,22 @@ using namespace std; using namespace SST::Ember; using namespace SST::Hermes; -EmberEngine::EmberEngine(SST::ComponentId_t id, SST::Params& params) : +EmberEngine::EmberEngine( SST::ComponentId_t id, SST::Params& params ) : Component( id ), - currentMotif(0), - m_motifDone(false), - m_detailedCompute(NULL) + m_currentMotif( 0 ), + m_motifDone( false ), + m_detailedCompute( nullptr ) { - // Get the level of verbosity the user is asking to print out, default is 1 - // which means don't print much. - uint32_t verbosity = (uint32_t) params.find("verbose", 1); - uint32_t mask = (uint32_t) params.find("verboseMask", 0); - m_jobId = params.find("jobId", -1); + // Get the level of verbosity the user is asking to print out, default is 1 + // which means don't print much. + uint32_t verbosity = (uint32_t) params.find( "verbose", 1 ); + uint32_t mask = (uint32_t) params.find( "verboseMask", 0 ); + m_jobId = params.find( "jobId", -1 ); + std::ostringstream prefix; + prefix << "@t:" << m_jobId << ":EmberEngine:@p:@l: "; - std::ostringstream prefix; - prefix << "@t:" << m_jobId << ":EmberEngine:@p:@l: "; - - output.init( prefix.str(), verbosity, mask, Output::STDOUT); + output.init( prefix.str(), verbosity, mask, Output::STDOUT ); std::ostringstream tmp; tmp << m_jobId; @@ -55,61 +54,88 @@ EmberEngine::EmberEngine(SST::ComponentId_t id, SST::Params& params) : m_detailedCompute = m_os->getDetailedCompute(); m_memHeapLink = m_os->getMemHeapLink(); - std::string motifLogFile = params.find("motifLog", ""); - if("" != motifLogFile) { - m_motifLogger = loadComponentExtension(motifLogFile, m_jobId); + std::string motifLogFile = params.find( "motifLog", "" ); + if ( "" != motifLogFile ) { + m_motifLogger = loadComponentExtension( motifLogFile, m_jobId ); } else { m_motifLogger = nullptr; } - output.verbose(CALL_INFO, 2, ENGINE_MASK, "\n"); + output.verbose( CALL_INFO, 2, ENGINE_MASK, "\n" ); - // create a map of all the available API's - m_apiMap = createApiMap( m_os, this, params ); - assert( ! m_apiMap.empty() ); + // create a map of all the available API's + m_apiMap = createApiMap( m_os, this, params ); + assert( !m_apiMap.empty() ); - motifParams.resize( params.find("motif_count", 1) ); - output.verbose(CALL_INFO, 2, ENGINE_MASK, "Identified %ld motifs " - "to be simulated.\n", motifParams.size()); + m_numMotifs = params.find( "motif_count", 1 ); + output.verbose( CALL_INFO, 2, ENGINE_MASK, "Identified %u motifs " + "to be simulated.\n", m_numMotifs ); - for ( unsigned int i = 0; i < motifParams.size(); i++ ) { - std::ostringstream tmp; - tmp << i; + if ( m_numMotifs == 0 ) { + output.fatal( CALL_INFO, -1, "Error: need to specify at least one motif\n" ); + } + for ( int i = 0; i < m_numMotifs; i++ ) { + std::ostringstream tmp; + tmp << i; //NetworkSim: Add the rankmapper parameter as motif parameters and pass it. - params.insert("motif" + tmp.str() + ".rankmapper", params.find("rankmapper", "ember.LinearMap"), true); - + params.insert( "motif" + tmp.str() + ".rankmapper", + params.find( "rankmapper", "ember.LinearMap" ), true ); //NetworkSim: Add the mapFile parameter as motif parameters and pass it. - params.insert("motif" + tmp.str() + ".rankmap.mapFile", params.find("mapFile", "mapFile.txt"), true); - //NetworkSim->end - - motifParams[i] = params.get_scoped_params( "motif" + tmp.str() ); - } + params.insert( "motif" + tmp.str() + ".rankmap.mapFile", + params.find("mapFile", "mapFile.txt"), true ); + + SST::Params motifParams = params.get_scoped_params( "motif" + tmp.str() ); + + EmberGenerator* gen = createMotif( motifParams, + m_apiMap, + m_jobId, + i, + m_nodePerf ); + assert( gen ); + m_motifs.push_back( gen ); + } registerAsPrimaryComponent(); // Init the first Motif - m_generator = initMotif( motifParams[0], m_apiMap, m_jobId, - currentMotif, m_nodePerf ); + assert(m_currentMotif == 0); + m_generator = m_motifs[0]; assert( m_generator ); + m_generator->configure(); - // Configure self link to handle event timing - selfEventLink = configureSelfLink("self", "1ps", - new Event::Handler(this, &EmberEngine::handleEvent)); - assert(selfEventLink); + output.verbose( CALL_INFO, 4, MOTIF_START_STOP_MASK, + "Starting motif: %s\n", m_generator->getMotifName().c_str() ); - // Create a time converter for our compute events - nanoTimeConverter = getTimeConverter("1ns"); + // Make sure we don't stop the simulation until we are ready + if ( m_generator->primary() ) { + primaryComponentDoNotEndSim(); + } + + // Configure self link to handle event timing + auto eventHandler = new Event::Handler( this, &EmberEngine::handleEvent ); + selfEventLink = configureSelfLink( "self", "1ps", eventHandler ); + assert( selfEventLink ); + + // Create a time converter for our compute events + nanoTimeConverter = getTimeConverter( "1ns" ); } EmberEngine::~EmberEngine() { - ApiMap::iterator iter = m_apiMap.begin(); - for ( ; iter != m_apiMap.end(); ++ iter ) { - delete iter->second; - } - - if(NULL != m_motifLogger) { - delete m_motifLogger; - } + ApiMap::iterator iter = m_apiMap.begin(); + for ( ; iter != m_apiMap.end(); ++ iter ) { + delete iter->second; + } + + if (nullptr != m_motifLogger) { + delete m_motifLogger; + } + + for ( size_t i = 0; i < m_motifs.size(); i++ ) { + if (m_motifs[i]) { + std::cout << "WARNING: Motif " << m_motifs[i]->getMotifName() << " has not completed\n"; + delete m_motifs[i]; + } + } } EmberEngine::ApiMap EmberEngine::createApiMap( OS* os, @@ -166,43 +192,36 @@ EmberEngine::ApiMap EmberEngine::createApiMap( OS* os, return tmp; } -EmberGenerator* EmberEngine::initMotif( SST::Params params, +EmberGenerator* EmberEngine::createMotif( SST::Params params, const ApiMap& apiMap, int jobId, int motifNum, NodePerf* nodePerf ) { EmberGenerator* gen = NULL; // get the name of the motif std::string gentype = params.find( "name" ); - assert( !gentype.empty() ); // if(NULL != m_motifLogger) { // m_motifLogger->logMotifStart(gentype, motifNum); // } - output.verbose(CALL_INFO, 2, ENGINE_MASK, "motif=`%s`\n", gentype.c_str()); - - if( gentype.empty()) { - output.fatal(CALL_INFO, -1, "Error: You did not specify a generator" - "or Ember to use\n"); - } else { - params.insert("_jobId", std::to_string( jobId ), true); - params.insert("_motifNum", std::to_string( motifNum ), true); - assert( sizeof(this) == sizeof(uint64_t) ); - params.insert("_enginePtr", std::to_string( reinterpret_cast( this ) ), true); - - gen = loadAnonymousSubComponent( gentype, "", 0, ComponentInfo::SHARE_NONE, params ); + if( gentype.empty() ) { + output.fatal( CALL_INFO, -1, "Error: You did not specify a generator " + "or Ember to use\n" ); + } else { + output.verbose( CALL_INFO, 2, ENGINE_MASK, "motif=`%s`\n", gentype.c_str() ); - if(NULL == gen) { - output.fatal(CALL_INFO, -1, "Error: Could not load the " - "generator %s for Ember\n", gentype.c_str()); - } + params.insert( "_jobId", std::to_string( jobId ), true ); + params.insert( "_motifNum", std::to_string( motifNum ), true ); + assert( sizeof( this ) == sizeof( uint64_t ) ); + params.insert( "_enginePtr", std::to_string( reinterpret_cast( this ) ), true); - gen->setup(); - } + gen = loadAnonymousSubComponent( gentype, "", 0, ComponentInfo::SHARE_NONE, params ); + if ( !gen ) { + output.fatal( CALL_INFO, -1, "Error: Could not load the " + "generator %s for Ember\n", gentype.c_str() ); + } - // Make sure we don't stop the simulation until we are ready - if ( gen->primary() ) { - primaryComponentDoNotEndSim(); + gen->setup(); } return gen; @@ -251,37 +270,71 @@ void EmberEngine::issueNextEvent(uint64_t nanoDelay) { output.debug(CALL_INFO, 8, ENGINE_MASK, "Engine issuing next event with delay %" PRIu64 "\n", nanoDelay); + // This loop tries to generate at least one event. + // When the currently executed motif gets drained, continue with the next motif, + // until there are no more motifs to simulate. while ( evQueue.empty() ) { - if ( ! m_motifDone ) { + if ( !m_motifDone ) { + // Enque some new events m_motifDone = refillQueue(); } - // if the event Queue is empty after a refill the motif is done - if ( evQueue.empty() ) { - if (NULL != m_motifLogger) { - m_motifLogger->logMotifEnd(m_generator->getMotifName(),currentMotif); + if ( evQueue.empty() ) { + + // No more events in the current motif + + // Finalize the current motif + if ( NULL != m_motifLogger ) { + m_motifLogger->logMotifEnd( m_generator->getMotifName(), m_currentMotif ); } - // output.verbose(CALL_INFO, 1, MOTIF_START_STOP_MASK, "Motif finished: %s\n",m_generator->getMotifName().c_str()); + + output.verbose( CALL_INFO, 4, MOTIF_START_STOP_MASK, + "Motif finished: %s\n", m_generator->getMotifName().c_str() ); + m_generator->completed( &output, getCurrentSimTimeNano() ); - if ( m_generator->primary() ) { - primaryComponentOKToEndSim(); - } + + const bool wasPrimary = m_generator->primary(); + delete m_generator; + m_motifs[m_currentMotif] = nullptr; + + m_currentMotif++; + + // See if there are more motifs to simulate + + if ( m_currentMotif == m_numMotifs ) { + output.verbose( CALL_INFO, 4, MOTIF_START_STOP_MASK, + "All (%d) motifs have finished\n", m_numMotifs ); + if ( wasPrimary ) { + primaryComponentOKToEndSim(); + } - if ( ++currentMotif == motifParams.size() ) { return; - } else { - m_generator = initMotif( motifParams[currentMotif], - m_apiMap, m_jobId, currentMotif, m_nodePerf ); - assert( m_generator ); - if (NULL != m_motifLogger) { - m_motifLogger->logMotifStart(currentMotif); + } + + m_generator = m_motifs[m_currentMotif]; + assert( m_generator ); + m_generator->configure(); + + const bool isPrimary = m_generator->primary(); + if ( wasPrimary != isPrimary ) { + if ( isPrimary ) { + primaryComponentDoNotEndSim(); } - // output.verbose(CALL_INFO, 1, MOTIF_START_STOP_MASK, "Motif starting: %s\n",m_generator->getMotifName().c_str()); + else { + primaryComponentOKToEndSim(); + } + } - m_motifDone = refillQueue(); + if ( NULL != m_motifLogger ) { + m_motifLogger->logMotifStart( m_currentMotif ); } + + output.verbose( CALL_INFO, 4, MOTIF_START_STOP_MASK, + "Motif starting: %s\n", m_generator->getMotifName().c_str()); + + m_motifDone = refillQueue(); } } diff --git a/src/sst/elements/ember/emberengine.h b/src/sst/elements/ember/emberengine.h index 697d7e4a63..133944c1d3 100644 --- a/src/sst/elements/ember/emberengine.h +++ b/src/sst/elements/ember/emberengine.h @@ -131,31 +131,33 @@ class EmberEngine : public SST::Component { typedef std::map< std::string, ApiInfo* > ApiMap; ApiMap createApiMap( Hermes::OS* os, SST::Component*, SST::Params ); - EmberGenerator* initMotif( SST::Params, const ApiMap&, - int jobId, int motifNum, Hermes::NodePerf* nodePerf ); - int m_jobId; - uint32_t currentMotif; + EmberGenerator* createMotif( SST::Params, const ApiMap&, int jobId, + int motifNum, Hermes::NodePerf* nodePerf ); + + int m_jobId; + int m_currentMotif; + int m_numMotifs; bool m_motifDone; ApiMap m_apiMap; - Output output; + Output output; - std::queue evQueue; + std::queue evQueue; Hermes::NodePerf* m_nodePerf; - EmberGenerator* m_generator; - SST::Link* selfEventLink; - SST::TimeConverter* nanoTimeConverter; - EmberMotifLog* m_motifLogger; + EmberGenerator* m_generator; + SST::Link* selfEventLink; + SST::TimeConverter* nanoTimeConverter; + EmberMotifLog* m_motifLogger; - std::vector motifParams; - Thornhill::DetailedCompute* m_detailedCompute; - Thornhill::MemoryHeapLink* m_memHeapLink; + std::vector m_motifs; - EmberEngine(); // For serialization - EmberEngine(const EmberEngine&); // Do not implement - void operator=(const EmberEngine&); // Do not implement + Thornhill::DetailedCompute* m_detailedCompute; + Thornhill::MemoryHeapLink* m_memHeapLink; + EmberEngine(); // For serialization + EmberEngine(const EmberEngine&); // Do not implement + void operator=(const EmberEngine&); // Do not implement }; } diff --git a/src/sst/elements/ember/embergen.h b/src/sst/elements/ember/embergen.h index cf4a36db86..e69a05216c 100644 --- a/src/sst/elements/ember/embergen.h +++ b/src/sst/elements/ember/embergen.h @@ -70,8 +70,11 @@ class EmberGenerator : public SubComponent { ~EmberGenerator(){ }; - virtual void generate( const SST::Output* output, const uint32_t phase, - std::queue* evQ ) { + virtual void configure() = 0; + + virtual void generate( const SST::Output* output, + const uint32_t phase, + std::queue* evQ ) { assert(0); } @@ -85,9 +88,8 @@ class EmberGenerator : public SubComponent { virtual bool primary( ) { return m_primary; } - virtual std::string getComputeModelName() { - return ""; - } + virtual std::string getComputeModelName() { return ""; } + EmberLib* getLib(std::string name ); diff --git a/src/sst/elements/ember/mpi/embermpigen.h b/src/sst/elements/ember/mpi/embermpigen.h index 69a72bb12b..6290a92549 100644 --- a/src/sst/elements/ember/mpi/embermpigen.h +++ b/src/sst/elements/ember/mpi/embermpigen.h @@ -71,7 +71,11 @@ class EmberMessagePassingGenerator : public EmberGenerator { EmberMessagePassingGenerator( ComponentId_t id, Params& params, std::string name = "" ); ~EmberMessagePassingGenerator(); - virtual void completed( const SST::Output* output, uint64_t time ) { + virtual void configure() override + { } + + virtual void completed( const SST::Output* output, uint64_t time ) override + { mpi().completed(output,time,getMotifName(),getMotifNum()); }; diff --git a/src/sst/elements/ember/mpi/motifs/ember3damr.cc b/src/sst/elements/ember/mpi/motifs/ember3damr.cc index 0d6f77adc8..9da18f1a80 100644 --- a/src/sst/elements/ember/mpi/motifs/ember3damr.cc +++ b/src/sst/elements/ember/mpi/motifs/ember3damr.cc @@ -74,7 +74,6 @@ Ember3DAMRGenerator::Ember3DAMRGenerator(SST::ComponentId_t id, Params& params) // We are complete, let the user know out->verbose(CALL_INFO, 2, 0, "AMR Motif constructor completed.\n"); - configure(); } void Ember3DAMRGenerator::loadBlocks() { diff --git a/src/sst/elements/ember/mpi/motifs/ember3damr.h b/src/sst/elements/ember/mpi/motifs/ember3damr.h index cc1a58c20c..4012c9bc72 100644 --- a/src/sst/elements/ember/mpi/motifs/ember3damr.h +++ b/src/sst/elements/ember/mpi/motifs/ember3damr.h @@ -79,22 +79,37 @@ class Ember3DAMRGenerator : public EmberMessagePassingGenerator { public: - Ember3DAMRGenerator(SST::ComponentId_t, Params& params); - ~Ember3DAMRGenerator(); - void configure(); - bool generate( std::queue& evQ ); - int32_t power3(const uint32_t expon); - - uint32_t power2(uint32_t exponent) const; - void loadBlocks(); - - uint32_t calcBlockID(const uint32_t posX, const uint32_t posY, const uint32_t posZ, const uint32_t level); - void calcBlockLocation(const uint32_t blockID, const uint32_t blockLevel, uint32_t* posX, uint32_t* posY, uint32_t* posZ); - bool isBlockLocal(const uint32_t bID) const; - void postBlockCommunication(std::queue& evQ, int32_t* blockComm, uint32_t* nextReq, const uint32_t faceSize, const uint32_t msgTag, - const Ember3DAMRBlock* theBlock); - void aggregateBlockCommunication(const std::vector& blocks, std::map& blockToMessageSize); - void aggregateCommBytes(Ember3DAMRBlock* curBlock, std::map& blockToMessageSize); + Ember3DAMRGenerator( SST::ComponentId_t, Params& params ); + + ~Ember3DAMRGenerator(); + + void configure() override; + + bool generate( std::queue& evQ ) override; + + int32_t power3( const uint32_t expon ); + + uint32_t power2( uint32_t exponent ) const; + + void loadBlocks(); + + uint32_t calcBlockID( const uint32_t posX, const uint32_t posY, const uint32_t posZ, + const uint32_t level ); + + void calcBlockLocation( const uint32_t blockID, const uint32_t blockLevel, + uint32_t* posX, uint32_t* posY, uint32_t* posZ ); + + bool isBlockLocal( const uint32_t bID ) const; + + void postBlockCommunication( std::queue& evQ, int32_t* blockComm, + uint32_t* nextReq, const uint32_t faceSize, + const uint32_t msgTag, const Ember3DAMRBlock* theBlock ); + + void aggregateBlockCommunication( const std::vector& blocks, + std::map& blockToMessageSize ); + + void aggregateCommBytes( Ember3DAMRBlock* curBlock, + std::map& blockToMessageSize); private: void printBlockMap(); diff --git a/src/sst/elements/ember/mpi/motifs/ember3dcommdbl.cc b/src/sst/elements/ember/mpi/motifs/ember3dcommdbl.cc index 9eabbc08ec..1ba5462cbc 100644 --- a/src/sst/elements/ember/mpi/motifs/ember3dcommdbl.cc +++ b/src/sst/elements/ember/mpi/motifs/ember3dcommdbl.cc @@ -35,17 +35,15 @@ Ember3DCommDoublingGenerator::Ember3DCommDoublingGenerator(SST::ComponentId_t id computeBetweenSteps = (uint32_t) params.find("arg.compute_at_step", 2000); requests = (MessageRequest*) malloc(sizeof(MessageRequest) * 52); - - configure(); } void Ember3DCommDoublingGenerator::configure() { - if((peX * peY * peZ) != (unsigned) size()) { - fatal(CALL_INFO, -1, "Processor decomposition of %" PRIu32 "x%" PRIu32 "x%" PRIu32 " != rank count of %" PRIu32 "\n", - peX, peY, peZ, size()); + if ( ( peX * peY * peZ ) != (unsigned)size() ) { + fatal( CALL_INFO, -1, "Processor decomposition of %" PRIu32 "x%" PRIu32 "x%" PRIu32 "" + " != rank count of %" PRIu32 "\n", + peX, peY, peZ, size() ); } - } int32_t Ember3DCommDoublingGenerator::power3(const uint32_t expon) { diff --git a/src/sst/elements/ember/mpi/motifs/ember3dcommdbl.h b/src/sst/elements/ember/mpi/motifs/ember3dcommdbl.h index d246dfdaf6..f186bd12c9 100644 --- a/src/sst/elements/ember/mpi/motifs/ember3dcommdbl.h +++ b/src/sst/elements/ember/mpi/motifs/ember3dcommdbl.h @@ -68,11 +68,11 @@ class Ember3DCommDoublingGenerator : public EmberMessagePassingGenerator { ) public: - Ember3DCommDoublingGenerator(SST::ComponentId_t, Params& params); - ~Ember3DCommDoublingGenerator() {} - void configure(); - bool generate( std::queue& evQ ); - int32_t power3(const uint32_t expon); + Ember3DCommDoublingGenerator( SST::ComponentId_t, Params& params ); + ~Ember3DCommDoublingGenerator() {} + void configure() override; + bool generate( std::queue& evQ ) override; + int32_t power3( const uint32_t expon ); private: uint32_t phase; diff --git a/src/sst/elements/ember/mpi/motifs/emberTrafficGen.cc b/src/sst/elements/ember/mpi/motifs/emberTrafficGen.cc index d81fe7cf34..9d2d280dc0 100644 --- a/src/sst/elements/ember/mpi/motifs/emberTrafficGen.cc +++ b/src/sst/elements/ember/mpi/motifs/emberTrafficGen.cc @@ -68,8 +68,6 @@ EmberTrafficGenGenerator::EmberTrafficGenGenerator(SST::ComponentId_t id, m_iterations = 1000; } } - - configure(); } void EmberTrafficGenGenerator::configure() diff --git a/src/sst/elements/ember/mpi/motifs/emberTrafficGen.h b/src/sst/elements/ember/mpi/motifs/emberTrafficGen.h index f9b19ae33d..2aa80a7488 100644 --- a/src/sst/elements/ember/mpi/motifs/emberTrafficGen.h +++ b/src/sst/elements/ember/mpi/motifs/emberTrafficGen.h @@ -70,19 +70,20 @@ class EmberTrafficGenGenerator : public EmberMessagePassingGenerator { public: - EmberTrafficGenGenerator(SST::ComponentId_t, Params& params); - bool generate( std::queue& evQ); - bool generate_plusOne( std::queue& evQ); - bool primary( ) { + EmberTrafficGenGenerator( SST::ComponentId_t, Params& params ); + bool generate( std::queue& evQ ) override; + bool generate_plusOne( std::queue& evQ ); + bool primary() override + { if (m_pattern == "plusOne") return false; return true; } - void configure(); + void configure() override; void configure_plusOne(); // extended patterns - bool generate_random( std::queue& evQ); + bool generate_random( std::queue& evQ ); void recv_data(); void send_data(); void wait_for_any(); diff --git a/src/sst/elements/ember/mpi/motifs/embercmt1d.cc b/src/sst/elements/ember/mpi/motifs/embercmt1d.cc index fb7c14d3a0..76bd867e4b 100644 --- a/src/sst/elements/ember/mpi/motifs/embercmt1d.cc +++ b/src/sst/elements/ember/mpi/motifs/embercmt1d.cc @@ -54,11 +54,8 @@ EmberCMT1DGenerator::EmberCMT1DGenerator(SST::ComponentId_t id, Params& params) m_stddev = params.find("arg.nsComputeStddev", (m_mean*0.05)); xferSize = eltSize*eltSize; - - configure(); } - void EmberCMT1DGenerator::configure() { myID = rank(); diff --git a/src/sst/elements/ember/mpi/motifs/embercmt1d.h b/src/sst/elements/ember/mpi/motifs/embercmt1d.h index 72e3651dc7..d5a724bc71 100644 --- a/src/sst/elements/ember/mpi/motifs/embercmt1d.h +++ b/src/sst/elements/ember/mpi/motifs/embercmt1d.h @@ -73,10 +73,10 @@ class EmberCMT1DGenerator : public EmberMessagePassingGenerator { public: - EmberCMT1DGenerator(SST::ComponentId_t, Params& params); + EmberCMT1DGenerator(SST::ComponentId_t, Params& params); // ~EmberCMT1DGenerator(); - void configure(); - bool generate( std::queue& evQ); + void configure() override; + bool generate( std::queue& evQ ) override; private: diff --git a/src/sst/elements/ember/mpi/motifs/embercmt2d.cc b/src/sst/elements/ember/mpi/motifs/embercmt2d.cc index 9738d675bf..8a19bd9c06 100644 --- a/src/sst/elements/ember/mpi/motifs/embercmt2d.cc +++ b/src/sst/elements/ember/mpi/motifs/embercmt2d.cc @@ -63,11 +63,8 @@ EmberCMT2DGenerator::EmberCMT2DGenerator(SST::ComponentId_t id, Params& params) x_xferSize = eltSize*eltSize*my*mz; y_xferSize = eltSize*eltSize*mx*mz; - - configure(); } - void EmberCMT2DGenerator::configure() { // Check that we are using all the processors or else lock up will happen :(. @@ -124,11 +121,8 @@ void EmberCMT2DGenerator::configure() (sendx_neg ? "Y" : "N"), x_neg, (sendy_pos ? "Y" : "N"), y_pos, (sendy_neg ? "Y" : "N"), y_neg ); - } - - bool EmberCMT2DGenerator::generate( std::queue& evQ) { diff --git a/src/sst/elements/ember/mpi/motifs/embercmt2d.h b/src/sst/elements/ember/mpi/motifs/embercmt2d.h index ffcb02c112..2199889411 100644 --- a/src/sst/elements/ember/mpi/motifs/embercmt2d.h +++ b/src/sst/elements/ember/mpi/motifs/embercmt2d.h @@ -79,8 +79,8 @@ class EmberCMT2DGenerator : public EmberMessagePassingGenerator { public: EmberCMT2DGenerator(SST::ComponentId_t, Params& params); // ~EmberCMT2DGenerator(); - void configure(); - bool generate( std::queue& evQ); + void configure() override; + bool generate( std::queue& evQ ) override; private: // User parameters - application diff --git a/src/sst/elements/ember/mpi/motifs/embercmt3d.cc b/src/sst/elements/ember/mpi/motifs/embercmt3d.cc index 4d2857e815..7a43df5cfc 100644 --- a/src/sst/elements/ember/mpi/motifs/embercmt3d.cc +++ b/src/sst/elements/ember/mpi/motifs/embercmt3d.cc @@ -68,11 +68,8 @@ EmberCMT3DGenerator::EmberCMT3DGenerator(SST::ComponentId_t id, Params& params) x_xferSize = eltSize*eltSize*my*mz; y_xferSize = eltSize*eltSize*mx*mz; z_xferSize = eltSize*eltSize*mx*my; - - configure(); } - void EmberCMT3DGenerator::configure() { diff --git a/src/sst/elements/ember/mpi/motifs/embercmt3d.h b/src/sst/elements/ember/mpi/motifs/embercmt3d.h index 585572b9e9..610197802c 100644 --- a/src/sst/elements/ember/mpi/motifs/embercmt3d.h +++ b/src/sst/elements/ember/mpi/motifs/embercmt3d.h @@ -79,8 +79,8 @@ class EmberCMT3DGenerator : public EmberMessagePassingGenerator { public: EmberCMT3DGenerator(SST::ComponentId_t, Params& params); // ~EmberCMT3DGenerator(); - void configure(); - bool generate( std::queue& evQ); + void configure() override; + bool generate( std::queue& evQ ) override; private: diff --git a/src/sst/elements/ember/mpi/motifs/embercmtcr.cc b/src/sst/elements/ember/mpi/motifs/embercmtcr.cc index 4bcc8b5dfe..196837a036 100644 --- a/src/sst/elements/ember/mpi/motifs/embercmtcr.cc +++ b/src/sst/elements/ember/mpi/motifs/embercmtcr.cc @@ -59,15 +59,10 @@ EmberCMTCRGenerator::EmberCMTCRGenerator(SST::ComponentId_t id, Params& params) m_stddev = params.find("arg.nsComputeStddev", (m_mean*0.05)); xferSize = eltSize*eltSize*nelt; - - configure(); } - - void EmberCMTCRGenerator::configure() { - if( (px * py *pz) != (signed)size() ) { fatal(CALL_INFO, -1, "Error: CMTCR motif checked processor decomposition: %" \ PRIu32 "x%" PRIu32 "x%" PRIu32 " != MPI World %" PRIu32 "\n", diff --git a/src/sst/elements/ember/mpi/motifs/embercmtcr.h b/src/sst/elements/ember/mpi/motifs/embercmtcr.h index ac64f404f8..4f2f684dc3 100644 --- a/src/sst/elements/ember/mpi/motifs/embercmtcr.h +++ b/src/sst/elements/ember/mpi/motifs/embercmtcr.h @@ -79,8 +79,8 @@ class EmberCMTCRGenerator : public EmberMessagePassingGenerator { public: EmberCMTCRGenerator(SST::ComponentId_t, Params& params); // ~EmberCMT3DGenerator(); - void configure(); - bool generate( std::queue& evQ); + void configure() override; + bool generate( std::queue& evQ ) override; private: // User parameters - application diff --git a/src/sst/elements/ember/mpi/motifs/emberfft3d.cc b/src/sst/elements/ember/mpi/motifs/emberfft3d.cc index 1f6248a67d..d20ea03de9 100644 --- a/src/sst/elements/ember/mpi/motifs/emberfft3d.cc +++ b/src/sst/elements/ember/mpi/motifs/emberfft3d.cc @@ -54,8 +54,6 @@ EmberFFT3DGenerator::EmberFFT3DGenerator(SST::ComponentId_t id, Params& params) m_transCostPer[3] = params.find("arg.bwd_fft1",1); m_transCostPer[4] = params.find("arg.bwd_fft2",1); m_transCostPer[5] = params.find("arg.bwd_fft3",1); - - configure(); } void EmberFFT3DGenerator::configure() diff --git a/src/sst/elements/ember/mpi/motifs/emberfft3d.h b/src/sst/elements/ember/mpi/motifs/emberfft3d.h index 96dc19d0e4..d61b9cf1e9 100644 --- a/src/sst/elements/ember/mpi/motifs/emberfft3d.h +++ b/src/sst/elements/ember/mpi/motifs/emberfft3d.h @@ -76,8 +76,8 @@ class EmberFFT3DGenerator : public EmberMessagePassingGenerator { public: EmberFFT3DGenerator(SST::ComponentId_t, Params& params); ~EmberFFT3DGenerator() {} - void configure(); - bool generate( std::queue& evQ ); + void configure() override; + bool generate( std::queue& evQ ) override; private: diff --git a/src/sst/elements/ember/mpi/motifs/emberhalo2d.cc b/src/sst/elements/ember/mpi/motifs/emberhalo2d.cc index 4f6da79641..5e80eca87b 100644 --- a/src/sst/elements/ember/mpi/motifs/emberhalo2d.cc +++ b/src/sst/elements/ember/mpi/motifs/emberhalo2d.cc @@ -49,8 +49,6 @@ EmberHalo2DGenerator::EmberHalo2DGenerator(SST::ComponentId_t id, Params& params sendSouth = false; messageCount = 0; - - configure(); } void EmberHalo2DGenerator::configure() diff --git a/src/sst/elements/ember/mpi/motifs/emberhalo2d.h b/src/sst/elements/ember/mpi/motifs/emberhalo2d.h index 7981465924..03df345b58 100644 --- a/src/sst/elements/ember/mpi/motifs/emberhalo2d.h +++ b/src/sst/elements/ember/mpi/motifs/emberhalo2d.h @@ -70,10 +70,10 @@ class EmberHalo2DGenerator : public EmberMessagePassingGenerator { public: - EmberHalo2DGenerator(SST::ComponentId_t id, Params& params); - void configure(); - bool generate( std::queue& evQ); - void completed(const SST::Output* output, uint64_t ); + EmberHalo2DGenerator( SST::ComponentId_t id, Params& params ); + void configure() override; + bool generate( std::queue& evQ ) override; + void completed( const SST::Output* output, uint64_t ) override; private: uint32_t m_loopIndex; diff --git a/src/sst/elements/ember/mpi/motifs/emberhalo2dNBR.cc b/src/sst/elements/ember/mpi/motifs/emberhalo2dNBR.cc index c8b20c0c88..61945c70a0 100644 --- a/src/sst/elements/ember/mpi/motifs/emberhalo2dNBR.cc +++ b/src/sst/elements/ember/mpi/motifs/emberhalo2dNBR.cc @@ -47,8 +47,6 @@ EmberHalo2DNBRGenerator::EmberHalo2DNBRGenerator(SST::ComponentId_t id, Params& sendSouth = false; messageCount = 0; - - configure(); } void EmberHalo2DNBRGenerator::completed(const SST::Output* output, uint64_t) { diff --git a/src/sst/elements/ember/mpi/motifs/emberhalo2dNBR.h b/src/sst/elements/ember/mpi/motifs/emberhalo2dNBR.h index 0a895ded3d..3721d68ad8 100644 --- a/src/sst/elements/ember/mpi/motifs/emberhalo2dNBR.h +++ b/src/sst/elements/ember/mpi/motifs/emberhalo2dNBR.h @@ -68,10 +68,10 @@ class EmberHalo2DNBRGenerator : public EmberMessagePassingGenerator { ) public: - EmberHalo2DNBRGenerator(SST::ComponentId_t, Params& params); - void configure(); - bool generate( std::queue& evQ); - void completed(const SST::Output* output, uint64_t ); + EmberHalo2DNBRGenerator( SST::ComponentId_t, Params& params ); + void configure() override; + bool generate( std::queue& evQ ) override; + void completed( const SST::Output* output, uint64_t ) override; private: uint32_t m_loopIndex; diff --git a/src/sst/elements/ember/mpi/motifs/emberhalo3d.cc b/src/sst/elements/ember/mpi/motifs/emberhalo3d.cc index d23c3ebe5c..5245a4b8d7 100644 --- a/src/sst/elements/ember/mpi/motifs/emberhalo3d.cc +++ b/src/sst/elements/ember/mpi/motifs/emberhalo3d.cc @@ -55,12 +55,9 @@ EmberHalo3DGenerator::EmberHalo3DGenerator(SST::ComponentId_t id, Params& params z_down = -1; z_up = -1; - jobId = params.find("_jobId"); //NetworkSim - - configure(); + jobId = params.find("_jobId"); //NetworkSim } - void EmberHalo3DGenerator::configure() { unsigned worldSize = size(); diff --git a/src/sst/elements/ember/mpi/motifs/emberhalo3d.h b/src/sst/elements/ember/mpi/motifs/emberhalo3d.h index 52d8ede971..72b8304c36 100644 --- a/src/sst/elements/ember/mpi/motifs/emberhalo3d.h +++ b/src/sst/elements/ember/mpi/motifs/emberhalo3d.h @@ -77,10 +77,10 @@ class EmberHalo3DGenerator : public EmberMessagePassingGenerator { public: - EmberHalo3DGenerator(SST::ComponentId_t, Params& params); + EmberHalo3DGenerator( SST::ComponentId_t, Params& params ); ~EmberHalo3DGenerator() {} - void configure(); - bool generate( std::queue& evQ ); + void configure() override; + bool generate( std::queue& evQ ) override; private: uint32_t m_loopIndex; diff --git a/src/sst/elements/ember/mpi/motifs/emberhalo3dsv.cc b/src/sst/elements/ember/mpi/motifs/emberhalo3dsv.cc index 99f8151987..a5c8ae889b 100644 --- a/src/sst/elements/ember/mpi/motifs/emberhalo3dsv.cc +++ b/src/sst/elements/ember/mpi/motifs/emberhalo3dsv.cc @@ -59,8 +59,6 @@ EmberHalo3DSVGenerator::EmberHalo3DSVGenerator(SST::ComponentId_t id, Params& pa y_up = -1; z_down = -1; z_up = -1; - - configure(); } void EmberHalo3DSVGenerator::configure() diff --git a/src/sst/elements/ember/mpi/motifs/emberhalo3dsv.h b/src/sst/elements/ember/mpi/motifs/emberhalo3dsv.h index 6c4d4977ab..0746955674 100644 --- a/src/sst/elements/ember/mpi/motifs/emberhalo3dsv.h +++ b/src/sst/elements/ember/mpi/motifs/emberhalo3dsv.h @@ -78,10 +78,10 @@ class EmberHalo3DSVGenerator : public EmberMessagePassingGenerator { public: - EmberHalo3DSVGenerator(SST::ComponentId_t, Params& params); - ~EmberHalo3DSVGenerator() {} - void configure(); - bool generate( std::queue& evQ ); + EmberHalo3DSVGenerator( SST::ComponentId_t, Params& params ); + ~EmberHalo3DSVGenerator() {} + void configure() override; + bool generate( std::queue& evQ ) override; private: uint32_t m_loopIndex; diff --git a/src/sst/elements/ember/mpi/motifs/emberlqcd.cc b/src/sst/elements/ember/mpi/motifs/emberlqcd.cc index b4da489801..90a3a407ad 100644 --- a/src/sst/elements/ember/mpi/motifs/emberlqcd.cc +++ b/src/sst/elements/ember/mpi/motifs/emberlqcd.cc @@ -109,8 +109,6 @@ EmberLQCDGenerator::EmberLQCDGenerator(SST::ComponentId_t id, Params& params) : n_ranks[ZUP] = -1; n_ranks[TDOWN] = -1; n_ranks[TUP] = -1; - - configure(); } @@ -255,7 +253,6 @@ int EmberLQCDGenerator::node_number(int x, int y, int z, int t) { void EmberLQCDGenerator::configure() { - //determine the problem size given to each node //code from MILC setup_hyper_prime() setup_hyper_prime(); diff --git a/src/sst/elements/ember/mpi/motifs/emberlqcd.h b/src/sst/elements/ember/mpi/motifs/emberlqcd.h index 2095e4cf9e..27b7e0da73 100644 --- a/src/sst/elements/ember/mpi/motifs/emberlqcd.h +++ b/src/sst/elements/ember/mpi/motifs/emberlqcd.h @@ -101,10 +101,10 @@ class EmberLQCDGenerator : public EmberMessagePassingGenerator { ) public: - EmberLQCDGenerator(SST::ComponentId_t, Params& params); + EmberLQCDGenerator( SST::ComponentId_t, Params& params ); ~EmberLQCDGenerator() {} - void configure(); - bool generate( std::queue& evQ ); + void configure() override; + bool generate( std::queue& evQ ) override; private: int get_node_index(int x, int y, int z, int t); diff --git a/src/sst/elements/ember/mpi/motifs/embernaslu.cc b/src/sst/elements/ember/mpi/motifs/embernaslu.cc index 8523fb4863..768713d730 100644 --- a/src/sst/elements/ember/mpi/motifs/embernaslu.cc +++ b/src/sst/elements/ember/mpi/motifs/embernaslu.cc @@ -41,8 +41,6 @@ EmberNASLUGenerator::EmberNASLUGenerator(SST::ComponentId_t id, Params& params) // Check K-blocking factor is acceptable for dividing the Nz dimension assert(nz % nzblock == 0); - - configure(); } void EmberNASLUGenerator::configure() diff --git a/src/sst/elements/ember/mpi/motifs/embernaslu.h b/src/sst/elements/ember/mpi/motifs/embernaslu.h index b6421d66ee..3d54f5ca49 100644 --- a/src/sst/elements/ember/mpi/motifs/embernaslu.h +++ b/src/sst/elements/ember/mpi/motifs/embernaslu.h @@ -71,9 +71,9 @@ class EmberNASLUGenerator : public EmberMessagePassingGenerator { public: - EmberNASLUGenerator(SST::ComponentId_t, Params& params); - void configure(); - bool generate( std::queue& evQ ); + EmberNASLUGenerator( SST::ComponentId_t, Params& params ); + void configure() override; + bool generate( std::queue& evQ ) override; private: uint32_t m_loopIndex; diff --git a/src/sst/elements/ember/mpi/motifs/emberotf2.cc b/src/sst/elements/ember/mpi/motifs/emberotf2.cc index e167e6d89f..58a87de60c 100644 --- a/src/sst/elements/ember/mpi/motifs/emberotf2.cc +++ b/src/sst/elements/ember/mpi/motifs/emberotf2.cc @@ -31,6 +31,7 @@ static OTF2_CallbackCode EmberOTF2ClockProperties( return OTF2_CALLBACK_SUCCESS; } + static OTF2_CallbackCode EmberOTF2StartProgram( OTF2_LocationRef locationID, OTF2_TimeStamp time, @@ -60,7 +61,6 @@ static OTF2_CallbackCode EmberOTF2EndProgram( return OTF2_CALLBACK_SUCCESS; } - static OTF2_CallbackCode EmberOTF2LeaveRegion( OTF2_LocationRef location, OTF2_TimeStamp time, @@ -417,78 +417,88 @@ EmberOTF2Generator::EmberOTF2Generator(SST::ComponentId_t id, Params& params) : EmberMessagePassingGenerator(id, params, "OTF2"), traceLocationCount(0), currentLocation(0), currentTime(0), m_timerResolution(0), m_inMPI(false) { - m_size = size(); + // Part of the OTF2Motif initialization is done during the configure() step that should + // happen (called by the EmberEngine), after the Init motif executes + // and sets a proper rank and size in the EmberMpiLib. + m_size = 0; + + // Here in the constructor, only read the config parameters and create a trace reader. + std::string tracePrefix = params.find("arg.tracePrefix", ""); m_addCompute = params.find("arg.addCompute", false); m_readGlobalStrings = params.find("arg.readGlobalStringDefinitions", false); - if( "" == tracePrefix ) { + if ( "" == tracePrefix ) { fatal( CALL_INFO, -1, "Error: no trace was specified by the \"tracePrefix\" parameter.\n" ); } verbose( CALL_INFO, 2, 0, "Opening: %s as trace prefix...\n", tracePrefix.c_str() ); - traceReader = OTF2_Reader_Open( tracePrefix.c_str() ); - if( NULL == traceReader ) { + if ( nullptr == traceReader ) { fatal( CALL_INFO, -1, "Error: unable to load trace at: %s\n", tracePrefix.c_str() ); } else { verbose( CALL_INFO, 2, 0, "Trace open was successful.\n" ); } +} - OTF2_Reader_SetSerialCollectiveCallbacks( traceReader ); +void EmberOTF2Generator::configure() { - OTF2_Reader_GetNumberOfLocations( traceReader, &traceLocationCount ); - verbose( CALL_INFO, 2, 0, "Found %" PRIu64 " locations, motif is rank %" PRIu64 ".\n", traceLocationCount, - static_cast(rank()) ); + m_size = size(); - if( m_size != traceLocationCount ) { - verbose(CALL_INFO, 1, 0, "Error: trace contains %" PRIu64 " locations, but the simulation has %" PRIu64 " ranks.\n", - traceLocationCount, m_size); - } + OTF2_Reader_SetSerialCollectiveCallbacks( traceReader ); + + OTF2_Reader_GetNumberOfLocations( traceReader, &traceLocationCount ); + verbose( CALL_INFO, 2, 0, "Found %" PRIu64 " locations, motif is rank %" PRIu64 ".\n", + traceLocationCount, static_cast( rank() ) ); - // Open up all the event files - // OTF2_Reader_OpenEvtFiles( traceReader ); + if ( m_size != traceLocationCount ) { + verbose( CALL_INFO, 1, 0, "Error: trace contains %" PRIu64 " locations, but the simulation has %" PRIu64 " ranks.\n", + traceLocationCount, m_size); + } - // Get my local definition reader - // traceLocalDefReader = OTF2_Reader_GetDefReader( traceReader, static_cast( rank() ) ); - // traceLocalCallbacks = OTF2_DefReaderCallbacks_New(); + // Open up all the event files + // OTF2_Reader_OpenEvtFiles( traceReader ); -/* - OTF2_DefReader + // Get my local definition reader + // traceLocalDefReader = OTF2_Reader_GetDefReader( traceReader, static_cast( rank() ) ); + // traceLocalCallbacks = OTF2_DefReaderCallbacks_New(); - OTF2_GlobalDefReaderCallbacks_SetLocationCallback( traceGlobalCallbacks, &EmberOTF2RegisterLocation ); - OTF2_Reader_RegisterGlobalDefCallbacks( traceReader, traceGlobalDefReader, traceGlobalCallbacks, &traceLocations ); + /* + OTF2_DefReader - if( OTF2_SUCCESS != OTF2_Reader_OpenDefFiles( traceReader) ) { - fatal(CALL_INFO, -1, "Error - OTF2 is unable to open definition files.\n"); - } + OTF2_GlobalDefReaderCallbacks_SetLocationCallback( traceGlobalCallbacks, &EmberOTF2RegisterLocation ); + OTF2_Reader_RegisterGlobalDefCallbacks( traceReader, traceGlobalDefReader, traceGlobalCallbacks, &traceLocations ); - OTF2_Reader_OpenEvtFiles( traceReader ); + if( OTF2_SUCCESS != OTF2_Reader_OpenDefFiles( traceReader) ) { + fatal(CALL_INFO, -1, "Error - OTF2 is unable to open definition files.\n"); + } - for( int i = 0; i < traceLocations.size(); ++i ) { - verbose(CALL_INFO, 2, 0, "Processing location %" PRIu64 "...\n", currentLocation ); + OTF2_Reader_OpenEvtFiles( traceReader ); - OTF2_DefReader* traceDefReader = OTF2_Reader_GetDefReader( traceReader, traceLocations[i] ); + for ( int i = 0; i < traceLocations.size(); ++i ) { + verbose(CALL_INFO, 2, 0, "Processing location %" PRIu64 "...\n", currentLocation ); - if( NULL != traceDefReader ) { - uint64_t defRead = 0; - OTF2_Reader_ReadAllLocalDefinitions( traceReader, traceDefReader, &defRead ); - OTF2_Reader_CloseDefReader( traceReader, traceDefReader ); - } + OTF2_DefReader* traceDefReader = OTF2_Reader_GetDefReader( traceReader, traceLocations[i] ); - OTF2_EvtReader* traceEventReader = OTF2_Reader_GetEvtReader( traceReader, traceLocations[i] ); - } + if ( NULL != traceDefReader ) { + uint64_t defRead = 0; + OTF2_Reader_ReadAllLocalDefinitions( traceReader, traceDefReader, &defRead ); + OTF2_Reader_CloseDefReader( traceReader, traceDefReader ); + } - OTF2_Reader_CloseDefFiles( traceReader ); + OTF2_EvtReader* traceEventReader = OTF2_Reader_GetEvtReader( traceReader, traceLocations[i] ); + } + + OTF2_Reader_CloseDefFiles( traceReader ); - traceEvtReader = OTF2_Reader_GetGlobalEvtReader( traceReader ); + traceEvtReader = OTF2_Reader_GetGlobalEvtReader( traceReader ); - OTF2_GlobalEvtReaderCallbacks* traceGlobalEvtCallbacks = OTF2_GlobalEvtReaderCallbacks_New(); - OTF2_Reader_RegisterGlobalEvtCallbacks( traceReader, traceEvtReader, traceGlobalEvtCallbacks, NULL ); + OTF2_GlobalEvtReaderCallbacks* traceGlobalEvtCallbacks = OTF2_GlobalEvtReaderCallbacks_New(); + OTF2_Reader_RegisterGlobalEvtCallbacks( traceReader, traceEvtReader, traceGlobalEvtCallbacks, NULL ); - OTF2_GlobalEvtReaderCallbacks_Delete( traceGlobalEvtCallbacks ); -*/ + OTF2_GlobalEvtReaderCallbacks_Delete( traceGlobalEvtCallbacks ); + */ traceGlobalDefCallbacks = OTF2_GlobalDefReaderCallbacks_New(); @@ -507,85 +517,82 @@ EmberOTF2Generator::EmberOTF2Generator(SST::ComponentId_t id, Params& params) : traceGlobalDefReader = OTF2_Reader_GetGlobalDefReader( traceReader ); OTF2_GlobalDefReader_SetCallbacks( traceGlobalDefReader, traceGlobalDefCallbacks, this ); - if ( NULL == traceGlobalDefReader ) { - fatal( CALL_INFO, -1, "Error: unable to create a global definition reader.\n"); + if ( nullptr == traceGlobalDefReader ) { + fatal( CALL_INFO, -1, "Error: unable to create a global definition reader.\n" ); } - uint64_t globalDefinitionsRead = 0; - OTF2_Reader_ReadAllGlobalDefinitions( traceReader, traceGlobalDefReader, &globalDefinitionsRead ); - verbose( CALL_INFO, 1, 0, "Read %" PRIu64 " global definitions from trace on rank %d\n", - globalDefinitionsRead, rank() ); - - if (getTimerResolution() == 0) { - fatal( CALL_INFO, -1, "Error: timer resolution was not successfully set from global definitions\n"); - } - - traceOpenedDefFiles = OTF2_Reader_OpenDefFiles( traceReader ); + uint64_t globalDefinitionsRead = 0; + OTF2_Reader_ReadAllGlobalDefinitions( traceReader, traceGlobalDefReader, &globalDefinitionsRead ); + verbose( CALL_INFO, 1, 0, "Read %" PRIu64 " global definitions from trace on rank %d\n", + globalDefinitionsRead, rank() ); - if( traceOpenedDefFiles ) { - verbose( CALL_INFO, 2, 0, "Successfully opened event files.\n"); - } else { - verbose( CALL_INFO, 2, 0, "Did not open event files, this is optional so will ignore.\n" ); - } - - if( OTF2_SUCCESS != OTF2_Reader_OpenEvtFiles( traceReader ) ) { - fatal( CALL_INFO, -1, "Error: unable to open event files.\n"); - } - - // Select only the location of the rank represented by this motif - if( OTF2_SUCCESS != OTF2_Reader_SelectLocation( traceReader, static_cast(rank()) ) ) { - fatal( CALL_INFO, -1, "Error: unable to select location %d\n", rank() ); - } + if ( getTimerResolution() == 0 ) { + fatal( CALL_INFO, -1, "Error: timer resolution was not successfully set from global definitions\n"); + } - /////////////////////////////////////////////////////////////////////////////////////////////////// + traceOpenedDefFiles = OTF2_Reader_OpenDefFiles( traceReader ); - if( traceOpenedDefFiles ) { - traceLocalDefReader = OTF2_Reader_GetDefReader( traceReader, static_cast(rank()) ); + if ( traceOpenedDefFiles ) { + verbose( CALL_INFO, 2, 0, "Successfully opened event files.\n" ); + } else { + verbose( CALL_INFO, 2, 0, "Did not open event files, this is optional so will ignore.\n" ); + } - if( NULL == traceLocalDefReader ) { - fatal( CALL_INFO, -1, "Error: unable to open a local definition reader on rank %d\n", rank() ); - } else { - verbose( CALL_INFO, 1, 0, "Opened local definition reader on rank %d\n", rank() ); - } + if ( OTF2_SUCCESS != OTF2_Reader_OpenEvtFiles( traceReader ) ) { + fatal( CALL_INFO, -1, "Error: unable to open event files.\n" ); + } - uint64_t localDefs = 0; - OTF2_Reader_ReadAllLocalDefinitions( traceReader, traceLocalDefReader, &localDefs ); + // Select only the location of the rank represented by this motif + if( OTF2_SUCCESS != OTF2_Reader_SelectLocation( traceReader, static_cast(rank()) ) ) { + fatal( CALL_INFO, -1, "Error: unable to select location %d\n", rank() ); + } - OTF2_Reader_CloseDefReader( traceReader, traceLocalDefReader ); - } + /////////////////////////////////////////////////////////////////////////////////////////////////// - traceEvtReader = OTF2_Reader_GetEvtReader( traceReader, static_cast( rank() ) ); + if ( traceOpenedDefFiles ) { + traceLocalDefReader = OTF2_Reader_GetDefReader( traceReader, static_cast( rank() ) ); + if ( nullptr == traceLocalDefReader ) { + fatal( CALL_INFO, -1, "Error: unable to open a local definition reader on rank %d\n", rank() ); + } else { + verbose( CALL_INFO, 1, 0, "Opened local definition reader on rank %d\n", rank() ); + } - if( NULL == traceEvtReader ) { - fatal( CALL_INFO, -1, "Error: unable to open a local trace event reader.\n" ); - } + uint64_t localDefs = 0; + OTF2_Reader_ReadAllLocalDefinitions( traceReader, traceLocalDefReader, &localDefs ); + OTF2_Reader_CloseDefReader( traceReader, traceLocalDefReader ); + } - if( traceOpenedDefFiles ) { - OTF2_Reader_CloseDefFiles( traceReader ); - } + traceEvtReader = OTF2_Reader_GetEvtReader( traceReader, static_cast( rank() ) ); + if ( nullptr == traceEvtReader ) { + fatal( CALL_INFO, -1, "Error: unable to open a local trace event reader.\n" ); + } - verbose( CALL_INFO, 1, 0, "Registering callbacks...\n" ); + if ( traceOpenedDefFiles ) { + OTF2_Reader_CloseDefFiles( traceReader ); + } - traceGlobalEvtCallbacks = OTF2_GlobalEvtReaderCallbacks_New(); + verbose( CALL_INFO, 1, 0, "Registering callbacks...\n" ); - OTF2_GlobalEvtReaderCallbacks_SetProgramBeginCallback( traceGlobalEvtCallbacks, EmberOTF2StartProgram ); - OTF2_GlobalEvtReaderCallbacks_SetProgramEndCallback( traceGlobalEvtCallbacks, EmberOTF2EndProgram ); - OTF2_GlobalEvtReaderCallbacks_SetMpiSendCallback( traceGlobalEvtCallbacks, EmberOTF2MPISend ); - OTF2_GlobalEvtReaderCallbacks_SetMpiRecvCallback( traceGlobalEvtCallbacks, EmberOTF2MPIRecv ); - OTF2_GlobalEvtReaderCallbacks_SetMpiIsendCallback( traceGlobalEvtCallbacks, EmberOTF2MPIISend ); - OTF2_GlobalEvtReaderCallbacks_SetMpiIrecvCallback( traceGlobalEvtCallbacks, EmberOTF2MPIIRecv ); - OTF2_GlobalEvtReaderCallbacks_SetMpiIrecvRequestCallback( traceGlobalEvtCallbacks, EmberOTF2MPIIRecvRequest ); - OTF2_GlobalEvtReaderCallbacks_SetMpiIsendCompleteCallback( traceGlobalEvtCallbacks, EmberOTF2MPIISendComplete ); - OTF2_GlobalEvtReaderCallbacks_SetLeaveCallback( traceGlobalEvtCallbacks, EmberOTF2LeaveRegion ); - OTF2_GlobalEvtReaderCallbacks_SetMpiCollectiveBeginCallback( traceGlobalEvtCallbacks, EmberOTF2MPICollectiveBegin ); - OTF2_GlobalEvtReaderCallbacks_SetMpiCollectiveEndCallback( traceGlobalEvtCallbacks, EmberOTF2MPICollectiveEnd ); + traceGlobalEvtCallbacks = OTF2_GlobalEvtReaderCallbacks_New(); - traceGlobalEvtReader = OTF2_Reader_GetGlobalEvtReader( traceReader ); + OTF2_GlobalEvtReaderCallbacks_SetProgramBeginCallback( traceGlobalEvtCallbacks, EmberOTF2StartProgram ); + OTF2_GlobalEvtReaderCallbacks_SetProgramEndCallback( traceGlobalEvtCallbacks, EmberOTF2EndProgram ); + OTF2_GlobalEvtReaderCallbacks_SetMpiSendCallback( traceGlobalEvtCallbacks, EmberOTF2MPISend ); + OTF2_GlobalEvtReaderCallbacks_SetMpiRecvCallback( traceGlobalEvtCallbacks, EmberOTF2MPIRecv ); + OTF2_GlobalEvtReaderCallbacks_SetMpiIsendCallback( traceGlobalEvtCallbacks, EmberOTF2MPIISend ); + OTF2_GlobalEvtReaderCallbacks_SetMpiIrecvCallback( traceGlobalEvtCallbacks, EmberOTF2MPIIRecv ); + OTF2_GlobalEvtReaderCallbacks_SetMpiIrecvRequestCallback( traceGlobalEvtCallbacks, EmberOTF2MPIIRecvRequest ); + OTF2_GlobalEvtReaderCallbacks_SetMpiIsendCompleteCallback( traceGlobalEvtCallbacks, EmberOTF2MPIISendComplete ); + OTF2_GlobalEvtReaderCallbacks_SetLeaveCallback( traceGlobalEvtCallbacks, EmberOTF2LeaveRegion ); + OTF2_GlobalEvtReaderCallbacks_SetMpiCollectiveBeginCallback( traceGlobalEvtCallbacks, EmberOTF2MPICollectiveBegin ); + OTF2_GlobalEvtReaderCallbacks_SetMpiCollectiveEndCallback( traceGlobalEvtCallbacks, EmberOTF2MPICollectiveEnd ); - OTF2_GlobalEvtReader_SetCallbacks( traceGlobalEvtReader, traceGlobalEvtCallbacks, this ); + traceGlobalEvtReader = OTF2_Reader_GetGlobalEvtReader( traceReader ); + OTF2_GlobalEvtReader_SetCallbacks( traceGlobalEvtReader, traceGlobalEvtCallbacks, this ); } bool EmberOTF2Generator::generate( std::queue& evQ ) { + setEventQueue( &evQ ); uint64_t eventsRead = 0; @@ -650,7 +657,6 @@ bool EmberOTF2Generator::generate( std::queue& evQ ) { EmberOTF2Generator::~EmberOTF2Generator() { verbose( CALL_INFO, 1, 0, "Completed generator, closing down trace handlers." ); - // OTF2_Reader_CloseGlobalEvtReader( traceReader, traceEvtReader ); OTF2_Reader_CloseEvtFiles( traceReader ); OTF2_Reader_Close( traceReader ); diff --git a/src/sst/elements/ember/mpi/motifs/emberotf2.h b/src/sst/elements/ember/mpi/motifs/emberotf2.h index ba602f981d..41774c2a56 100644 --- a/src/sst/elements/ember/mpi/motifs/emberotf2.h +++ b/src/sst/elements/ember/mpi/motifs/emberotf2.h @@ -30,9 +30,13 @@ using TraceStringDefinitions = std::unordered_map; class EmberOTF2Generator : public EmberMessagePassingGenerator { public: - EmberOTF2Generator(SST::ComponentId_t, Params& params); - ~EmberOTF2Generator(); - bool generate( std::queue& evQ ); + EmberOTF2Generator(SST::ComponentId_t, Params& params); + + ~EmberOTF2Generator(); + + void configure() override; + + bool generate( std::queue& evQ ) override; SST_ELI_REGISTER_SUBCOMPONENT( EmberOTF2Generator, diff --git a/src/sst/elements/ember/mpi/motifs/embersweep2d.cc b/src/sst/elements/ember/mpi/motifs/embersweep2d.cc index f608a7e231..b835268b1b 100644 --- a/src/sst/elements/ember/mpi/motifs/embersweep2d.cc +++ b/src/sst/elements/ember/mpi/motifs/embersweep2d.cc @@ -36,8 +36,6 @@ EmberSweep2DGenerator::EmberSweep2DGenerator(SST::ComponentId_t id, Params& para // Check K-blocking factor is acceptable for dividing the Nz dimension assert(ny % y_block == 0); - - configure(); } void EmberSweep2DGenerator::configure() diff --git a/src/sst/elements/ember/mpi/motifs/embersweep2d.h b/src/sst/elements/ember/mpi/motifs/embersweep2d.h index 3c88527f1f..932c5eddad 100644 --- a/src/sst/elements/ember/mpi/motifs/embersweep2d.h +++ b/src/sst/elements/ember/mpi/motifs/embersweep2d.h @@ -66,9 +66,9 @@ class EmberSweep2DGenerator : public EmberMessagePassingGenerator { ) public: - EmberSweep2DGenerator(SST::ComponentId_t, Params& params); - void configure(); - bool generate( std::queue& evQ ); + EmberSweep2DGenerator( SST::ComponentId_t, Params& params ); + void configure() override; + bool generate( std::queue& evQ ) override; private: uint32_t m_loopIndex; diff --git a/src/sst/elements/ember/mpi/motifs/embersweep3d.cc b/src/sst/elements/ember/mpi/motifs/embersweep3d.cc index 7630ef6204..3327980a94 100644 --- a/src/sst/elements/ember/mpi/motifs/embersweep3d.cc +++ b/src/sst/elements/ember/mpi/motifs/embersweep3d.cc @@ -96,7 +96,6 @@ void EmberSweep3DGenerator::configure() bool EmberSweep3DGenerator::generate( std::queue& evQ) { if( 0 == m_loopIndex && 0 == m_InnerLoopIndex ) { - configure(); verbose(CALL_INFO, 2, MOTIF_MASK, "rank=%d size=%d\n", rank(), size()); } diff --git a/src/sst/elements/ember/mpi/motifs/embersweep3d.h b/src/sst/elements/ember/mpi/motifs/embersweep3d.h index 068fb11a31..aa11d5013b 100644 --- a/src/sst/elements/ember/mpi/motifs/embersweep3d.h +++ b/src/sst/elements/ember/mpi/motifs/embersweep3d.h @@ -75,9 +75,9 @@ class EmberSweep3DGenerator : public EmberMessagePassingGenerator { public: - EmberSweep3DGenerator(SST::ComponentId_t id, Params& params); - void configure(); - bool generate( std::queue& evQ ); + EmberSweep3DGenerator( SST::ComponentId_t id, Params& params ); + void configure() override; + bool generate( std::queue& evQ ) override; private: uint32_t m_loopIndex; diff --git a/src/sst/elements/ember/mpi/motifs/emberunstructured.cc b/src/sst/elements/ember/mpi/motifs/emberunstructured.cc index 0a7aa15c4f..65eb2b6443 100644 --- a/src/sst/elements/ember/mpi/motifs/emberunstructured.cc +++ b/src/sst/elements/ember/mpi/motifs/emberunstructured.cc @@ -28,13 +28,11 @@ EmberUnstructuredGenerator::EmberUnstructuredGenerator(SST::ComponentId_t id, Pa items_per_cell = (uint32_t) params.find("arg.fields_per_cell", 1); sizeof_cell = (uint32_t) params.find("arg.datatype_width", 8); iterations = (uint32_t) params.find("arg.iterations", 1); - nsCompute = (uint64_t) params.find("arg.computetime", 0); + nsCompute = (uint64_t) params.find("arg.computetime", 0); - jobId = (int) params.find("_jobId"); //NetworkSim - configure(); + jobId = (int) params.find("_jobId"); //NetworkSim } - void EmberUnstructuredGenerator::configure() { //Check the type of the rankmapper: CustomMap or LinearMap diff --git a/src/sst/elements/ember/mpi/motifs/emberunstructured.h b/src/sst/elements/ember/mpi/motifs/emberunstructured.h index b000397292..508863b980 100644 --- a/src/sst/elements/ember/mpi/motifs/emberunstructured.h +++ b/src/sst/elements/ember/mpi/motifs/emberunstructured.h @@ -66,10 +66,10 @@ class EmberUnstructuredGenerator : public EmberMessagePassingGenerator { public: - EmberUnstructuredGenerator(SST::ComponentId_t, Params& params); + EmberUnstructuredGenerator( SST::ComponentId_t, Params& params ); ~EmberUnstructuredGenerator() {} - void configure(); - bool generate( std::queue& evQ ); + void configure() override; + bool generate( std::queue& evQ ) override; private: std::string graphFile; diff --git a/src/sst/elements/ember/shmem/emberShmemGen.h b/src/sst/elements/ember/shmem/emberShmemGen.h index 25ec017766..e691d0a5d5 100644 --- a/src/sst/elements/ember/shmem/emberShmemGen.h +++ b/src/sst/elements/ember/shmem/emberShmemGen.h @@ -107,19 +107,29 @@ namespace Ember { class EmberShmemGenerator : public EmberGenerator { public: + EmberShmemGenerator( ComponentId_t, Params& params, std::string name = "" ); - EmberShmemGenerator( ComponentId_t, Params& params, std::string name =""); - ~EmberShmemGenerator() {} - virtual void completed( const SST::Output*, uint64_t time ) {} - virtual void setup(); + ~EmberShmemGenerator() + { } + + virtual void completed( const SST::Output*, uint64_t time ) + { } + + virtual void setup(); + + virtual void configure() + { } protected: - EmberShmemLib& shmem() { return *m_shmem; }; + EmberShmemLib& shmem() + { + return *m_shmem; + }; - EmberMiscLib* m_miscLib; + EmberMiscLib* m_miscLib; private: - EmberShmemLib* m_shmem; + EmberShmemLib* m_shmem; }; } From b3d9eee2893699bad1ad16cb3653a78f4a996c4a Mon Sep 17 00:00:00 2001 From: Izajasz P Wrosz Date: Thu, 13 Feb 2025 16:23:42 +0000 Subject: [PATCH 2/4] Ember: Enable the MPI time statistics --- src/sst/elements/ember/emberengine.cc | 11 +- src/sst/elements/ember/emberengine.h | 6 +- src/sst/elements/ember/libs/emberMpiLib.cc | 60 ++++--- src/sst/elements/ember/libs/emberMpiLib.h | 46 +---- .../elements/ember/libs/mpi/emberMPIEvent.h | 39 ++++- src/sst/elements/ember/mpi/embermpigen.cc | 19 ++- src/sst/elements/ember/mpi/embermpigen.h | 77 ++++++--- .../elements/ember/mpi/motifs/ember3damr.cc | 2 + .../elements/ember/mpi/motifs/ember3damr.h | 25 --- .../ember/mpi/motifs/ember3dcommdbl.cc | 2 + .../ember/mpi/motifs/ember3dcommdbl.h | 24 --- src/sst/elements/ember/mpi/motifs/emberBFS.h | 24 --- src/sst/elements/ember/mpi/motifs/emberNtoM.h | 23 --- .../ember/mpi/motifs/emberTrafficGen.cc | 2 + .../ember/mpi/motifs/emberTrafficGen.h | 25 --- .../ember/mpi/motifs/emberallgather.h | 25 --- .../ember/mpi/motifs/emberallgatherv.h | 25 --- .../ember/mpi/motifs/emberallpingpong.h | 27 +-- .../ember/mpi/motifs/emberallreduce.h | 25 --- .../elements/ember/mpi/motifs/emberalltoall.h | 24 --- .../ember/mpi/motifs/emberalltoallv.h | 24 --- .../elements/ember/mpi/motifs/emberbarrier.h | 25 --- .../elements/ember/mpi/motifs/emberbcast.h | 25 --- .../ember/mpi/motifs/emberbipingpong.h | 25 --- .../elements/ember/mpi/motifs/embercmt1d.cc | 27 +-- .../elements/ember/mpi/motifs/embercmt1d.h | 26 --- .../elements/ember/mpi/motifs/embercmt2d.cc | 109 ++++++------ .../elements/ember/mpi/motifs/embercmt2d.h | 25 --- .../elements/ember/mpi/motifs/embercmt3d.cc | 157 +++++++++--------- .../elements/ember/mpi/motifs/embercmt3d.h | 25 --- .../elements/ember/mpi/motifs/embercmtcr.cc | 18 +- .../elements/ember/mpi/motifs/embercmtcr.h | 25 --- src/sst/elements/ember/mpi/motifs/embercomm.h | 25 --- .../ember/mpi/motifs/emberdetailedring.h | 25 --- .../ember/mpi/motifs/emberdetailedstream.h | 24 --- .../elements/ember/mpi/motifs/emberfft3d.cc | 2 + .../elements/ember/mpi/motifs/emberfft3d.h | 25 --- src/sst/elements/ember/mpi/motifs/emberfini.h | 25 --- .../elements/ember/mpi/motifs/emberhalo2d.cc | 2 + .../elements/ember/mpi/motifs/emberhalo2d.h | 26 --- .../ember/mpi/motifs/emberhalo2dNBR.cc | 2 + .../ember/mpi/motifs/emberhalo2dNBR.h | 25 --- .../elements/ember/mpi/motifs/emberhalo3d.cc | 2 + .../elements/ember/mpi/motifs/emberhalo3d.h | 26 --- .../elements/ember/mpi/motifs/emberhalo3d26.h | 26 --- .../ember/mpi/motifs/emberhalo3dsv.cc | 2 + .../elements/ember/mpi/motifs/emberhalo3dsv.h | 26 --- .../elements/ember/mpi/motifs/emberhotspots.h | 26 --- .../elements/ember/mpi/motifs/emberincast.h | 24 --- src/sst/elements/ember/mpi/motifs/emberinit.h | 26 --- .../elements/ember/mpi/motifs/emberlqcd.cc | 2 + src/sst/elements/ember/mpi/motifs/emberlqcd.h | 25 --- .../elements/ember/mpi/motifs/embermsgrate.h | 25 --- .../elements/ember/mpi/motifs/embernaslu.cc | 47 +++--- .../elements/ember/mpi/motifs/embernaslu.h | 26 --- src/sst/elements/ember/mpi/motifs/embernull.h | 25 --- .../elements/ember/mpi/motifs/emberotf2.cc | 2 + src/sst/elements/ember/mpi/motifs/emberotf2.h | 24 --- .../elements/ember/mpi/motifs/emberpingpong.h | 24 --- .../ember/mpi/motifs/emberrandomgen.h | 24 --- .../elements/ember/mpi/motifs/emberreduce.h | 25 --- src/sst/elements/ember/mpi/motifs/emberring.h | 26 --- .../elements/ember/mpi/motifs/emberscatter.h | 25 --- .../elements/ember/mpi/motifs/emberscatterv.h | 25 --- .../elements/ember/mpi/motifs/embersendrecv.h | 25 --- .../ember/mpi/motifs/embersiriustrace.h | 25 --- src/sst/elements/ember/mpi/motifs/emberstop.h | 26 --- .../elements/ember/mpi/motifs/embersweep2d.cc | 22 +-- .../elements/ember/mpi/motifs/embersweep2d.h | 25 --- .../elements/ember/mpi/motifs/embersweep3d.cc | 2 + .../elements/ember/mpi/motifs/embersweep3d.h | 26 --- src/sst/elements/ember/mpi/motifs/embertest.h | 26 --- .../elements/ember/mpi/motifs/embertestany.h | 26 --- .../ember/mpi/motifs/emberunstructured.cc | 36 ++-- .../ember/mpi/motifs/emberunstructured.h | 26 --- .../elements/ember/mpi/motifs/emberwaitany.h | 25 +-- src/sst/elements/ember/pyember.py | 3 + 77 files changed, 393 insertions(+), 1586 deletions(-) diff --git a/src/sst/elements/ember/emberengine.cc b/src/sst/elements/ember/emberengine.cc index fa290ec9f1..7b344ed04e 100644 --- a/src/sst/elements/ember/emberengine.cc +++ b/src/sst/elements/ember/emberengine.cc @@ -17,7 +17,6 @@ #include "sst_config.h" #include - #include "emberengine.h" #include "embergen.h" #include "embermotiflog.h" @@ -38,6 +37,7 @@ EmberEngine::EmberEngine( SST::ComponentId_t id, SST::Params& params ) : uint32_t verbosity = (uint32_t) params.find( "verbose", 1 ); uint32_t mask = (uint32_t) params.find( "verboseMask", 0 ); m_jobId = params.find( "jobId", -1 ); + bool statsPerMotif = (bool) params.find( "enableMpiStatsPerMotif", 1 ); std::ostringstream prefix; prefix << "@t:" << m_jobId << ":EmberEngine:@p:@l: "; @@ -90,7 +90,8 @@ EmberEngine::EmberEngine( SST::ComponentId_t id, SST::Params& params ) : m_apiMap, m_jobId, i, - m_nodePerf ); + m_nodePerf, + statsPerMotif ); assert( gen ); m_motifs.push_back( gen ); } @@ -193,7 +194,7 @@ EmberEngine::ApiMap EmberEngine::createApiMap( OS* os, } EmberGenerator* EmberEngine::createMotif( SST::Params params, - const ApiMap& apiMap, int jobId, int motifNum, NodePerf* nodePerf ) + const ApiMap& apiMap, int jobId, int motifNum, NodePerf* nodePerf, bool statsPerMotif ) { EmberGenerator* gen = NULL; @@ -214,13 +215,13 @@ EmberGenerator* EmberEngine::createMotif( SST::Params params, params.insert( "_motifNum", std::to_string( motifNum ), true ); assert( sizeof( this ) == sizeof( uint64_t ) ); params.insert( "_enginePtr", std::to_string( reinterpret_cast( this ) ), true); + params.insert( "mpiStatsPerMotif", std::to_string( statsPerMotif ), true ); - gen = loadAnonymousSubComponent( gentype, "", 0, ComponentInfo::SHARE_NONE, params ); + gen = loadAnonymousSubComponent( gentype, "", 0, ComponentInfo::INSERT_STATS, params ); if ( !gen ) { output.fatal( CALL_INFO, -1, "Error: Could not load the " "generator %s for Ember\n", gentype.c_str() ); } - gen->setup(); } diff --git a/src/sst/elements/ember/emberengine.h b/src/sst/elements/ember/emberengine.h index 133944c1d3..a5dfec4c45 100644 --- a/src/sst/elements/ember/emberengine.h +++ b/src/sst/elements/ember/emberengine.h @@ -54,7 +54,8 @@ class EmberEngine : public SST::Component { { "motif_count", "Sets the number of motifs which will be run in this simulation, default is 1", "1"}, { "rankmapper", "Sets the rank mapping SST module to load to rank translations, default is linear mapping", "ember.LinearMap" }, { "mapFile", "Sets the name of the input file for custom map", "mapFile.txt" }, - + { "enableMpiStatsPerMotif", "Creates separate MPI time stats for each MPI motif. " + "Set to 0 to make all MPI motifs within an EmberEngine use the same time stats.", "1"}, { "motif%(motif_count)d", "Sets the event generator or motif for the engine", "ember.EmberPingPongGenerator" }, ) /* PARAMS @@ -133,7 +134,8 @@ class EmberEngine : public SST::Component { ApiMap createApiMap( Hermes::OS* os, SST::Component*, SST::Params ); EmberGenerator* createMotif( SST::Params, const ApiMap&, int jobId, - int motifNum, Hermes::NodePerf* nodePerf ); + int motifNum, Hermes::NodePerf* nodePerf, + bool statsPerMotif ); int m_jobId; int m_currentMotif; diff --git a/src/sst/elements/ember/libs/emberMpiLib.cc b/src/sst/elements/ember/libs/emberMpiLib.cc index 78fccdb132..88724c0dbf 100644 --- a/src/sst/elements/ember/libs/emberMpiLib.cc +++ b/src/sst/elements/ember/libs/emberMpiLib.cc @@ -22,48 +22,60 @@ using namespace SST; using namespace SST::Ember; using namespace SST::Statistics; -const char* EmberMpiLib::m_eventName[] = { - FOREACH_ENUM(GENERATE_STRING) +namespace SST { +namespace Ember { + +#define GENERATE_STRING(STRING) #STRING, + +const char* MPIEventNames[] = { + FOREACH_MPI_EVENT(GENERATE_STRING) }; +#undef GENERATE_STRING + +} +} + + EmberMpiLib::EmberMpiLib( Params& params ) : m_size(0), m_rank(-1), m_backed(false), m_spyplotMode( EMBER_SPYPLOT_NONE ), m_spyinfo( NULL ) { - m_Stats.resize( NUM_EVENTS ); + m_Stats.resize( NUM_MPI_EVENTS, nullptr ); m_spyplotMode = (uint32_t) params.find("spyplotmode", 0); if(m_spyplotMode != EMBER_SPYPLOT_NONE) { m_spyinfo = new std::map(); } - -#if 0 - char* nameBuffer = (char*) malloc(sizeof(char) * 256); - - for(int i = 0; i < NUM_EVENTS; i++) { - std::string baseEventName( m_eventName[i] ); - - snprintf(nameBuffer, sizeof(char)*256, "time-%s", baseEventName.c_str()); - m_Stats[i] = registerStatistic(nameBuffer, "0"); - } - - free(nameBuffer); -#endif } void EmberMpiLib::completed( const SST::Output* output, - uint64_t time, std::string motifName, int motifNum ) + uint64_t time, std::string motifName, int motifNum ) { - if( EMBER_SPYPLOT_NONE != m_spyplotMode) { - char* filenameBuffer = (char*) malloc(sizeof(char) * PATH_MAX); - snprintf(filenameBuffer, sizeof(char)*PATH_MAX, "ember-%" PRIu32 "-%s-%" PRIu32 ".spy", motifNum, motifName.c_str(), (uint32_t) m_rank); + if ( EMBER_SPYPLOT_NONE != m_spyplotMode ) { + char* filenameBuffer = (char*) malloc( sizeof(char) * PATH_MAX ); + snprintf( filenameBuffer, sizeof(char) * PATH_MAX, + "ember-%" PRIu32 "-%s-%" PRIu32 ".spy", + motifNum, motifName.c_str(), (uint32_t)m_rank ); + generateSpyplotRank( filenameBuffer ); + free( filenameBuffer ); + } + + // A motif has just completed, thus clearing the statistics pointers + // configured by that motif. + for ( size_t i = 0; i < m_Stats.size(); i++ ) { + m_Stats[i] = nullptr; + } +} - generateSpyplotRank( filenameBuffer ); - free(filenameBuffer); - } +// Lets the MPI motif to configure the MPI time statistics to be used +// until the motif completes. +void EmberMpiLib::setEventStatistics(std::vector*>& stats) { + assert( NUM_MPI_EVENTS == stats.size() ); + m_Stats = stats; } -void EmberMpiLib::updateSpyplot( RankID remoteRank, size_t bytesSent) +void EmberMpiLib::updateSpyplot( RankID remoteRank, size_t bytesSent ) { EmberSpyInfo* info = NULL; std::map::iterator spy_itr; diff --git a/src/sst/elements/ember/libs/emberMpiLib.h b/src/sst/elements/ember/libs/emberMpiLib.h index 21aee7df46..7105dbb526 100644 --- a/src/sst/elements/ember/libs/emberMpiLib.h +++ b/src/sst/elements/ember/libs/emberMpiLib.h @@ -63,36 +63,6 @@ namespace Ember { static SST::Output abort_output("EmberMpiLib: ", 5, -1, Output::STDERR); -#undef FOREACH_ENUM -#define FOREACH_ENUM(NAME) \ - NAME( Init ) \ - NAME( Finalize ) \ - NAME( Rank ) \ - NAME( Size ) \ - NAME( Send ) \ - NAME( Recv ) \ - NAME( Irecv ) \ - NAME( Isend ) \ - NAME( Wait ) \ - NAME( Waitall ) \ - NAME( Waitany ) \ - NAME( Compute ) \ - NAME( Barrier ) \ - NAME( Alltoallv ) \ - NAME( Alltoall ) \ - NAME( Allreduce ) \ - NAME( Reduce ) \ - NAME( Bcast) \ - NAME( Scatter) \ - NAME( Scatterv) \ - NAME( Gettime ) \ - NAME( Commsplit ) \ - NAME( Commcreate ) \ - NAME( NUM_EVENTS ) \ - -#define GENERATE_ENUM(ENUM) ENUM, -#define GENERATE_STRING(STRING) #STRING, - class EmberSpyInfo { public: EmberSpyInfo(const int32_t rank) @@ -116,10 +86,6 @@ const uint32_t EMBER_SPYPLOT_SEND_BYTES = 2; class EmberMpiLib : public EmberLib { - enum Events { - FOREACH_ENUM(GENERATE_ENUM) - }; - public: SST_ELI_REGISTER_MODULE( @@ -384,11 +350,12 @@ class EmberMpiLib : public EmberLib { m_backed = true; } - void setNotBacked() { - m_backed = false; - } + void setNotBacked() { + m_backed = false; + } - void completed(const SST::Output* output, uint64_t time, std::string motifName, int motifNum ); + void setEventStatistics(std::vector*>& stats); + void completed( const SST::Output* output, uint64_t time, std::string motifName, int motifNum ); private: virtual void* memAddr( void * addr ) { @@ -396,8 +363,7 @@ class EmberMpiLib : public EmberLib { } MP::Interface& api() { return *static_cast(m_api); } - std::vector< Statistic* > m_Stats; - static const char* m_eventName[]; + std::vector< EventTimeStat* > m_Stats; bool m_backed; int m_size; diff --git a/src/sst/elements/ember/libs/mpi/emberMPIEvent.h b/src/sst/elements/ember/libs/mpi/emberMPIEvent.h index 306a01a72b..61fc3d7188 100644 --- a/src/sst/elements/ember/libs/mpi/emberMPIEvent.h +++ b/src/sst/elements/ember/libs/mpi/emberMPIEvent.h @@ -26,7 +26,44 @@ using namespace Hermes::MP; namespace SST { namespace Ember { -typedef Statistic EmberEventTimeStatistic; +using TimeStatDataType = uint32_t; +using EventTimeStat = Statistic; + +#define FOREACH_MPI_EVENT(NAME) \ + NAME( Init ) \ + NAME( Finalize ) \ + NAME( Rank ) \ + NAME( Size ) \ + NAME( Send ) \ + NAME( Recv ) \ + NAME( Irecv ) \ + NAME( Isend ) \ + NAME( Wait ) \ + NAME( Waitall ) \ + NAME( Waitany ) \ + NAME( Compute ) \ + NAME( Barrier ) \ + NAME( Alltoallv ) \ + NAME( Alltoall ) \ + NAME( Allreduce ) \ + NAME( Reduce ) \ + NAME( Bcast) \ + NAME( Scatter) \ + NAME( Scatterv) \ + NAME( Gettime ) \ + NAME( Commsplit ) \ + NAME( Commcreate ) \ + NAME( NUM_MPI_EVENTS ) \ + +#define GENERATE_ENUM(ENUM) ENUM, + +enum MPIEvents { + FOREACH_MPI_EVENT(GENERATE_ENUM) +}; + +#undef GENERATE_ENUM + +extern const char* MPIEventNames[]; class EmberMPIEvent : public EmberEvent { diff --git a/src/sst/elements/ember/mpi/embermpigen.cc b/src/sst/elements/ember/mpi/embermpigen.cc index 52e24116c5..3e4e217a3c 100644 --- a/src/sst/elements/ember/mpi/embermpigen.cc +++ b/src/sst/elements/ember/mpi/embermpigen.cc @@ -16,6 +16,7 @@ #include #include "embermpigen.h" +#include "libs/mpi/emberMPIEvent.h" using namespace SST; using namespace SST::Ember; @@ -33,7 +34,7 @@ EmberMessagePassingGenerator::EmberMessagePassingGenerator( } //end->NetworkSim - m_rankMap = loadModule(rankMapModule,mapParams); + m_rankMap = loadModule( rankMapModule, mapParams ); if(NULL == m_rankMap) { std::cerr << "Error: Unable to load rank map scheme: \'" @@ -41,6 +42,20 @@ EmberMessagePassingGenerator::EmberMessagePassingGenerator( exit(-1); } + const bool perMotifStats = params.find("mpiStatsPerMotif", true); + + // Register statistics + const std::string namePrefix( "time-" ); + for (int i = 0; i < NUM_MPI_EVENTS; i++) { + std::string statName = namePrefix + std::string( MPIEventNames[i] ); + std::string subId(""); + if ( perMotifStats ) { + subId = name + "Motif"; + } + EventTimeStat* stat = registerStatistic( statName, subId ); + m_mpiTimeStats.push_back( stat ); + } + m_mpi = static_cast( getLib("mpi") ); assert(m_mpi); m_mpi->initOutput( &getOutput() ); @@ -49,5 +64,5 @@ EmberMessagePassingGenerator::EmberMessagePassingGenerator( EmberMessagePassingGenerator::~EmberMessagePassingGenerator() { - verbose(CALL_INFO, 2, 0, "\n"); + verbose( CALL_INFO, 2, 0, "\n" ); } diff --git a/src/sst/elements/ember/mpi/embermpigen.h b/src/sst/elements/ember/mpi/embermpigen.h index 6290a92549..c00319be1a 100644 --- a/src/sst/elements/ember/mpi/embermpigen.h +++ b/src/sst/elements/ember/mpi/embermpigen.h @@ -68,15 +68,43 @@ class EmberMessagePassingGenerator : public EmberGenerator { rankmap.* */ + SST_ELI_DOCUMENT_STATISTICS( + { "time-Init", "Time spent in Init event", "ns", 1 }, + { "time-Finalize", "Time spent in Finalize event", "ns", 1 }, + { "time-Rank", "Time spent in Rank event", "ns", 1 }, + { "time-Size", "Time spent in Size event", "ns", 1 }, + { "time-Send", "Time spent in Recv event", "ns", 1 }, + { "time-Recv", "Time spent in Recv event", "ns", 1 }, + { "time-Irecv", "Time spent in Irecv event", "ns", 1 }, + { "time-Isend", "Time spent in Isend event", "ns", 1 }, + { "time-Wait", "Time spent in Wait event", "ns", 1 }, + { "time-Waitall", "Time spent in Waitall event", "ns", 1 }, + { "time-Waitany", "Time spent in Waitany event", "ns", 1 }, + { "time-Compute", "Time spent in Compute event", "ns", 1 }, + { "time-Barrier", "Time spent in Barrier event", "ns", 1 }, + { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 1 }, + { "time-Alltoall", "Time spent in Alltoall event", "ns", 1 }, + { "time-Allreduce", "Time spent in Allreduce event", "ns", 1 }, + { "time-Reduce", "Time spent in Reduce event", "ns", 1 }, + { "time-Bcast", "Time spent in Bcast event", "ns", 1 }, + { "time-Scatter", "Time spent in Scatter event", "ns", 1 }, + { "time-Scatterv", "Time spent in Scatter event", "ns", 1 }, + { "time-Gettime", "Time spent in Gettime event", "ns", 1 }, + { "time-Commsplit", "Time spent in Commsplit event", "ns", 1 }, + { "time-Commcreate", "Time spent in Commcreate event", "ns", 1 }, + ) + EmberMessagePassingGenerator( ComponentId_t id, Params& params, std::string name = "" ); ~EmberMessagePassingGenerator(); virtual void configure() override - { } + { + mpi().setEventStatistics( m_mpiTimeStats ); + } virtual void completed( const SST::Output* output, uint64_t time ) override { - mpi().completed(output,time,getMotifName(),getMotifNum()); + mpi().completed(output, time, getMotifName(), getMotifNum()); }; protected: @@ -116,33 +144,34 @@ class EmberMessagePassingGenerator : public EmberGenerator { return mpi().sizeofDataType( type ); } - int get_count( MessageResponse* resp, PayloadDataType datatype, int* count ) { - uint32_t nbytes = resp->count * resp->dtypeSize; - int dtypesize = sizeofDataType(datatype); - if ( nbytes % dtypesize ) { - *count = 0; - return -1; - } - *count = nbytes / dtypesize; - - return 0; - } + int get_count( MessageResponse* resp, PayloadDataType datatype, int* count ) { + uint32_t nbytes = resp->count * resp->dtypeSize; + int dtypesize = sizeofDataType(datatype); + if ( nbytes % dtypesize ) { + *count = 0; + return -1; + } + *count = nbytes / dtypesize; + return 0; + } - EmberRankMap* getRankMap() { return m_rankMap; } + EmberRankMap* getRankMap() { return m_rankMap; } - void memSetBacked() { - EmberGenerator::memSetBacked(); - mpi().setBacked(); - } + void memSetBacked() { + EmberGenerator::memSetBacked(); + mpi().setBacked(); + } - void memSetNotBacked() { - EmberGenerator::memSetNotBacked(); - mpi().setNotBacked(); - } + void memSetNotBacked() { + EmberGenerator::memSetNotBacked(); + mpi().setNotBacked(); + } private: - EmberMpiLib* m_mpi; - EmberRankMap* m_rankMap; + EmberMpiLib* m_mpi; + EmberRankMap* m_rankMap; + + std::vector< EventTimeStat* > m_mpiTimeStats; }; diff --git a/src/sst/elements/ember/mpi/motifs/ember3damr.cc b/src/sst/elements/ember/mpi/motifs/ember3damr.cc index 9da18f1a80..f7bd17e5dd 100644 --- a/src/sst/elements/ember/mpi/motifs/ember3damr.cc +++ b/src/sst/elements/ember/mpi/motifs/ember3damr.cc @@ -798,6 +798,8 @@ void Ember3DAMRGenerator::configure() { out->verbose(CALL_INFO, 2, 0, "Configuring AMR motif...\n"); + EmberMessagePassingGenerator::configure(); + char* newPrefix = (char*) malloc(sizeof(char) * 64); if(out->getVerboseLevel() > 8) { diff --git a/src/sst/elements/ember/mpi/motifs/ember3damr.h b/src/sst/elements/ember/mpi/motifs/ember3damr.h index 4012c9bc72..4401f64a5d 100644 --- a/src/sst/elements/ember/mpi/motifs/ember3damr.h +++ b/src/sst/elements/ember/mpi/motifs/ember3damr.h @@ -53,31 +53,6 @@ class Ember3DAMRGenerator : public EmberMessagePassingGenerator { { "arg.iterations", "Sets the number of ping pong operations to perform", "1"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - - public: Ember3DAMRGenerator( SST::ComponentId_t, Params& params ); diff --git a/src/sst/elements/ember/mpi/motifs/ember3dcommdbl.cc b/src/sst/elements/ember/mpi/motifs/ember3dcommdbl.cc index 1ba5462cbc..56d4e821c2 100644 --- a/src/sst/elements/ember/mpi/motifs/ember3dcommdbl.cc +++ b/src/sst/elements/ember/mpi/motifs/ember3dcommdbl.cc @@ -39,6 +39,8 @@ Ember3DCommDoublingGenerator::Ember3DCommDoublingGenerator(SST::ComponentId_t id void Ember3DCommDoublingGenerator::configure() { + EmberMessagePassingGenerator::configure(); + if ( ( peX * peY * peZ ) != (unsigned)size() ) { fatal( CALL_INFO, -1, "Processor decomposition of %" PRIu32 "x%" PRIu32 "x%" PRIu32 "" " != rank count of %" PRIu32 "\n", diff --git a/src/sst/elements/ember/mpi/motifs/ember3dcommdbl.h b/src/sst/elements/ember/mpi/motifs/ember3dcommdbl.h index f186bd12c9..6f015c0dc0 100644 --- a/src/sst/elements/ember/mpi/motifs/ember3dcommdbl.h +++ b/src/sst/elements/ember/mpi/motifs/ember3dcommdbl.h @@ -43,30 +43,6 @@ class Ember3DCommDoublingGenerator : public EmberMessagePassingGenerator { { "compute_at_step", "Sets the computation time in between each communication phase in nanoseconds", "1000" }, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - public: Ember3DCommDoublingGenerator( SST::ComponentId_t, Params& params ); ~Ember3DCommDoublingGenerator() {} diff --git a/src/sst/elements/ember/mpi/motifs/emberBFS.h b/src/sst/elements/ember/mpi/motifs/emberBFS.h index cee893d996..ff36a327a0 100644 --- a/src/sst/elements/ember/mpi/motifs/emberBFS.h +++ b/src/sst/elements/ember/mpi/motifs/emberBFS.h @@ -346,30 +346,6 @@ class EmberBFSGenerator : public EmberMessagePassingGenerator { { "arg.exec_model", "Computation timing model file", "exec.model"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0} - ) - public: EmberBFSGenerator(SST::ComponentId_t, Params& params); ~EmberBFSGenerator(); diff --git a/src/sst/elements/ember/mpi/motifs/emberNtoM.h b/src/sst/elements/ember/mpi/motifs/emberNtoM.h index 105084de23..2e9509a624 100644 --- a/src/sst/elements/ember/mpi/motifs/emberNtoM.h +++ b/src/sst/elements/ember/mpi/motifs/emberNtoM.h @@ -40,29 +40,6 @@ class EmberNtoMGenerator : public EmberMessagePassingGenerator { { "arg.numRecvBufs", "Sets the number of preposted recv buffers", "1"}, { "arg.targetRankList", "Sets the targer ranks", "0"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) public: EmberNtoMGenerator(SST::ComponentId_t, Params& params); diff --git a/src/sst/elements/ember/mpi/motifs/emberTrafficGen.cc b/src/sst/elements/ember/mpi/motifs/emberTrafficGen.cc index 9d2d280dc0..4b0f6be7dd 100644 --- a/src/sst/elements/ember/mpi/motifs/emberTrafficGen.cc +++ b/src/sst/elements/ember/mpi/motifs/emberTrafficGen.cc @@ -77,6 +77,8 @@ void EmberTrafficGenGenerator::configure() return; } + EmberMessagePassingGenerator::configure(); + m_rank = rank(); m_distMessageSize = new SSTGaussianDistribution( diff --git a/src/sst/elements/ember/mpi/motifs/emberTrafficGen.h b/src/sst/elements/ember/mpi/motifs/emberTrafficGen.h index 2aa80a7488..d6d753176a 100644 --- a/src/sst/elements/ember/mpi/motifs/emberTrafficGen.h +++ b/src/sst/elements/ember/mpi/motifs/emberTrafficGen.h @@ -44,31 +44,6 @@ class EmberTrafficGenGenerator : public EmberMessagePassingGenerator { { "arg.startDelay", "Sets the stddev of time between exchange", "1"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - - public: EmberTrafficGenGenerator( SST::ComponentId_t, Params& params ); bool generate( std::queue& evQ ) override; diff --git a/src/sst/elements/ember/mpi/motifs/emberallgather.h b/src/sst/elements/ember/mpi/motifs/emberallgather.h index 5b1f911ca3..41bb8525f6 100644 --- a/src/sst/elements/ember/mpi/motifs/emberallgather.h +++ b/src/sst/elements/ember/mpi/motifs/emberallgather.h @@ -41,31 +41,6 @@ class EmberAllgatherGenerator : public EmberMessagePassingGenerator { { "arg.verify", "Verify the data transfer", "true" }, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allgather", "Time spent in Allgather event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - public: EmberAllgatherGenerator(SST::ComponentId_t, Params& params); bool generate( std::queue& evQ); diff --git a/src/sst/elements/ember/mpi/motifs/emberallgatherv.h b/src/sst/elements/ember/mpi/motifs/emberallgatherv.h index cbea1de3ae..5316d9bffd 100644 --- a/src/sst/elements/ember/mpi/motifs/emberallgatherv.h +++ b/src/sst/elements/ember/mpi/motifs/emberallgatherv.h @@ -40,31 +40,6 @@ class EmberAllgathervGenerator : public EmberMessagePassingGenerator { { "arg.verify", "Verify data transfer", "true"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - -public: EmberAllgathervGenerator(SST::ComponentId_t, Params& params); bool generate( std::queue& evQ); diff --git a/src/sst/elements/ember/mpi/motifs/emberallpingpong.h b/src/sst/elements/ember/mpi/motifs/emberallpingpong.h index 1039eed211..8ed5c6d322 100644 --- a/src/sst/elements/ember/mpi/motifs/emberallpingpong.h +++ b/src/sst/elements/ember/mpi/motifs/emberallpingpong.h @@ -40,32 +40,7 @@ class EmberAllPingPongGenerator : public EmberMessagePassingGenerator { { "arg.computetime", "Sets the time spent computing some values", "1000"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - -public: - EmberAllPingPongGenerator(SST::ComponentId_t, Params& params); + EmberAllPingPongGenerator( SST::ComponentId_t, Params& params ); bool generate( std::queue& evQ); private: diff --git a/src/sst/elements/ember/mpi/motifs/emberallreduce.h b/src/sst/elements/ember/mpi/motifs/emberallreduce.h index 6f15b62580..f660474f73 100644 --- a/src/sst/elements/ember/mpi/motifs/emberallreduce.h +++ b/src/sst/elements/ember/mpi/motifs/emberallreduce.h @@ -41,31 +41,6 @@ class EmberAllreduceGenerator : public EmberMessagePassingGenerator { { "arg.doUserFunc", "Test reduce operation", "false"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - -public: EmberAllreduceGenerator(SST::ComponentId_t, Params& params); bool generate( std::queue& evQ); diff --git a/src/sst/elements/ember/mpi/motifs/emberalltoall.h b/src/sst/elements/ember/mpi/motifs/emberalltoall.h index 74dc7823f5..587565af4f 100644 --- a/src/sst/elements/ember/mpi/motifs/emberalltoall.h +++ b/src/sst/elements/ember/mpi/motifs/emberalltoall.h @@ -40,30 +40,6 @@ class EmberAlltoallGenerator : public EmberMessagePassingGenerator { { "arg.bytes", "Sets the number of bytes per rank", "1"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - public: EmberAlltoallGenerator(SST::ComponentId_t, Params& params); bool generate( std::queue& evQ); diff --git a/src/sst/elements/ember/mpi/motifs/emberalltoallv.h b/src/sst/elements/ember/mpi/motifs/emberalltoallv.h index 2f16b64588..a8e96f29eb 100644 --- a/src/sst/elements/ember/mpi/motifs/emberalltoallv.h +++ b/src/sst/elements/ember/mpi/motifs/emberalltoallv.h @@ -39,30 +39,6 @@ class EmberAlltoallvGenerator : public EmberMessagePassingGenerator { { "arg.count", "Sets the number of data items", "1"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - public: EmberAlltoallvGenerator(SST::ComponentId_t, Params& params); bool generate( std::queue& evQ); diff --git a/src/sst/elements/ember/mpi/motifs/emberbarrier.h b/src/sst/elements/ember/mpi/motifs/emberbarrier.h index cee4f4db03..42c1421170 100644 --- a/src/sst/elements/ember/mpi/motifs/emberbarrier.h +++ b/src/sst/elements/ember/mpi/motifs/emberbarrier.h @@ -39,31 +39,6 @@ class EmberBarrierGenerator : public EmberMessagePassingGenerator { { "arg.compute", "Sets the time spent computing", "1"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - -public: EmberBarrierGenerator(SST::ComponentId_t, Params& params); bool generate( std::queue& evQ ); diff --git a/src/sst/elements/ember/mpi/motifs/emberbcast.h b/src/sst/elements/ember/mpi/motifs/emberbcast.h index a6051d2c61..fcd589c7aa 100644 --- a/src/sst/elements/ember/mpi/motifs/emberbcast.h +++ b/src/sst/elements/ember/mpi/motifs/emberbcast.h @@ -41,31 +41,6 @@ class EmberBcastGenerator : public EmberMessagePassingGenerator { { "arg.root", "Sets the root of the reduction", "0"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - -public: EmberBcastGenerator(SST::ComponentId_t, Params& params); bool generate( std::queue& evQ); diff --git a/src/sst/elements/ember/mpi/motifs/emberbipingpong.h b/src/sst/elements/ember/mpi/motifs/emberbipingpong.h index 9d4ccd0744..45f80e1562 100644 --- a/src/sst/elements/ember/mpi/motifs/emberbipingpong.h +++ b/src/sst/elements/ember/mpi/motifs/emberbipingpong.h @@ -39,31 +39,6 @@ class EmberBiPingPongGenerator : public EmberMessagePassingGenerator { { "arg.iterations", "Sets the number of operations to perform", "1"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - -public: EmberBiPingPongGenerator(SST::ComponentId_t, Params& params); bool generate( std::queue& evQ); diff --git a/src/sst/elements/ember/mpi/motifs/embercmt1d.cc b/src/sst/elements/ember/mpi/motifs/embercmt1d.cc index 76bd867e4b..29f9bc9b21 100644 --- a/src/sst/elements/ember/mpi/motifs/embercmt1d.cc +++ b/src/sst/elements/ember/mpi/motifs/embercmt1d.cc @@ -58,19 +58,20 @@ EmberCMT1DGenerator::EmberCMT1DGenerator(SST::ComponentId_t id, Params& params) void EmberCMT1DGenerator::configure() { - myID = rank(); - - // Initialize Marsaglia RNG for compute time - m_random = new SSTGaussianDistribution( m_mean, m_stddev, - new RNG::MarsagliaRNG( 7+myID, getJobId() ) ); - - - if(rank() == 0) { - output("CMT1D (Pairwise Exchange) Motif \n" - "element_size = %" PRIu32 ", elements_per_proc = %" PRIu32 ", total processes = %" PRIu32 \ - "\ncompute time: mean = %fns ,stddev = %fns \nxfersize: %" PRIu64 "\n", - eltSize, nelt, size(), m_mean, m_stddev, xferSize); - } + EmberMessagePassingGenerator::configure(); + + myID = rank(); + // Initialize Marsaglia RNG for compute time + auto rng = new RNG::MarsagliaRNG( 7 + myID, getJobId() ); + m_random = new SSTGaussianDistribution( m_mean, m_stddev, rng ); + + if (rank() == 0) { + output( "CMT1D (Pairwise Exchange) Motif \n" + "element_size = %" PRIu32 ", elements_per_proc = %" PRIu32 ", " + "total processes = %" PRIu32 "\ncompute time: mean = " + "%fns ,stddev = %fns \nxfersize: %" PRIu64 "\n", + eltSize, nelt, size(), m_mean, m_stddev, xferSize ); + } } diff --git a/src/sst/elements/ember/mpi/motifs/embercmt1d.h b/src/sst/elements/ember/mpi/motifs/embercmt1d.h index d5a724bc71..5e19691a9c 100644 --- a/src/sst/elements/ember/mpi/motifs/embercmt1d.h +++ b/src/sst/elements/ember/mpi/motifs/embercmt1d.h @@ -47,32 +47,6 @@ class EmberCMT1DGenerator : public EmberMessagePassingGenerator { { "arg.nsComputeStddev", "Sets the stddev in compute time per processor", "50"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - - -public: EmberCMT1DGenerator(SST::ComponentId_t, Params& params); // ~EmberCMT1DGenerator(); void configure() override; diff --git a/src/sst/elements/ember/mpi/motifs/embercmt2d.cc b/src/sst/elements/ember/mpi/motifs/embercmt2d.cc index 8a19bd9c06..616647b21d 100644 --- a/src/sst/elements/ember/mpi/motifs/embercmt2d.cc +++ b/src/sst/elements/ember/mpi/motifs/embercmt2d.cc @@ -67,60 +67,61 @@ EmberCMT2DGenerator::EmberCMT2DGenerator(SST::ComponentId_t id, Params& params) void EmberCMT2DGenerator::configure() { - // Check that we are using all the processors or else lock up will happen :(. - if( (px * py) != (signed)size() ) { - fatal(CALL_INFO, -1, "Error: CMT2D motif checked processor decomposition: %" PRIu32 \ - "x%" PRIu32 " != MPI World %" PRIu32 "\n", - px, py, size()); - } - - if(rank() == 0) { - output(" CMT2D Motif \n" \ - "element_size = %" PRIu32 ", elements_per_proc = %" PRIu32 ", total processes = %" PRIu32 \ - "\ncompute time: mean = %fns ,stddev = %fns \ - \nx_xfer: %" PRIu64 " ,y_xfer: %" PRIu64 \ - "\npx: %" PRIu32 " ,py: %" PRIu32 "\n", - eltSize, nelt, size(), m_mean, m_stddev, - x_xferSize, y_xferSize, px, py ); - - } - - // Get our (x,y) position and neighboring ranks in a 3D decomposition - myX=-1; myY=-1; - myID = rank(); - getPosition(rank(), px, py, &myX, &myY); - - // Initialize Marsaglia RNG for compute time - m_random = new SSTGaussianDistribution( m_mean, m_stddev, - new RNG::MarsagliaRNG( 7+myID, getJobId() ) ); - - // Set which direction to transfer and the neighbors in that direction - if( myY > 0 ) { - x_neg = convertPositionToRank(px, py, myX-1, myY); - sendx_neg = true; - } - if( myY < px-1 ) { - x_pos = convertPositionToRank(px, py, myX+1, myY); - sendx_pos = true; - } - if( myX > 0 ) { - y_neg = convertPositionToRank(px, py, myX, myY-1); - sendy_neg = true; - } - if( myX < py-1 ) { - y_pos = convertPositionToRank(px, py, myX, myY+1); - sendy_pos = true; - } - - verbose(CALL_INFO, 2, 0, "Rank: %" PRIu64 " is located at coordinates \ - (%" PRId32 ", %" PRId32 ") in the 2D mesh, \ - X+:%s %" PRId32 ",X-:%s %" PRId32 ", Y+:%s %" PRId32 ",Y-:%s %" PRId32 "\n", - myID, - myX, myY, - (sendx_pos ? "Y" : "N"), x_pos, - (sendx_neg ? "Y" : "N"), x_neg, - (sendy_pos ? "Y" : "N"), y_pos, - (sendy_neg ? "Y" : "N"), y_neg ); + EmberMessagePassingGenerator::configure(); + + // Check that we are using all the processors or else lock up will happen :(. + if ( (px * py) != (signed)size() ) { + fatal(CALL_INFO, -1, "Error: CMT2D motif checked processor decomposition: %" PRIu32 \ + "x%" PRIu32 " != MPI World %" PRIu32 "\n", + px, py, size()); + } + + if ( rank() == 0 ) { + output(" CMT2D Motif \n" \ + "element_size = %" PRIu32 ", elements_per_proc = %" PRIu32 ", total processes = %" PRIu32 \ + "\ncompute time: mean = %fns ,stddev = %fns \ + \nx_xfer: %" PRIu64 " ,y_xfer: %" PRIu64 \ + "\npx: %" PRIu32 " ,py: %" PRIu32 "\n", + eltSize, nelt, size(), m_mean, m_stddev, + x_xferSize, y_xferSize, px, py ); + } + + // Get our (x,y) position and neighboring ranks in a 3D decomposition + myX=-1; myY=-1; + myID = rank(); + getPosition(rank(), px, py, &myX, &myY); + + // Initialize Marsaglia RNG for compute time + m_random = new SSTGaussianDistribution( m_mean, m_stddev, + new RNG::MarsagliaRNG( 7+myID, getJobId() ) ); + + // Set which direction to transfer and the neighbors in that direction + if( myY > 0 ) { + x_neg = convertPositionToRank(px, py, myX-1, myY); + sendx_neg = true; + } + if( myY < px-1 ) { + x_pos = convertPositionToRank(px, py, myX+1, myY); + sendx_pos = true; + } + if( myX > 0 ) { + y_neg = convertPositionToRank(px, py, myX, myY-1); + sendy_neg = true; + } + if( myX < py-1 ) { + y_pos = convertPositionToRank(px, py, myX, myY+1); + sendy_pos = true; + } + + verbose(CALL_INFO, 2, 0, "Rank: %" PRIu64 " is located at coordinates \ + (%" PRId32 ", %" PRId32 ") in the 2D mesh, \ + X+:%s %" PRId32 ",X-:%s %" PRId32 ", Y+:%s %" PRId32 ",Y-:%s %" PRId32 "\n", + myID, + myX, myY, + (sendx_pos ? "Y" : "N"), x_pos, + (sendx_neg ? "Y" : "N"), x_neg, + (sendy_pos ? "Y" : "N"), y_pos, + (sendy_neg ? "Y" : "N"), y_neg ); } bool EmberCMT2DGenerator::generate( std::queue& evQ) diff --git a/src/sst/elements/ember/mpi/motifs/embercmt2d.h b/src/sst/elements/ember/mpi/motifs/embercmt2d.h index 2199889411..c19ecbbc71 100644 --- a/src/sst/elements/ember/mpi/motifs/embercmt2d.h +++ b/src/sst/elements/ember/mpi/motifs/embercmt2d.h @@ -51,31 +51,6 @@ class EmberCMT2DGenerator : public EmberMessagePassingGenerator { { "arg.nsComputeStddev", "Sets the stddev in compute time per processor", "50"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - - public: EmberCMT2DGenerator(SST::ComponentId_t, Params& params); // ~EmberCMT2DGenerator(); diff --git a/src/sst/elements/ember/mpi/motifs/embercmt3d.cc b/src/sst/elements/ember/mpi/motifs/embercmt3d.cc index 7a43df5cfc..2d9e522756 100644 --- a/src/sst/elements/ember/mpi/motifs/embercmt3d.cc +++ b/src/sst/elements/ember/mpi/motifs/embercmt3d.cc @@ -72,88 +72,85 @@ EmberCMT3DGenerator::EmberCMT3DGenerator(SST::ComponentId_t id, Params& params) void EmberCMT3DGenerator::configure() { - - // Check that we are using all the processors or else lock up will happen :(. -// if( (px * py *pz *threads) != (signed)size() ) { - if( (px * py *pz *threads) != (signed)size() ) { - fatal(CALL_INFO, -1, "Error: CMT3D motif checked processor decomposition: %" \ - PRId32 "x%" PRId32 "x%" PRId32 "x%" PRIu32 " != MPI World %" PRIu32 "\n", - px, py, pz, threads, size()); - } - - if(rank() == 0) { - output( "CMT3D (Pairwise Exchange) Motif \n" \ - "nx1 (elt_size) = %" PRIu32 ", nelt (elts/proc) = %" PRIu32 ", np (total processes) = %" PRIu32 \ - ", elements (total) = %" PRIu32 \ - "\npx: %" PRIu32 " ,py: %" PRIu32 " ,pz: %" PRIu32 " ,threads/proc: %" PRIu32 \ - "\nmx: %" PRIu32 " ,my: %" PRIu32 " ,mz: %" PRIu32 \ - "\ncompute time: mean = %fns ,stddev = %fns \ - \nx_xfer: %" PRIu64 " ,y_xfer: %" PRIu64 " ,z_xfer: %" PRIu64 "\n", - eltSize, nelt, size(), nelt*size(), - px, py, pz, threads, - mx, my, mz, - m_mean, m_stddev, - x_xferSize, y_xferSize, z_xferSize ); - } - - // Get our (x,y,z) position and neighboring ranks in a 3D decomposition - myX=-1; myY=-1; myZ=-1; - myID = rank(); - getPosition(myID, px, py, pz, &myX, &myY, &myZ); - - // Initialize Marsaglia RNG for compute time - m_random = new SSTGaussianDistribution( m_mean, m_stddev, - new RNG::MarsagliaRNG( 7+myID, getJobId() ) ); - - // Set which direction to transfer and the neighbors in that direction - if( myX > 0 ) { - sendx_neg = true; - x_neg = convertPositionToRank(px, py, pz, myX-1, myY, myZ); - } - - if( myX < px-1 ) { - sendx_pos = true; - x_pos = convertPositionToRank(px, py, pz, myX+1, myY, myZ); - } - - if( myY > 0 ) { - sendy_neg = true; - y_neg = convertPositionToRank(px, py, pz, myX, myY-1, myZ); - } - - if( myY < py-1 ) { - sendy_pos = true; - y_pos = convertPositionToRank(px, py, pz, myX, myY+1, myZ); - } - - if( myZ > 0 ) { - sendz_neg = true; - z_neg = convertPositionToRank(px, py, pz, myX, myY, myZ-1); - } - - if( myZ < pz-1 ) { - sendz_pos = true; - z_pos = convertPositionToRank(px, py, pz, myX, myY, myZ+1); - } - - verbose(CALL_INFO, 2, 0, "Rank: %" PRIu64 " is located at coordinates \ - (%" PRId32 ", %" PRId32 ", %" PRId32") in the 3D grid,\ - X+:%s %" PRId32 ", X-:%s %" PRId32 ", \ - Y+:%s %" PRId32 ", Y-:%s %" PRId32 ", \ - Z+:%s %" PRId32 ", Z-:%s %" PRId32 "\n", - myID, - myX, myY, myZ, - (sendx_pos ? "Y" : "N"), x_pos, - (sendx_neg ? "Y" : "N"), x_neg, - (sendy_pos ? "Y" : "N"), y_pos, - (sendy_neg ? "Y" : "N"), y_neg, - (sendz_pos ? "Y" : "N"), z_pos, - (sendz_neg ? "Y" : "N"), z_neg); - + EmberMessagePassingGenerator::configure(); + + // Check that we are using all the processors or else lock up will happen :(. + if( (px * py *pz *threads) != (signed)size() ) { + fatal(CALL_INFO, -1, "Error: CMT3D motif checked processor decomposition: %" \ + PRId32 "x%" PRId32 "x%" PRId32 "x%" PRIu32 " != MPI World %" PRIu32 "\n", + px, py, pz, threads, size()); + } + + if(rank() == 0) { + output( "CMT3D (Pairwise Exchange) Motif \n" \ + "nx1 (elt_size) = %" PRIu32 ", nelt (elts/proc) = %" PRIu32 ", np (total processes) = %" PRIu32 \ + ", elements (total) = %" PRIu32 \ + "\npx: %" PRIu32 " ,py: %" PRIu32 " ,pz: %" PRIu32 " ,threads/proc: %" PRIu32 \ + "\nmx: %" PRIu32 " ,my: %" PRIu32 " ,mz: %" PRIu32 \ + "\ncompute time: mean = %fns ,stddev = %fns \ + \nx_xfer: %" PRIu64 " ,y_xfer: %" PRIu64 " ,z_xfer: %" PRIu64 "\n", + eltSize, nelt, size(), nelt*size(), + px, py, pz, threads, + mx, my, mz, + m_mean, m_stddev, + x_xferSize, y_xferSize, z_xferSize ); + } + + // Get our (x,y,z) position and neighboring ranks in a 3D decomposition + myX=-1; myY=-1; myZ=-1; + myID = rank(); + getPosition(myID, px, py, pz, &myX, &myY, &myZ); + + // Initialize Marsaglia RNG for compute time + m_random = new SSTGaussianDistribution( m_mean, m_stddev, + new RNG::MarsagliaRNG( 7+myID, getJobId() ) ); + + // Set which direction to transfer and the neighbors in that direction + if( myX > 0 ) { + sendx_neg = true; + x_neg = convertPositionToRank(px, py, pz, myX-1, myY, myZ); + } + + if( myX < px-1 ) { + sendx_pos = true; + x_pos = convertPositionToRank(px, py, pz, myX+1, myY, myZ); + } + + if( myY > 0 ) { + sendy_neg = true; + y_neg = convertPositionToRank(px, py, pz, myX, myY-1, myZ); + } + + if( myY < py-1 ) { + sendy_pos = true; + y_pos = convertPositionToRank(px, py, pz, myX, myY+1, myZ); + } + + if( myZ > 0 ) { + sendz_neg = true; + z_neg = convertPositionToRank(px, py, pz, myX, myY, myZ-1); + } + + if( myZ < pz-1 ) { + sendz_pos = true; + z_pos = convertPositionToRank(px, py, pz, myX, myY, myZ+1); + } + + verbose(CALL_INFO, 2, 0, "Rank: %" PRIu64 " is located at coordinates \ + (%" PRId32 ", %" PRId32 ", %" PRId32") in the 3D grid,\ + X+:%s %" PRId32 ", X-:%s %" PRId32 ", \ + Y+:%s %" PRId32 ", Y-:%s %" PRId32 ", \ + Z+:%s %" PRId32 ", Z-:%s %" PRId32 "\n", + myID, + myX, myY, myZ, + (sendx_pos ? "Y" : "N"), x_pos, + (sendx_neg ? "Y" : "N"), x_neg, + (sendy_pos ? "Y" : "N"), y_pos, + (sendy_neg ? "Y" : "N"), y_neg, + (sendz_pos ? "Y" : "N"), z_pos, + (sendz_neg ? "Y" : "N"), z_neg); } - - bool EmberCMT3DGenerator::generate( std::queue& evQ) { if (m_loopIndex == 0) { diff --git a/src/sst/elements/ember/mpi/motifs/embercmt3d.h b/src/sst/elements/ember/mpi/motifs/embercmt3d.h index 610197802c..9885688d34 100644 --- a/src/sst/elements/ember/mpi/motifs/embercmt3d.h +++ b/src/sst/elements/ember/mpi/motifs/embercmt3d.h @@ -52,31 +52,6 @@ class EmberCMT3DGenerator : public EmberMessagePassingGenerator { { "arg.nsComputeStddev", "Sets the stddev in compute time per processor", "50"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - -public: EmberCMT3DGenerator(SST::ComponentId_t, Params& params); // ~EmberCMT3DGenerator(); void configure() override; diff --git a/src/sst/elements/ember/mpi/motifs/embercmtcr.cc b/src/sst/elements/ember/mpi/motifs/embercmtcr.cc index 196837a036..d773211590 100644 --- a/src/sst/elements/ember/mpi/motifs/embercmtcr.cc +++ b/src/sst/elements/ember/mpi/motifs/embercmtcr.cc @@ -63,6 +63,8 @@ EmberCMTCRGenerator::EmberCMTCRGenerator(SST::ComponentId_t id, Params& params) void EmberCMTCRGenerator::configure() { + EmberMessagePassingGenerator::configure(); + if( (px * py *pz) != (signed)size() ) { fatal(CALL_INFO, -1, "Error: CMTCR motif checked processor decomposition: %" \ PRIu32 "x%" PRIu32 "x%" PRIu32 " != MPI World %" PRIu32 "\n", @@ -91,11 +93,8 @@ void EmberCMTCRGenerator::configure() verbose(CALL_INFO, 2, 0, "Rank: %" PRIu64 " is located at coordinates \ (%" PRId32 ", %" PRId32 ", %" PRId32") in the 3D grid, \n", myID, myX, myY, myZ ); - } - - bool EmberCMTCRGenerator::generate( std::queue& evQ) { if (m_loopIndex == 0) { @@ -137,17 +136,4 @@ bool EmberCMTCRGenerator::generate( std::queue& evQ) } else { return false; } - } - - - - - - - - - - - - diff --git a/src/sst/elements/ember/mpi/motifs/embercmtcr.h b/src/sst/elements/ember/mpi/motifs/embercmtcr.h index 4f2f684dc3..15fb514acb 100644 --- a/src/sst/elements/ember/mpi/motifs/embercmtcr.h +++ b/src/sst/elements/ember/mpi/motifs/embercmtcr.h @@ -52,31 +52,6 @@ class EmberCMTCRGenerator : public EmberMessagePassingGenerator { { "arg.nsComputeStddev", "Sets the stddev in compute time per processor", "50"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - -public: EmberCMTCRGenerator(SST::ComponentId_t, Params& params); // ~EmberCMT3DGenerator(); void configure() override; diff --git a/src/sst/elements/ember/mpi/motifs/embercomm.h b/src/sst/elements/ember/mpi/motifs/embercomm.h index 36da2a4808..c34585bfd2 100644 --- a/src/sst/elements/ember/mpi/motifs/embercomm.h +++ b/src/sst/elements/ember/mpi/motifs/embercomm.h @@ -39,31 +39,6 @@ class EmberCommGenerator : public EmberMessagePassingGenerator { { "arg.iterations", "Sets the number of ping pong operations to perform", "1"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - -public: EmberCommGenerator(SST::ComponentId_t, Params& params); bool generate( std::queue& evQ); diff --git a/src/sst/elements/ember/mpi/motifs/emberdetailedring.h b/src/sst/elements/ember/mpi/motifs/emberdetailedring.h index 7dd8b5af8c..064fe38274 100644 --- a/src/sst/elements/ember/mpi/motifs/emberdetailedring.h +++ b/src/sst/elements/ember/mpi/motifs/emberdetailedring.h @@ -44,31 +44,6 @@ class EmberDetailedRingGenerator : public EmberMessagePassingGenerator { { "arg.computeWindow", "Sets the maximum compute time", "0"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - -public: EmberDetailedRingGenerator(SST::ComponentId_t, Params& params); bool generate( std::queue& evQ); std::string getComputeModelName(); diff --git a/src/sst/elements/ember/mpi/motifs/emberdetailedstream.h b/src/sst/elements/ember/mpi/motifs/emberdetailedstream.h index 1497f9f465..874aeff8a7 100644 --- a/src/sst/elements/ember/mpi/motifs/emberdetailedstream.h +++ b/src/sst/elements/ember/mpi/motifs/emberdetailedstream.h @@ -42,30 +42,6 @@ class EmberDetailedStreamGenerator : public EmberMessagePassingGenerator { { "arg.n_loops", "Sets the number of loops", "2"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - public: EmberDetailedStreamGenerator(SST::ComponentId_t, Params& params); bool generate( std::queue& evQ); diff --git a/src/sst/elements/ember/mpi/motifs/emberfft3d.cc b/src/sst/elements/ember/mpi/motifs/emberfft3d.cc index d20ea03de9..6c8aa68967 100644 --- a/src/sst/elements/ember/mpi/motifs/emberfft3d.cc +++ b/src/sst/elements/ember/mpi/motifs/emberfft3d.cc @@ -58,6 +58,8 @@ EmberFFT3DGenerator::EmberFFT3DGenerator(SST::ComponentId_t id, Params& params) void EmberFFT3DGenerator::configure() { + EmberMessagePassingGenerator::configure(); + m_data.npcol = size() / m_data.nprow; assert( 0 == (size() % m_data.nprow) ); diff --git a/src/sst/elements/ember/mpi/motifs/emberfft3d.h b/src/sst/elements/ember/mpi/motifs/emberfft3d.h index d61b9cf1e9..7dcb0416c6 100644 --- a/src/sst/elements/ember/mpi/motifs/emberfft3d.h +++ b/src/sst/elements/ember/mpi/motifs/emberfft3d.h @@ -49,31 +49,6 @@ class EmberFFT3DGenerator : public EmberMessagePassingGenerator { { "arg.bwd_fft3", "", "" }, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - -public: EmberFFT3DGenerator(SST::ComponentId_t, Params& params); ~EmberFFT3DGenerator() {} void configure() override; diff --git a/src/sst/elements/ember/mpi/motifs/emberfini.h b/src/sst/elements/ember/mpi/motifs/emberfini.h index b358a967b0..dc6889d8fe 100644 --- a/src/sst/elements/ember/mpi/motifs/emberfini.h +++ b/src/sst/elements/ember/mpi/motifs/emberfini.h @@ -37,31 +37,6 @@ class EmberFiniGenerator : public EmberMessagePassingGenerator { SST_ELI_DOCUMENT_PARAMS( ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - -public: EmberFiniGenerator(SST::ComponentId_t id, Params& params) : EmberMessagePassingGenerator(id, params, "Fini") { } diff --git a/src/sst/elements/ember/mpi/motifs/emberhalo2d.cc b/src/sst/elements/ember/mpi/motifs/emberhalo2d.cc index 5e80eca87b..2a2937cff4 100644 --- a/src/sst/elements/ember/mpi/motifs/emberhalo2d.cc +++ b/src/sst/elements/ember/mpi/motifs/emberhalo2d.cc @@ -53,6 +53,8 @@ EmberHalo2DGenerator::EmberHalo2DGenerator(SST::ComponentId_t id, Params& params void EmberHalo2DGenerator::configure() { + EmberMessagePassingGenerator::configure(); + // Do we need to auto-size the 2D processor array? if(0 == sizeX || 0 == sizeY) { uint32_t localX = SST::Math::square_root(size()); diff --git a/src/sst/elements/ember/mpi/motifs/emberhalo2d.h b/src/sst/elements/ember/mpi/motifs/emberhalo2d.h index 03df345b58..46e2596b0a 100644 --- a/src/sst/elements/ember/mpi/motifs/emberhalo2d.h +++ b/src/sst/elements/ember/mpi/motifs/emberhalo2d.h @@ -44,32 +44,6 @@ class EmberHalo2DGenerator : public EmberMessagePassingGenerator { { "arg.sizey", "Sets the processor decomposition in X", "0"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - - -public: EmberHalo2DGenerator( SST::ComponentId_t id, Params& params ); void configure() override; bool generate( std::queue& evQ ) override; diff --git a/src/sst/elements/ember/mpi/motifs/emberhalo2dNBR.cc b/src/sst/elements/ember/mpi/motifs/emberhalo2dNBR.cc index 61945c70a0..f9d43b3795 100644 --- a/src/sst/elements/ember/mpi/motifs/emberhalo2dNBR.cc +++ b/src/sst/elements/ember/mpi/motifs/emberhalo2dNBR.cc @@ -55,6 +55,8 @@ void EmberHalo2DNBRGenerator::completed(const SST::Output* output, uint64_t) { void EmberHalo2DNBRGenerator::configure() { + EmberMessagePassingGenerator::configure(); + if(0 == rank()) { output("PingPong, size=%d msgSizeX=%d msgSizeY=%d" " iter=%d nsCompute=%d\n", diff --git a/src/sst/elements/ember/mpi/motifs/emberhalo2dNBR.h b/src/sst/elements/ember/mpi/motifs/emberhalo2dNBR.h index 3721d68ad8..904b6890d5 100644 --- a/src/sst/elements/ember/mpi/motifs/emberhalo2dNBR.h +++ b/src/sst/elements/ember/mpi/motifs/emberhalo2dNBR.h @@ -43,31 +43,6 @@ class EmberHalo2DNBRGenerator : public EmberMessagePassingGenerator { { "arg.sizey", "Sets the processor decomposition in X", "0"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - -public: EmberHalo2DNBRGenerator( SST::ComponentId_t, Params& params ); void configure() override; bool generate( std::queue& evQ ) override; diff --git a/src/sst/elements/ember/mpi/motifs/emberhalo3d.cc b/src/sst/elements/ember/mpi/motifs/emberhalo3d.cc index 5245a4b8d7..631fee8e5b 100644 --- a/src/sst/elements/ember/mpi/motifs/emberhalo3d.cc +++ b/src/sst/elements/ember/mpi/motifs/emberhalo3d.cc @@ -60,6 +60,8 @@ EmberHalo3DGenerator::EmberHalo3DGenerator(SST::ComponentId_t id, Params& params void EmberHalo3DGenerator::configure() { + EmberMessagePassingGenerator::configure(); + unsigned worldSize = size(); if(peX == 0 || peY == 0 || peZ == 0) { diff --git a/src/sst/elements/ember/mpi/motifs/emberhalo3d.h b/src/sst/elements/ember/mpi/motifs/emberhalo3d.h index 72b8304c36..06a1a5524c 100644 --- a/src/sst/elements/ember/mpi/motifs/emberhalo3d.h +++ b/src/sst/elements/ember/mpi/motifs/emberhalo3d.h @@ -51,32 +51,6 @@ class EmberHalo3DGenerator : public EmberMessagePassingGenerator { { "arg.iterations", "Sets the number of halo3d operations to perform", "10"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - - -public: EmberHalo3DGenerator( SST::ComponentId_t, Params& params ); ~EmberHalo3DGenerator() {} void configure() override; diff --git a/src/sst/elements/ember/mpi/motifs/emberhalo3d26.h b/src/sst/elements/ember/mpi/motifs/emberhalo3d26.h index d139500711..e1dbdd8898 100644 --- a/src/sst/elements/ember/mpi/motifs/emberhalo3d26.h +++ b/src/sst/elements/ember/mpi/motifs/emberhalo3d26.h @@ -51,32 +51,6 @@ class EmberHalo3D26Generator : public EmberMessagePassingGenerator { { "arg.iterations", "Sets the number of ping pong operations to perform", "10"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - - -public: EmberHalo3D26Generator(SST::ComponentId_t, Params& params); ~EmberHalo3D26Generator() {} bool generate( std::queue& evQ); diff --git a/src/sst/elements/ember/mpi/motifs/emberhalo3dsv.cc b/src/sst/elements/ember/mpi/motifs/emberhalo3dsv.cc index a5c8ae889b..b09247b934 100644 --- a/src/sst/elements/ember/mpi/motifs/emberhalo3dsv.cc +++ b/src/sst/elements/ember/mpi/motifs/emberhalo3dsv.cc @@ -63,6 +63,8 @@ EmberHalo3DSVGenerator::EmberHalo3DSVGenerator(SST::ComponentId_t id, Params& pa void EmberHalo3DSVGenerator::configure() { + EmberMessagePassingGenerator::configure(); + if(peX == 0 || peY == 0 || peZ == 0) { peX = size(); peY = 1; diff --git a/src/sst/elements/ember/mpi/motifs/emberhalo3dsv.h b/src/sst/elements/ember/mpi/motifs/emberhalo3dsv.h index 0746955674..c88fba90d7 100644 --- a/src/sst/elements/ember/mpi/motifs/emberhalo3dsv.h +++ b/src/sst/elements/ember/mpi/motifs/emberhalo3dsv.h @@ -52,32 +52,6 @@ class EmberHalo3DSVGenerator : public EmberMessagePassingGenerator { { "arg.iterations", "Sets the number of ping pong operations to perform", "10"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - - -public: EmberHalo3DSVGenerator( SST::ComponentId_t, Params& params ); ~EmberHalo3DSVGenerator() {} void configure() override; diff --git a/src/sst/elements/ember/mpi/motifs/emberhotspots.h b/src/sst/elements/ember/mpi/motifs/emberhotspots.h index 756d094b5f..bab9a19125 100644 --- a/src/sst/elements/ember/mpi/motifs/emberhotspots.h +++ b/src/sst/elements/ember/mpi/motifs/emberhotspots.h @@ -44,32 +44,6 @@ class EmberHotSpotsGenerator : public EmberMessagePassingGenerator { { "arg.startDelay", "Sets the stddev of time between exchange", "1"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - - -public: EmberHotSpotsGenerator(SST::ComponentId_t, Params& params); bool generate( std::queue& evQ); bool primary( ) { diff --git a/src/sst/elements/ember/mpi/motifs/emberincast.h b/src/sst/elements/ember/mpi/motifs/emberincast.h index 0d25fbc263..9e938169d5 100644 --- a/src/sst/elements/ember/mpi/motifs/emberincast.h +++ b/src/sst/elements/ember/mpi/motifs/emberincast.h @@ -39,31 +39,7 @@ class EmberIncastGenerator : public EmberMessagePassingGenerator { { "arg.iterations", "Sets the number of ping pong operations to perform", "1"}, { "arg.incasttarget", "Sets the incast target for communications", "0"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) -public: EmberIncastGenerator(SST::ComponentId_t, Params& params); bool generate( std::queue& evQ); diff --git a/src/sst/elements/ember/mpi/motifs/emberinit.h b/src/sst/elements/ember/mpi/motifs/emberinit.h index db38595d85..e998b5798b 100644 --- a/src/sst/elements/ember/mpi/motifs/emberinit.h +++ b/src/sst/elements/ember/mpi/motifs/emberinit.h @@ -37,32 +37,6 @@ class EmberInitGenerator : public EmberMessagePassingGenerator { SST_ELI_DOCUMENT_PARAMS( ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - -public: - EmberInitGenerator(SST::ComponentId_t id, Params& params) : EmberMessagePassingGenerator(id, params, "Init" ), m_rank(-1), diff --git a/src/sst/elements/ember/mpi/motifs/emberlqcd.cc b/src/sst/elements/ember/mpi/motifs/emberlqcd.cc index 90a3a407ad..c41271bd14 100644 --- a/src/sst/elements/ember/mpi/motifs/emberlqcd.cc +++ b/src/sst/elements/ember/mpi/motifs/emberlqcd.cc @@ -253,6 +253,8 @@ int EmberLQCDGenerator::node_number(int x, int y, int z, int t) { void EmberLQCDGenerator::configure() { + EmberMessagePassingGenerator::configure(); + //determine the problem size given to each node //code from MILC setup_hyper_prime() setup_hyper_prime(); diff --git a/src/sst/elements/ember/mpi/motifs/emberlqcd.h b/src/sst/elements/ember/mpi/motifs/emberlqcd.h index 27b7e0da73..ba6567d139 100644 --- a/src/sst/elements/ember/mpi/motifs/emberlqcd.h +++ b/src/sst/elements/ember/mpi/motifs/emberlqcd.h @@ -76,31 +76,6 @@ class EmberLQCDGenerator : public EmberMessagePassingGenerator { { "arg.iterations", "Sets the number of ping pong operations to perform", "1"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - -public: EmberLQCDGenerator( SST::ComponentId_t, Params& params ); ~EmberLQCDGenerator() {} void configure() override; diff --git a/src/sst/elements/ember/mpi/motifs/embermsgrate.h b/src/sst/elements/ember/mpi/motifs/embermsgrate.h index 10777a9a7c..8fa3600494 100644 --- a/src/sst/elements/ember/mpi/motifs/embermsgrate.h +++ b/src/sst/elements/ember/mpi/motifs/embermsgrate.h @@ -40,31 +40,6 @@ class EmberMsgRateGenerator : public EmberMessagePassingGenerator { { "arg.iterations", "Sets the number of ping pong operations to perform", "1"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - -public: EmberMsgRateGenerator(SST::ComponentId_t, Params& params); bool generate( std::queue& evQ); diff --git a/src/sst/elements/ember/mpi/motifs/embernaslu.cc b/src/sst/elements/ember/mpi/motifs/embernaslu.cc index 768713d730..0a664beaee 100644 --- a/src/sst/elements/ember/mpi/motifs/embernaslu.cc +++ b/src/sst/elements/ember/mpi/motifs/embernaslu.cc @@ -45,32 +45,39 @@ EmberNASLUGenerator::EmberNASLUGenerator(SST::ComponentId_t id, Params& params) void EmberNASLUGenerator::configure() { - // Check that we are using all the processors or else lock up will happen :(. - if( (px * py) != (signed)size() ) { - fatal(CALL_INFO, -1, "Error: NAS-LU motif checked processor decomposition: %" PRIu32 "x%" PRIu32 " != MPI World %" PRIu32 "\n", - px, py, size()); - } + EmberMessagePassingGenerator::configure(); - int32_t myX = 0; - int32_t myY = 0; + // Check that we are using all the processors or else lock up will happen :(. + if( (px * py) != (signed)size() ) { + fatal(CALL_INFO, -1, "Error: NAS-LU motif checked processor decomposition: " + "%" PRIu32 "x%" PRIu32 " != MPI World %" PRIu32 "\n", + px, py, size()); + } - // Get our position in a 2D processor array - getPosition(rank(), px, py, &myX, &myY); + int32_t myX = 0; + int32_t myY = 0; - x_up = (myX != (px - 1)) ? rank() + 1 : -1; - x_down = (myX != 0) ? rank() - 1 : -1; + // Get our position in a 2D processor array + getPosition(rank(), px, py, &myX, &myY); - y_up = (myY != (py - 1)) ? rank() + px : -1; - y_down = (myY != 0) ? rank() - px : -1; + x_up = (myX != (px - 1)) ? rank() + 1 : -1; + x_down = (myX != 0) ? rank() - 1 : -1; - if(0 == rank()) { - verbose(CALL_INFO, 1, 0, " NAS-LU Motif\n"); - verbose(CALL_INFO, 1, 0, " nx = %" PRIu32 ", ny = %" PRIu32 ", nz = %" PRIu32 ", nzblock=%" PRIu32 ", (nx/nzblock)=%" PRIu32 "\n", - nx, ny, nz, nzblock, (nz / nzblock)); - } + y_up = (myY != (py - 1)) ? rank() + px : -1; + y_down = (myY != 0) ? rank() - px : -1; + + if ( 0 == rank() ) { + verbose(CALL_INFO, 1, 0, " NAS-LU Motif\n"); + verbose(CALL_INFO, 1, 0, " nx = %" PRIu32 ", ny = %" PRIu32 "," + " nz = %" PRIu32 ", nzblock=%" PRIu32 "," + " (nx/nzblock)=%" PRIu32 "\n", + nx, ny, nz, nzblock, (nz / nzblock)); + } - verbose(CALL_INFO, 1, 0, " Rank: %" PRIu32 " is located at coordinations of (%" PRId32 ", %" PRId32 ") in the 2D decomposition, X+: %" PRId32 ",X-:%" PRId32 ",Y+:%" PRId32 ",Y-:%" PRId32 "\n", - rank(), myX, myY, x_up, x_down, y_up, y_down); + verbose(CALL_INFO, 1, 0, " Rank: %" PRIu32 " is located at coordinations of " + "(%" PRId32 ", %" PRId32 ") in the 2D decomposition, X+: " + "%" PRId32 ",X-:%" PRId32 ",Y+:%" PRId32 ",Y-:%" PRId32 "\n", + rank(), myX, myY, x_up, x_down, y_up, y_down); } bool EmberNASLUGenerator::generate( std::queue& evQ) diff --git a/src/sst/elements/ember/mpi/motifs/embernaslu.h b/src/sst/elements/ember/mpi/motifs/embernaslu.h index 3d54f5ca49..4f70f619c6 100644 --- a/src/sst/elements/ember/mpi/motifs/embernaslu.h +++ b/src/sst/elements/ember/mpi/motifs/embernaslu.h @@ -45,32 +45,6 @@ class EmberNASLUGenerator : public EmberMessagePassingGenerator { { "arg.nzblock", "Sets the Z-dimensional block size (Nz % Nzblock == 0, default is 1)", "1"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - - -public: EmberNASLUGenerator( SST::ComponentId_t, Params& params ); void configure() override; bool generate( std::queue& evQ ) override; diff --git a/src/sst/elements/ember/mpi/motifs/embernull.h b/src/sst/elements/ember/mpi/motifs/embernull.h index 2b54f39933..77e0b8d47a 100644 --- a/src/sst/elements/ember/mpi/motifs/embernull.h +++ b/src/sst/elements/ember/mpi/motifs/embernull.h @@ -37,31 +37,6 @@ class EmberNullGenerator : public EmberMessagePassingGenerator { SST_ELI_DOCUMENT_PARAMS( ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - -public: EmberNullGenerator(SST::ComponentId_t id, Params& params) : EmberMessagePassingGenerator(id, params, "Null" ) { } diff --git a/src/sst/elements/ember/mpi/motifs/emberotf2.cc b/src/sst/elements/ember/mpi/motifs/emberotf2.cc index 58a87de60c..8335b569f1 100644 --- a/src/sst/elements/ember/mpi/motifs/emberotf2.cc +++ b/src/sst/elements/ember/mpi/motifs/emberotf2.cc @@ -444,6 +444,8 @@ EmberOTF2Generator::EmberOTF2Generator(SST::ComponentId_t id, Params& params) : void EmberOTF2Generator::configure() { + EmberMessagePassingGenerator::configure(); + m_size = size(); OTF2_Reader_SetSerialCollectiveCallbacks( traceReader ); diff --git a/src/sst/elements/ember/mpi/motifs/emberotf2.h b/src/sst/elements/ember/mpi/motifs/emberotf2.h index 41774c2a56..b5cbb65664 100644 --- a/src/sst/elements/ember/mpi/motifs/emberotf2.h +++ b/src/sst/elements/ember/mpi/motifs/emberotf2.h @@ -52,30 +52,6 @@ class EmberOTF2Generator : public EmberMessagePassingGenerator { { "arg.addCompute", "Add compute time to try to match trace timestamps", "false" } ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - void setTimerResolution(uint64_t timerResolution) { m_timerResolution = timerResolution; } diff --git a/src/sst/elements/ember/mpi/motifs/emberpingpong.h b/src/sst/elements/ember/mpi/motifs/emberpingpong.h index 974aeadc9a..c1c49b67c3 100644 --- a/src/sst/elements/ember/mpi/motifs/emberpingpong.h +++ b/src/sst/elements/ember/mpi/motifs/emberpingpong.h @@ -42,31 +42,7 @@ class EmberPingPongGenerator : public EmberMessagePassingGenerator { { "arg.blockingRecv", "Sets the recv mode", "1"}, { "arg.waitall", "Sets the wait mode", "1"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) -public: EmberPingPongGenerator(SST::ComponentId_t, Params& params); bool generate( std::queue& evQ); diff --git a/src/sst/elements/ember/mpi/motifs/emberrandomgen.h b/src/sst/elements/ember/mpi/motifs/emberrandomgen.h index 657b56a62c..c86248167b 100644 --- a/src/sst/elements/ember/mpi/motifs/emberrandomgen.h +++ b/src/sst/elements/ember/mpi/motifs/emberrandomgen.h @@ -39,30 +39,6 @@ class EmberRandomTrafficGenerator : public EmberMessagePassingGenerator { { "arg.iterations", "Sets the number of iterations to perform", "1"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) -public: EmberRandomTrafficGenerator(SST::ComponentId_t, Params& params); bool generate( std::queue& evQ); diff --git a/src/sst/elements/ember/mpi/motifs/emberreduce.h b/src/sst/elements/ember/mpi/motifs/emberreduce.h index 52c4c280bc..f3b32ee121 100644 --- a/src/sst/elements/ember/mpi/motifs/emberreduce.h +++ b/src/sst/elements/ember/mpi/motifs/emberreduce.h @@ -40,31 +40,6 @@ class EmberReduceGenerator : public EmberMessagePassingGenerator { { "arg.root", "Sets the root of the reduction", "0"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - -public: EmberReduceGenerator(SST::ComponentId_t, Params& params); bool generate( std::queue& evQ); diff --git a/src/sst/elements/ember/mpi/motifs/emberring.h b/src/sst/elements/ember/mpi/motifs/emberring.h index a548a7365e..26b14cb2ec 100644 --- a/src/sst/elements/ember/mpi/motifs/emberring.h +++ b/src/sst/elements/ember/mpi/motifs/emberring.h @@ -39,32 +39,6 @@ class EmberRingGenerator : public EmberMessagePassingGenerator { { "arg.iterations", "Sets the number of ping pong operations to perform", "1"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - - -public: EmberRingGenerator(SST::ComponentId_t id, Params& params); bool generate( std::queue& evQ); diff --git a/src/sst/elements/ember/mpi/motifs/emberscatter.h b/src/sst/elements/ember/mpi/motifs/emberscatter.h index ab00d166d2..6cfbc9006b 100644 --- a/src/sst/elements/ember/mpi/motifs/emberscatter.h +++ b/src/sst/elements/ember/mpi/motifs/emberscatter.h @@ -41,31 +41,6 @@ class EmberScatterGenerator : public EmberMessagePassingGenerator { { "arg.root", "Sets the root of the reduction", "0"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - -public: EmberScatterGenerator(SST::ComponentId_t, Params& params); bool generate( std::queue& evQ); diff --git a/src/sst/elements/ember/mpi/motifs/emberscatterv.h b/src/sst/elements/ember/mpi/motifs/emberscatterv.h index 03aa18f2b4..5b20e9797c 100644 --- a/src/sst/elements/ember/mpi/motifs/emberscatterv.h +++ b/src/sst/elements/ember/mpi/motifs/emberscatterv.h @@ -41,31 +41,6 @@ class EmberScattervGenerator : public EmberMessagePassingGenerator { { "arg.root", "Sets the root of the reduction", "0"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - -public: EmberScattervGenerator(SST::ComponentId_t, Params& params); bool generate( std::queue& evQ); diff --git a/src/sst/elements/ember/mpi/motifs/embersendrecv.h b/src/sst/elements/ember/mpi/motifs/embersendrecv.h index 5a5f72fd21..54639ee98d 100644 --- a/src/sst/elements/ember/mpi/motifs/embersendrecv.h +++ b/src/sst/elements/ember/mpi/motifs/embersendrecv.h @@ -36,32 +36,7 @@ class EmberSendrecvGenerator : public EmberMessagePassingGenerator { "Performs a Sendrecv Motif", SST::Ember::EmberGenerator ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Sendrecv", "Time spent in Sendrecv event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) -public: EmberSendrecvGenerator(SST::ComponentId_t id, Params& params): EmberMessagePassingGenerator(id, params, "Null" ), m_phase(Init) { diff --git a/src/sst/elements/ember/mpi/motifs/embersiriustrace.h b/src/sst/elements/ember/mpi/motifs/embersiriustrace.h index 874d4fa209..98bf16582a 100644 --- a/src/sst/elements/ember/mpi/motifs/embersiriustrace.h +++ b/src/sst/elements/ember/mpi/motifs/embersiriustrace.h @@ -41,31 +41,6 @@ class EmberSIRIUSTraceGenerator : public EmberMessagePassingGenerator { { "arg.traceprefix", "Sets the trace prefix for loading SIRIUS files", "" }, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - -public: EmberSIRIUSTraceGenerator(SST::ComponentId_t, Params& params); ~EmberSIRIUSTraceGenerator(); bool generate( std::queue& evQ ); diff --git a/src/sst/elements/ember/mpi/motifs/emberstop.h b/src/sst/elements/ember/mpi/motifs/emberstop.h index 8464a211dd..e933f1f739 100644 --- a/src/sst/elements/ember/mpi/motifs/emberstop.h +++ b/src/sst/elements/ember/mpi/motifs/emberstop.h @@ -40,32 +40,6 @@ class EmberStopGenerator : public EmberMessagePassingGenerator { { "arg.compute", "Sets the time spent computing", "1"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - - -public: EmberStopGenerator(SST::ComponentId_t, Params& params); bool generate( std::queue& evQ ); diff --git a/src/sst/elements/ember/mpi/motifs/embersweep2d.cc b/src/sst/elements/ember/mpi/motifs/embersweep2d.cc index b835268b1b..885a721eed 100644 --- a/src/sst/elements/ember/mpi/motifs/embersweep2d.cc +++ b/src/sst/elements/ember/mpi/motifs/embersweep2d.cc @@ -40,18 +40,20 @@ EmberSweep2DGenerator::EmberSweep2DGenerator(SST::ComponentId_t id, Params& para void EmberSweep2DGenerator::configure() { - if(0 == rank()) { - verbose(CALL_INFO, 1, 0, " 2D Sweep Motif\n"); - verbose(CALL_INFO, 1, 0, " nx = %" PRIu32 ", ny = %" - PRIu32 ", y_block=%" PRIu32 ", (ny/yblock)=%" PRIu32 "\n", - nx, ny, y_block, (ny/y_block)); - } + EmberMessagePassingGenerator::configure(); + + if ( 0 == rank() ) { + verbose( CALL_INFO, 1, 0, " 2D Sweep Motif\n" ); + verbose( CALL_INFO, 1, 0, " nx = %" PRIu32 ", ny = %" + PRIu32 ", y_block=%" PRIu32 ", (ny/yblock)=%" PRIu32 "\n", + nx, ny, y_block, (ny/y_block)); + } - x_up = (rank() < (size() - 1)) ? rank() + 1 : -1; - x_down = (rank() > 0) ? rank() - 1 : -1; + x_up = (rank() < (size() - 1)) ? rank() + 1 : -1; + x_down = (rank() > 0) ? rank() - 1 : -1; - verbose(CALL_INFO, 1, 0, "Rank: %" PRId32 ", X+:%" PRId32 - ",X-:%" PRId32 "\n", rank(), x_up, x_down); + verbose( CALL_INFO, 1, 0, "Rank: %" PRId32 ", X+:%" PRId32 + ",X-:%" PRId32 "\n", rank(), x_up, x_down ); } bool EmberSweep2DGenerator::generate( std::queue& evQ ) diff --git a/src/sst/elements/ember/mpi/motifs/embersweep2d.h b/src/sst/elements/ember/mpi/motifs/embersweep2d.h index 932c5eddad..e4e8bec00b 100644 --- a/src/sst/elements/ember/mpi/motifs/embersweep2d.h +++ b/src/sst/elements/ember/mpi/motifs/embersweep2d.h @@ -41,31 +41,6 @@ class EmberSweep2DGenerator : public EmberMessagePassingGenerator { { "arg.y_block", "Sets the Y-blocking factor (must be Ny % y_block == 0, default is 1 (no blocking))", "1"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - -public: EmberSweep2DGenerator( SST::ComponentId_t, Params& params ); void configure() override; bool generate( std::queue& evQ ) override; diff --git a/src/sst/elements/ember/mpi/motifs/embersweep3d.cc b/src/sst/elements/ember/mpi/motifs/embersweep3d.cc index 3327980a94..7a90fb178d 100644 --- a/src/sst/elements/ember/mpi/motifs/embersweep3d.cc +++ b/src/sst/elements/ember/mpi/motifs/embersweep3d.cc @@ -60,6 +60,8 @@ EmberSweep3DGenerator::EmberSweep3DGenerator(SST::ComponentId_t id, Params& para void EmberSweep3DGenerator::configure() { + EmberMessagePassingGenerator::configure(); + // Check that we are using all the processors or else lock up will happen :(. if( (px * py) != (signed) size() ) { fatal(CALL_INFO, -1, "Error: Sweep 3D motif checked " diff --git a/src/sst/elements/ember/mpi/motifs/embersweep3d.h b/src/sst/elements/ember/mpi/motifs/embersweep3d.h index aa11d5013b..a3103568d0 100644 --- a/src/sst/elements/ember/mpi/motifs/embersweep3d.h +++ b/src/sst/elements/ember/mpi/motifs/embersweep3d.h @@ -49,32 +49,6 @@ class EmberSweep3DGenerator : public EmberMessagePassingGenerator { { "arg.computetime", "Sets the compute time per nx * ny block in picoseconds", "1000"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - - -public: EmberSweep3DGenerator( SST::ComponentId_t id, Params& params ); void configure() override; bool generate( std::queue& evQ ) override; diff --git a/src/sst/elements/ember/mpi/motifs/embertest.h b/src/sst/elements/ember/mpi/motifs/embertest.h index de9c501d83..dfb4584f46 100644 --- a/src/sst/elements/ember/mpi/motifs/embertest.h +++ b/src/sst/elements/ember/mpi/motifs/embertest.h @@ -34,32 +34,6 @@ class EmberTestGenerator : public EmberMessagePassingGenerator { "Performs a Test Motif", SST::Ember::EmberGenerator ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Test", "Time spent in Test event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - -public: EmberTestGenerator(SST::ComponentId_t id, Params& params): EmberMessagePassingGenerator(id, params, "Null" ), m_phase(Init) diff --git a/src/sst/elements/ember/mpi/motifs/embertestany.h b/src/sst/elements/ember/mpi/motifs/embertestany.h index 813ef6fac9..036a15a56f 100644 --- a/src/sst/elements/ember/mpi/motifs/embertestany.h +++ b/src/sst/elements/ember/mpi/motifs/embertestany.h @@ -34,33 +34,7 @@ class EmberTestanyGenerator : public EmberMessagePassingGenerator { "Performs a Testany Motif", SST::Ember::EmberGenerator ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Test", "Time spent in Test event", "ns", 0}, - { "time-Testany", "Time spent in Testany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) -public: EmberTestanyGenerator(SST::ComponentId_t id, Params& params): EmberMessagePassingGenerator(id, params, "Null" ), m_phase(Init) { diff --git a/src/sst/elements/ember/mpi/motifs/emberunstructured.cc b/src/sst/elements/ember/mpi/motifs/emberunstructured.cc index 65eb2b6443..67fd12c3c9 100644 --- a/src/sst/elements/ember/mpi/motifs/emberunstructured.cc +++ b/src/sst/elements/ember/mpi/motifs/emberunstructured.cc @@ -35,25 +35,27 @@ EmberUnstructuredGenerator::EmberUnstructuredGenerator(SST::ComponentId_t id, Pa void EmberUnstructuredGenerator::configure() { - //Check the type of the rankmapper: CustomMap or LinearMap - bool use_CustomRankMap; - EmberCustomRankMap* cm = dynamic_cast(getRankMap()); - if(cm == NULL) - use_CustomRankMap = false; - else - use_CustomRankMap = true; + EmberMessagePassingGenerator::configure(); + + // Check the type of the rankmapper: CustomMap or LinearMap + bool use_CustomRankMap; + EmberCustomRankMap* cm = dynamic_cast(getRankMap()); + if(cm == NULL) + use_CustomRankMap = false; + else + use_CustomRankMap = true; if(0 == rank()) { - output("Unstructured motif problem size: %" PRIu32 "\n", p_size); - output("Unstructured motif compute time: %" PRIu32 " ns\n", nsCompute); - output("Unstructured motif iterations: %" PRIu32 "\n", iterations); - output("Unstructured motif iterms/cell: %" PRIu32 "\n", items_per_cell); - output("Unstructured motif communication graph file: %s \n", graphFile.c_str()); - if(use_CustomRankMap) - output("Unstructured motif rankmap: CustomRankMap\n"); - else - output("Unstructured motif rankmap: LinearRankMap\n"); - } + output("Unstructured motif problem size: %" PRIu32 "\n", p_size); + output("Unstructured motif compute time: %" PRIu32 " ns\n", nsCompute); + output("Unstructured motif iterations: %" PRIu32 "\n", iterations); + output("Unstructured motif iterms/cell: %" PRIu32 "\n", items_per_cell); + output("Unstructured motif communication graph file: %s \n", graphFile.c_str()); + if(use_CustomRankMap) + output("Unstructured motif rankmap: CustomRankMap\n"); + else + output("Unstructured motif rankmap: LinearRankMap\n"); + } //Read raw communication from the graph file rawCommMap = readCommFile(graphFile, size()); diff --git a/src/sst/elements/ember/mpi/motifs/emberunstructured.h b/src/sst/elements/ember/mpi/motifs/emberunstructured.h index 508863b980..f908d12acd 100644 --- a/src/sst/elements/ember/mpi/motifs/emberunstructured.h +++ b/src/sst/elements/ember/mpi/motifs/emberunstructured.h @@ -40,32 +40,6 @@ class EmberUnstructuredGenerator : public EmberMessagePassingGenerator { { "arg.computetime", "Sets the number of nanoseconds to compute for", "0"}, ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) - - -public: EmberUnstructuredGenerator( SST::ComponentId_t, Params& params ); ~EmberUnstructuredGenerator() {} void configure() override; diff --git a/src/sst/elements/ember/mpi/motifs/emberwaitany.h b/src/sst/elements/ember/mpi/motifs/emberwaitany.h index bd1f41c611..51f5fa3935 100644 --- a/src/sst/elements/ember/mpi/motifs/emberwaitany.h +++ b/src/sst/elements/ember/mpi/motifs/emberwaitany.h @@ -34,36 +34,13 @@ class EmberWaitanyGenerator : public EmberMessagePassingGenerator { "Performs a Waitany Motif", SST::Ember::EmberGenerator ) - SST_ELI_DOCUMENT_STATISTICS( - { "time-Init", "Time spent in Init event", "ns", 0}, - { "time-Finalize", "Time spent in Finalize event", "ns", 0}, - { "time-Rank", "Time spent in Rank event", "ns", 0}, - { "time-Size", "Time spent in Size event", "ns", 0}, - { "time-Send", "Time spent in Recv event", "ns", 0}, - { "time-Recv", "Time spent in Recv event", "ns", 0}, - { "time-Irecv", "Time spent in Irecv event", "ns", 0}, - { "time-Isend", "Time spent in Isend event", "ns", 0}, - { "time-Wait", "Time spent in Wait event", "ns", 0}, - { "time-Waitall", "Time spent in Waitall event", "ns", 0}, - { "time-Waitany", "Time spent in Waitany event", "ns", 0}, - { "time-Compute", "Time spent in Compute event", "ns", 0}, - { "time-Barrier", "Time spent in Barrier event", "ns", 0}, - { "time-Alltoallv", "Time spent in Alltoallv event", "ns", 0}, - { "time-Alltoall", "Time spent in Alltoall event", "ns", 0}, - { "time-Allreduce", "Time spent in Allreduce event", "ns", 0}, - { "time-Reduce", "Time spent in Reduce event", "ns", 0}, - { "time-Bcast", "Time spent in Bcast event", "ns", 0}, - { "time-Gettime", "Time spent in Gettime event", "ns", 0}, - { "time-Commsplit", "Time spent in Commsplit event", "ns", 0}, - { "time-Commcreate", "Time spent in Commcreate event", "ns", 0}, - ) -public: EmberWaitanyGenerator(SST::ComponentId_t id , Params& params): EmberMessagePassingGenerator(id, params, "Null" ), m_phase(Init) { m_rng = new SST::RNG::XORShiftRNG(); } + bool generate( std::queue& evQ){ switch ( m_phase ) { case Init: diff --git a/src/sst/elements/ember/pyember.py b/src/sst/elements/ember/pyember.py index e24df7ce3c..2a94eaacc6 100644 --- a/src/sst/elements/ember/pyember.py +++ b/src/sst/elements/ember/pyember.py @@ -33,6 +33,7 @@ def __init__(self, job_id, num_nodes, apis, numCores = 1, nicsPerNode = 1): # Not sure what to do with this yet #x = self._createPrefixedParams("ember") self._declareParamsWithUserPrefix("ember","ember",["verbose"]) + self._declareParamsWithUserPrefix("ember","ember",["verboseMask"]) #x._subscribeToPlatformParamSet("ember") # Not clear what to do with this yet. Don't think we need it @@ -191,6 +192,8 @@ def __init__(self, job_id, num_nodes, numCores = 1, nicsPerNode = 1): EmberJob.__init__(self,job_id,num_nodes,apis,numCores,nicsPerNode) + self._declareParamsWithUserPrefix("ember","ember",["enableMpiStatsPerMotif"]) + self.nic = BasicNicConfiguration() self._lockVariable("nic") From a1c6ce9e2ca607ea5fed5727ea67c5881f76296d Mon Sep 17 00:00:00 2001 From: Izajasz P Wrosz Date: Mon, 17 Feb 2025 10:29:41 +0000 Subject: [PATCH 3/4] Ember: include motif index in SubStatisticId for MPI stats --- src/sst/elements/ember/mpi/embermpigen.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sst/elements/ember/mpi/embermpigen.cc b/src/sst/elements/ember/mpi/embermpigen.cc index 3e4e217a3c..fed2e0cc92 100644 --- a/src/sst/elements/ember/mpi/embermpigen.cc +++ b/src/sst/elements/ember/mpi/embermpigen.cc @@ -50,7 +50,7 @@ EmberMessagePassingGenerator::EmberMessagePassingGenerator( std::string statName = namePrefix + std::string( MPIEventNames[i] ); std::string subId(""); if ( perMotifStats ) { - subId = name + "Motif"; + subId = name + "Motif_" + std::to_string(getMotifNum()); } EventTimeStat* stat = registerStatistic( statName, subId ); m_mpiTimeStats.push_back( stat ); From 0476511d1dbd6b247fa3fa260a13bdb1d2c21785 Mon Sep 17 00:00:00 2001 From: Izajasz P Wrosz Date: Mon, 17 Feb 2025 11:35:12 +0000 Subject: [PATCH 4/4] Ember: mark memSet(Not)Backed virtual functions as override in derived class --- src/sst/elements/ember/mpi/embermpigen.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sst/elements/ember/mpi/embermpigen.h b/src/sst/elements/ember/mpi/embermpigen.h index c00319be1a..6a5ca8ce02 100644 --- a/src/sst/elements/ember/mpi/embermpigen.h +++ b/src/sst/elements/ember/mpi/embermpigen.h @@ -157,12 +157,12 @@ class EmberMessagePassingGenerator : public EmberGenerator { EmberRankMap* getRankMap() { return m_rankMap; } - void memSetBacked() { + void memSetBacked() override { EmberGenerator::memSetBacked(); mpi().setBacked(); } - void memSetNotBacked() { + void memSetNotBacked() override { EmberGenerator::memSetNotBacked(); mpi().setNotBacked(); }