29#include "timemory/components/gotcha/backends.hpp"
40#include <unordered_map>
42#if defined(TIMEMORY_USE_NCCL)
46#if !defined(NUM_TIMEMORY_NCCLP_WRAPPERS)
47# define NUM_TIMEMORY_NCCLP_WRAPPERS 15
57template <
typename Toolset,
typename Tag>
59configure_ncclp(std::set<std::string> permit = {}, std::set<std::string> reject = {});
63template <
typename Toolset,
typename Tag>
69template <
typename Toolset,
typename Tag>
70static uint64_t deactivate_ncclp(uint64_t);
74template <
typename Toolset,
typename Tag>
97 if(get_tool_count()++ == 0)
99 get_tool_instance() = std::make_shared<ncclp_tuple_t>(
"timemory_ncclp");
100 get_tool_instance()->start();
106 auto idx = --get_tool_count();
107 if(get_tool_instance().
get())
109 get_tool_instance()->stop();
111 get_tool_instance().reset();
118 struct persistent_data
120 std::atomic<short> m_configured;
121 std::atomic<int64_t> m_count;
125 static persistent_data& get_persistent_data()
127 static persistent_data _instance;
131 static std::atomic<short>& get_configured()
133 return get_persistent_data().m_configured;
136 static toolset_ptr_t& get_tool_instance() {
return get_persistent_data().m_tool; }
138 static std::atomic<int64_t>& get_tool_count()
140 return get_persistent_data().m_count;
159template <
typename Toolset,
typename Tag>
161tim::component::activate_ncclp()
165 static std::shared_ptr<handle_t> _handle;
169 _handle = std::make_shared<handle_t>();
172 auto cleanup_functor = [=]() {
180 std::stringstream ss;
181 ss <<
"timemory-ncclp-" <<
typeid(
Toolset).name() <<
"-" <<
typeid(Tag).name();
194template <
typename Toolset,
typename Tag>
196tim::component::deactivate_ncclp(uint64_t
id)
200 std::stringstream ss;
201 ss <<
"timemory-ncclp-" <<
typeid(
Toolset).name() <<
"-" <<
typeid(Tag).name();
210#if !defined(TIMEMORY_USE_GOTCHA) || !defined(TIMEMORY_USE_NCCL)
212template <
typename Toolset,
typename Tag>
218template <
typename Toolset,
typename Tag>
221 std::set<std::string> reject)
228 static bool is_initialized =
false;
232 ncclp_gotcha_t::get_initializer() = []() {
249 ncclp_gotcha_t::get_reject_list() = [reject]() {
250 auto _reject = reject;
252 auto reject_list = tim::get_env<string_t>(
"TIMEMORY_NCCLP_REJECT_LIST",
"");
260 ncclp_gotcha_t::get_permit_list() = [permit]() {
261 auto _permit = permit;
263 auto permit_list = tim::get_env<string_t>(
"TIMEMORY_NCCLP_PERMIT_LIST",
"");
270 is_initialized =
true;
This is a variadic component wrapper where all components are allocated on the stack and cannot be di...
static pointer_t instance()
Get a shared pointer to the instance for the current thread.
#define TIMEMORY_C_GOTCHA(...)
The declaration for the types for manager without definitions.
void configure_ncclp(std::set< std::string > permit={}, std::set< std::string > reject={})
tim::mpl::apply< std::string > string
ContainerT delimit(const std::string &line, const std::string &delimiters="\"',;: ", PredicateT &&predicate=[](const std::string &s) -> std::string { return s;})
void configure_ncclp(std::set< std::string >, std::set< std::string >)
#define NUM_TIMEMORY_NCCLP_WRAPPERS
The gotcha component rewrites the global offset table such that calling the wrapped function actually...
static constexpr size_t ncclp_wrapper_count
std::shared_ptr< ncclp_tuple_t > toolset_ptr_t
static string_t description()