Skip to content

Commit

Permalink
#900 pmpi- add PMPI Component
Browse files Browse the repository at this point in the history
- Provides some API between auto-generated code and standard VT component
  registration and lifetime management.

- This should (eventually) use option flags and/or the scheduler
  runtime depth information to determine if a PMPI call should
  be logged, regardless of overall tracing status.

  This also finishes up some component registration and exposure,
  as needed to be accessed from the free functions.
  • Loading branch information
pnstickne committed Jul 21, 2020
1 parent d3ceddb commit a71b624
Show file tree
Hide file tree
Showing 7 changed files with 190 additions and 1 deletion.
7 changes: 7 additions & 0 deletions src/vt/pmpi/generate_mpi_wrappers.pl
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,13 @@ sub should_guard_call {
#define AUTOGEN
#if vt_check_enabled(mpi_access_guards)
#include "vt/pmpi/pmpi_component.h"
void vt::pmpi::PMPIComponent::registerEventHandlers() {
// TODO
}
PROLOGUE

# TODO:
Expand Down
58 changes: 58 additions & 0 deletions src/vt/pmpi/pmpi_component.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
/*
//@HEADER
// *****************************************************************************
//
// pmpi_component.cc
// DARMA Toolkit v. 1.0.0
// DARMA/vt => Virtual Transport
//
// Copyright 2019 National Technology & Engineering Solutions of Sandia, LLC
// (NTESS). Under the terms of Contract DE-NA0003525 with NTESS, the U.S.
// Government retains certain rights in this software.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// * Neither the name of the copyright holder nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// Questions? Contact [email protected]
//
// *****************************************************************************
//@HEADER
*/

#include "vt/config.h"

#if vt_check_enabled(mpi_access_guards)

#include "vt/pmpi/pmpi_component.h"

namespace vt { namespace pmpi {

// n.b. This is exepcted to be generated by the generated pmpi wrapper code.
// void PMPIComponent::registerEventHandlers() {}

}} //end namespace vt::pmpi

#endif // vt_check_enabled(pmpi_access_guards)
98 changes: 98 additions & 0 deletions src/vt/pmpi/pmpi_component.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
/*
//@HEADER
// *****************************************************************************
//
// pmpi_component.h
// DARMA Toolkit v. 1.0.0
// DARMA/vt => Virtual Transport
//
// Copyright 2019 National Technology & Engineering Solutions of Sandia, LLC
// (NTESS). Under the terms of Contract DE-NA0003525 with NTESS, the U.S.
// Government retains certain rights in this software.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// * Neither the name of the copyright holder nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// Questions? Contact [email protected]
//
// *****************************************************************************
//@HEADER
*/

#if !defined INCLUDED_PMPI_PMPI_COMPONENT
#define INCLUDED_PMPI_PMPI_COMPONENT

#include "vt/config.h"

#if vt_check_enabled(mpi_access_guards)

#include "vt/runtime/component/component_pack.h"

namespace vt { namespace pmpi {

/**
* \struct PMPIComponent.
*
* \brief Component to support PMPI operations, as relevant.
*
* This provides an external entry point to some PMPI operations and
* and infrastructure lifetimes such as registrations of events.
*/
struct PMPIComponent : runtime::component::Component<PMPIComponent> {

PMPIComponent() {
}

std::string name() override { return "PMPI"; }

void startup() override {
registerEventHandlers();
}

/**
* \internal
* \brief Return true iff a PMPI call should be logged in the current context.
*/
bool shouldLogCall() {
return true;
}

private:

// n.b. This is exepcted to be generated by the generated pmpi wrapper code.
void registerEventHandlers();

};

}} //end namespace vt::pmpi

namespace vt {
extern pmpi::PMPIComponent* thePMPI();
}

#endif // vt_check_enabled(pmpi_access_guards)

#endif /*INCLUDED_PMPI_PMPI_COMPONENT*/
13 changes: 13 additions & 0 deletions src/vt/runtime/runtime.cc
Original file line number Diff line number Diff line change
Expand Up @@ -598,6 +598,16 @@ void Runtime::initializeComponents() {
);
# endif

# if vt_check_enabled(mpi_access_guards)
p_->registerComponent<pmpi::PMPIComponent>(&thePMPI, Deps<
# if vt_check_enabled(trace_enabled)
trace::Trace, // For PMPI tracing, if tracing is enabled.
# endif
ctx::Context // Everything depends on theContext
>{}
);
#endif

p_->registerComponent<objgroup::ObjGroupManager>(
&theObjGroup, Deps<
ctx::Context, // Everything depends on theContext
Expand Down Expand Up @@ -764,6 +774,9 @@ void Runtime::initializeComponents() {
p_->add<pool::Pool>();
# if vt_check_enabled(trace_enabled)
p_->add<trace::Trace>();
# endif
# if vt_check_enabled(mpi_access_guards)
p_->add<pmpi::PMPIComponent>();
# endif
p_->add<objgroup::ObjGroupManager>();
p_->add<messaging::ActiveMessenger>();
Expand Down
5 changes: 5 additions & 0 deletions src/vt/runtime/runtime.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,11 @@
#include "vt/worker/worker_headers.h"
#include "vt/configs/arguments/args.h"

// Optional components
#if vt_check_enabled(trace_enabled)
#include "vt/trace/trace.h"
#endif
#include "vt/pmpi/pmpi_component.h"

#include <memory>
#include <functional>
Expand Down Expand Up @@ -400,6 +402,9 @@ struct Runtime {
#if vt_check_enabled(trace_enabled)
ComponentPtrType<trace::Trace> theTrace = nullptr;
#endif
#if vt_check_enabled(mpi_access_guards)
ComponentPtrType<pmpi::PMPIComponent> thePMPI = nullptr;
#endif

static bool volatile sig_user_1_;

Expand Down
5 changes: 5 additions & 0 deletions src/vt/runtime/runtime_component_fwd.h
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,11 @@ namespace trace {
struct Trace;
}
#endif
#if vt_check_enabled(mpi_access_guards)
namespace pmpi {
struct PMPIComponent;
}
#endif

} /* end namespace vt */

Expand Down
5 changes: 4 additions & 1 deletion src/vt/runtime/runtime_get.cc
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,10 @@ vrt::collection::balance::StatsRestartReader* theStatsReader() { return CUR_RT->
vrt::collection::balance::LBManager* theLBManager() { return CUR_RT->theLBManager; }

#if vt_check_enabled(trace_enabled)
trace::Trace* theTrace() { return CUR_RT->theTrace; }
trace::Trace* theTrace() { return CUR_RT->theTrace; }
#endif
#if vt_check_enabled(mpi_access_guards)
pmpi::PMPIComponent* thePMPI() { return CUR_RT->thePMPI; }
#endif

#undef CUR_RT
Expand Down

0 comments on commit a71b624

Please sign in to comment.