|
Ginkgo
Generated from pipelines/1554403166 branch based on develop. Ginkgo version 1.9.0
A numerical linear algebra library targeting many-core architectures
|
5 #ifndef GKO_PUBLIC_CORE_LOG_PROFILER_HOOK_HPP_
6 #define GKO_PUBLIC_CORE_LOG_PROFILER_HOOK_HPP_
10 #include <unordered_map>
12 #include <ginkgo/config.hpp>
13 #include <ginkgo/core/base/timer.hpp>
14 #include <ginkgo/core/log/logger.hpp>
44 class profiling_scope_guard;
109 const LinOp* x)
const override;
112 const LinOp* x)
const override;
116 const LinOp* x)
const override;
120 const LinOp* x)
const override;
124 const LinOp* input)
const override;
128 const LinOp* output)
const override;
133 const LinOp* residual,
134 const LinOp* residual_norm,
135 const LinOp* solution,
136 const uint8& stopping_id,
137 const bool& set_finalized)
const override;
141 const LinOp* residual,
const LinOp* residual_norm,
142 const LinOp* solution,
const uint8& stopping_id,
144 const bool& one_changed,
const bool& all_stopped)
const override;
148 const LinOp* residual,
const LinOp* residual_norm,
149 const LinOp* implicit_sq_resnorm,
const LinOp* solution,
150 const uint8& stopping_id,
const bool& set_finalized,
152 const bool& all_stopped)
const override;
158 const LinOp* residual,
const LinOp* residual_norm,
159 const LinOp* implicit_sq_residual_norm,
163 "Please use the version with the additional stopping "
168 const LinOp* residual_norm)
const override;
171 "Please use the version with the additional stopping "
176 const LinOp* residual_norm,
177 const LinOp* implicit_sq_residual_norm)
const override;
246 std::shared_ptr<const Executor> exec);
284 virtual void write(
const std::vector<summary_entry>& entries,
285 std::chrono::nanoseconds overhead) = 0;
300 std::chrono::nanoseconds overhead) = 0;
318 std::string header =
"Runtime summary");
320 void write(
const std::vector<summary_entry>& entries,
321 std::chrono::nanoseconds overhead)
override;
324 std::chrono::nanoseconds overhead)
override;
327 std::ostream* output_;
348 std::shared_ptr<Timer> timer = std::make_shared<CpuTimer>(),
349 std::unique_ptr<SummaryWriter> writer =
350 std::make_unique<TableSummaryWriter>(),
351 bool debug_check_nesting =
false);
371 std::shared_ptr<Timer> timer = std::make_shared<CpuTimer>(),
372 std::unique_ptr<NestedSummaryWriter> writer =
373 std::make_unique<TableSummaryWriter>(),
374 bool debug_check_nesting =
false);
380 static std::shared_ptr<ProfilerHook>
create_custom(hook_function begin,
386 void maybe_synchronize(
const Executor* exec)
const;
390 std::unordered_map<const PolymorphicObject*, std::string> name_map_;
392 hook_function begin_hook_;
393 hook_function end_hook_;
414 ProfilerHook::hook_function begin,
415 ProfilerHook::hook_function end);
432 ProfilerHook::hook_function end_;
440 #endif // GKO_PUBLIC_CORE_LOG_PROFILER_HOOK_HPP_
void on_allocation_started(const gko::Executor *exec, const gko::size_type &) const override
Executor's allocation started event.
static std::shared_ptr< ProfilerHook > create_vtune()
Creates a logger annotating Ginkgo events with VTune ITT ranges.
std::uint8_t uint8
8-bit unsigned integral type.
Definition: types.hpp:115
void set_object_name(ptr_param< const PolymorphicObject > obj, std::string name)
Sets the name for an object to be profiled.
static std::shared_ptr< ProfilerHook > create_tau(bool initialize=true)
Creates a logger annotating Ginkgo events with TAU ranges via PerfStubs.
void on_criterion_check_started(const stop::Criterion *criterion, const size_type &num_iterations, const LinOp *residual, const LinOp *residual_norm, const LinOp *solution, const uint8 &stopping_id, const bool &set_finalized) const override
stop::Criterion's check started event.
static std::shared_ptr< ProfilerHook > create_roctx()
Creates a logger annotating Ginkgo events with ROCTX ranges for HIP.
static std::shared_ptr< ProfilerHook > create_nested_summary(std::shared_ptr< Timer > timer=std::make_shared< CpuTimer >(), std::unique_ptr< NestedSummaryWriter > writer=std::make_unique< TableSummaryWriter >(), bool debug_check_nesting=false)
Creates a logger measuring the runtime of Ginkgo events in a nested fashion and printing a summary wh...
std::chrono::nanoseconds elapsed
The total runtime of all invocations of the range in nanoseconds.
Definition: profiler_hook.hpp:266
constexpr static uint32 color_yellow_argb
The Ginkgo yellow background color as packed 32 bit ARGB value.
Definition: profiler_hook.hpp:210
Definition: lin_op.hpp:117
Scope guard that annotates its scope with the provided profiler hooks.
Definition: profiler_hook.hpp:400
void on_operation_launched(const Executor *exec, const Operation *operation) const override
Executor's operation launched event (method run).
void on_linop_advanced_apply_completed(const LinOp *A, const LinOp *alpha, const LinOp *b, const LinOp *beta, const LinOp *x) const override
LinOp's advanced apply completed event.
A PolymorphicObject is the abstract base for all "heavy" objects in Ginkgo that behave polymorphicall...
Definition: polymorphic_object.hpp:43
Receives the results from ProfilerHook::create_summary().
Definition: profiler_hook.hpp:274
Stopping criterion events.
std::string name
The name of the range.
Definition: profiler_hook.hpp:250
std::uintptr_t uintptr
Unsigned integer type capable of holding a pointer to void.
Definition: types.hpp:138
void on_linop_advanced_apply_started(const LinOp *A, const LinOp *alpha, const LinOp *b, const LinOp *beta, const LinOp *x) const override
LinOp's advanced apply started event.
std::chrono::nanoseconds exclusive
The total runtime of all invocations of the range in nanoseconds, excluding the runtime of all nested...
Definition: profiler_hook.hpp:257
std::size_t size_type
Integral type used for allocation quantities.
Definition: types.hpp:86
bool needs_propagation() const override
Returns true if this logger, when attached to an Executor, needs to be forwarded all events from obje...
Receives the results from ProfilerHook::create_nested_summary().
Definition: profiler_hook.hpp:289
void on_copy_completed(const gko::Executor *from, const gko::Executor *to, const gko::uintptr &, const gko::uintptr &, const gko::size_type &) const override
Executor's copy completed event.
std::unique_ptr< Matrix > initialize(size_type stride, std::initializer_list< typename Matrix::value_type > vals, std::shared_ptr< const Executor > exec, TArgs &&... create_args)
Creates and initializes a column-vector.
Definition: dense.hpp:1548
int64 count
The total number of invocations of the range.
Definition: profiler_hook.hpp:268
Definition: profiler_hook.hpp:262
void on_iteration_complete(const LinOp *solver, const LinOp *right_hand_side, const LinOp *solution, const size_type &num_iterations, const LinOp *residual, const LinOp *residual_norm, const LinOp *implicit_sq_residual_norm, const array< stopping_status > *status, bool stopped) const override
Register the iteration_complete event which logs every completed iterations.
Definition: profiler_hook.hpp:248
void on_allocation_completed(const gko::Executor *exec, const gko::size_type &, const gko::uintptr &) const override
Executor's allocation completed event.
The Ginkgo namespace.
Definition: abstract_factory.hpp:20
void set_synchronization(bool synchronize)
Should the events call executor->synchronize on operations and copy/allocation? This leads to a certa...
An array is a container which encapsulates fixed-sized arrays, stored on the Executor tied to the arr...
Definition: array.hpp:26
profiling_scope_guard user_range(const char *name) const
Creates a scope guard for a user-defined range to be included in the profile.
PolymorphicObject events.
std::string name
The name of the range.
Definition: profiler_hook.hpp:264
void on_polymorphic_object_move_started(const Executor *exec, const PolymorphicObject *from, const PolymorphicObject *to) const override
PolymorphicObject's move started event.
std::uint32_t uint32
32-bit unsigned integral type.
Definition: types.hpp:126
This Logger can be used to annotate the execution of Ginkgo functionality with profiler-specific rang...
Definition: profiler_hook.hpp:57
void on_linop_factory_generate_started(const LinOpFactory *factory, const LinOp *input) const override
LinOp Factory's generate started event.
profile_event_category
Categorization of logger events.
Definition: profiler_hook.hpp:22
void on_linop_apply_completed(const LinOp *A, const LinOp *b, const LinOp *x) const override
LinOp's apply completed event.
static std::shared_ptr< ProfilerHook > create_summary(std::shared_ptr< Timer > timer=std::make_shared< CpuTimer >(), std::unique_ptr< SummaryWriter > writer=std::make_unique< TableSummaryWriter >(), bool debug_check_nesting=false)
Creates a logger measuring the runtime of Ginkgo events and printing a summary when it is destroyed.
This class is used for function parameters in the place of raw pointers.
Definition: utils_helper.hpp:41
TableSummaryWriter(std::ostream &output=std::cerr, std::string header="Runtime summary")
Constructs a writer on an output stream.
Definition: logger.hpp:75
void on_operation_completed(const Executor *exec, const Operation *operation) const override
Executor's operation completed event (method run).
void on_free_started(const gko::Executor *exec, const gko::uintptr &) const override
Executor's free started event.
The Criterion class is a base class for all stopping criteria.
Definition: criterion.hpp:36
static std::shared_ptr< ProfilerHook > create_nvtx(uint32 color_argb=color_yellow_argb)
Creates a logger annotating Ginkgo events with NVTX ranges for CUDA.
static std::shared_ptr< ProfilerHook > create_for_executor(std::shared_ptr< const Executor > exec)
Creates a logger annotating Ginkgo events with the most suitable backend for the given executor: NVTX...
void on_linop_factory_generate_completed(const LinOpFactory *factory, const LinOp *input, const LinOp *output) const override
LinOp Factory's generate completed event.
void on_free_completed(const gko::Executor *exec, const gko::uintptr &) const override
Executor's free completed event.
void on_copy_started(const gko::Executor *from, const gko::Executor *to, const gko::uintptr &, const gko::uintptr &, const gko::size_type &) const override
Executor's copy started event.
void on_criterion_check_completed(const stop::Criterion *criterion, const size_type &num_iterations, const LinOp *residual, const LinOp *residual_norm, const LinOp *solution, const uint8 &stopping_id, const bool &set_finalized, const array< stopping_status > *status, const bool &one_changed, const bool &all_stopped) const override
stop::Criterion's check completed event.
Writes the results from ProfilerHook::create_summary() and ProfilerHook::create_nested_summary() to a...
Definition: profiler_hook.hpp:308
static std::shared_ptr< ProfilerHook > create_custom(hook_function begin, hook_function end)
Creates a logger annotating Ginkgo events with a custom set of functions for range begin and end.
std::int64_t int64
64-bit signed integral type.
Definition: types.hpp:109
std::chrono::nanoseconds inclusive
The total runtime of all invocations of the range in nanoseconds.
Definition: profiler_hook.hpp:252
Kernel execution and data movement.
void write(const std::vector< summary_entry > &entries, std::chrono::nanoseconds overhead) override
Callback to write out the summary results.
virtual void write_nested(const nested_summary_entry &root, std::chrono::nanoseconds overhead)=0
Callback to write out the summary results.
The first step in using the Ginkgo library consists of creating an executor.
Definition: executor.hpp:615
void write_nested(const nested_summary_entry &root, std::chrono::nanoseconds overhead) override
Callback to write out the summary results.
~profiling_scope_guard()
Calls the range end function if the scope guard was not moved from.
virtual void write(const std::vector< summary_entry > &entries, std::chrono::nanoseconds overhead)=0
Callback to write out the summary results.
A LinOpFactory represents a higher order mapping which transforms one linear operator into another.
Definition: lin_op.hpp:384
profiling_scope_guard()
Creates an empty (moved-from) scope guard.
void on_linop_apply_started(const LinOp *A, const LinOp *b, const LinOp *x) const override
LinOp's apply started event.
std::vector< nested_summary_entry > children
The nested ranges inside this range.
Definition: profiler_hook.hpp:270
void on_polymorphic_object_copy_started(const Executor *exec, const PolymorphicObject *from, const PolymorphicObject *to) const override
PolymorphicObject's copy started event.
void on_polymorphic_object_move_completed(const Executor *exec, const PolymorphicObject *from, const PolymorphicObject *to) const override
PolymorphicObject's move completed event.
int64 count
The total number of invocations of the range.
Definition: profiler_hook.hpp:259
void on_polymorphic_object_copy_completed(const Executor *exec, const PolymorphicObject *from, const PolymorphicObject *to) const override
PolymorphicObject's copy completed event.
Operations can be used to define functionalities whose implementations differ among devices.
Definition: executor.hpp:258