diff --git a/src/vt/pmpi/generate_mpi_wrappers.pl b/src/vt/pmpi/generate_mpi_wrappers.pl index f080289fe2..8d641a2788 100644 --- a/src/vt/pmpi/generate_mpi_wrappers.pl +++ b/src/vt/pmpi/generate_mpi_wrappers.pl @@ -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: diff --git a/src/vt/pmpi/pmpi_component.cc b/src/vt/pmpi/pmpi_component.cc new file mode 100644 index 0000000000..23a5c20c65 --- /dev/null +++ b/src/vt/pmpi/pmpi_component.cc @@ -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 darma@sandia.gov +// +// ***************************************************************************** +//@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) diff --git a/src/vt/pmpi/pmpi_component.h b/src/vt/pmpi/pmpi_component.h new file mode 100644 index 0000000000..f2689302a9 --- /dev/null +++ b/src/vt/pmpi/pmpi_component.h @@ -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 darma@sandia.gov +// +// ***************************************************************************** +//@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() { + } + + 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*/ diff --git a/src/vt/runtime/runtime.cc b/src/vt/runtime/runtime.cc index 65e0a93003..0eb1ea1f68 100644 --- a/src/vt/runtime/runtime.cc +++ b/src/vt/runtime/runtime.cc @@ -598,6 +598,16 @@ void Runtime::initializeComponents() { ); # endif +# if vt_check_enabled(mpi_access_guards) + p_->registerComponent(&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( &theObjGroup, Deps< ctx::Context, // Everything depends on theContext @@ -764,6 +774,9 @@ void Runtime::initializeComponents() { p_->add(); # if vt_check_enabled(trace_enabled) p_->add(); +# endif +# if vt_check_enabled(mpi_access_guards) + p_->add(); # endif p_->add(); p_->add(); diff --git a/src/vt/runtime/runtime.h b/src/vt/runtime/runtime.h index f6ee4e77a1..4aa4ec5373 100644 --- a/src/vt/runtime/runtime.h +++ b/src/vt/runtime/runtime.h @@ -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 #include @@ -400,6 +402,9 @@ struct Runtime { #if vt_check_enabled(trace_enabled) ComponentPtrType theTrace = nullptr; #endif + #if vt_check_enabled(mpi_access_guards) + ComponentPtrType thePMPI = nullptr; + #endif static bool volatile sig_user_1_; diff --git a/src/vt/runtime/runtime_component_fwd.h b/src/vt/runtime/runtime_component_fwd.h index 0ff323b7e9..d2bdb8b763 100644 --- a/src/vt/runtime/runtime_component_fwd.h +++ b/src/vt/runtime/runtime_component_fwd.h @@ -111,6 +111,11 @@ namespace trace { struct Trace; } #endif +#if vt_check_enabled(mpi_access_guards) +namespace pmpi { +struct PMPIComponent; +} +#endif } /* end namespace vt */ diff --git a/src/vt/runtime/runtime_get.cc b/src/vt/runtime/runtime_get.cc index 4c8d2fdb0f..f705e606ba 100644 --- a/src/vt/runtime/runtime_get.cc +++ b/src/vt/runtime/runtime_get.cc @@ -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