5#ifndef GKO_PUBLIC_CORE_LOG_PAPI_HPP_
6#define GKO_PUBLIC_CORE_LOG_PAPI_HPP_
9#include <ginkgo/config.hpp>
22#include <ginkgo/core/base/polymorphic_object.hpp>
23#include <ginkgo/core/log/logger.hpp>
31static std::mutex papi_count_mutex;
58template <
typename ValueType = default_precision>
63 const size_type& num_bytes)
const override;
67 const uintptr& location)
const override;
70 const uintptr& location)
const override;
73 const uintptr& location)
const override;
78 const size_type& num_bytes)
const override;
83 const size_type& num_bytes)
const override;
121 const LinOp* x)
const override;
124 const LinOp* x)
const override;
128 const LinOp* x)
const override;
132 const LinOp* x)
const override;
136 const LinOp* input)
const override;
140 const LinOp* output)
const override;
144 const LinOp* residual,
const LinOp* residual_norm,
145 const LinOp* solution,
const uint8& stopping_id,
152 const LinOp* residual,
153 const LinOp* residual_norm,
159 "Please use the version with the additional stopping "
219 GKO_DEPRECATED(
"use single-parameter constructor")
230 std::ostringstream
os;
232 std::lock_guard<std::mutex>
guard(papi_count_mutex);
233 os <<
"ginkgo" << papi_logger_count;
240 template <
typename Po
interType>
244 : handle{handle}, counter_name{counter_name}
249 for (
auto e : data) {
250 std::ostringstream
oss;
251 oss << counter_name <<
"::" <<
e.first;
259 const auto tmp =
reinterpret_cast<uintptr>(ptr);
260 if (data.find(tmp) == data.end()) {
263 auto& value = data[tmp];
265 std::ostringstream
oss;
266 oss << counter_name <<
"::" << tmp;
276 const char* counter_name;
277 std::map<std::uintptr_t, size_type> data;
282 "allocation_started"};
284 "allocation_completed"};
288 "copy_started_from"};
292 "copy_completed_from"};
294 "copy_completed_to"};
297 "operation_launched"};
299 "operation_completed"};
302 &papi_handle,
"polymorphic_object_create_started"};
304 &papi_handle,
"polymorphic_object_create_completed"};
306 &papi_handle,
"polymorphic_object_copy_started"};
308 &papi_handle,
"polymorphic_object_copy_completed"};
310 &papi_handle,
"polymorphic_object_move_started"};
312 &papi_handle,
"polymorphic_object_move_completed"};
314 &papi_handle,
"polymorphic_object_deleted"};
317 &papi_handle,
"linop_factory_generate_started"};
319 &papi_handle,
"linop_factory_generate_completed"};
322 "linop_apply_started"};
324 "linop_apply_completed"};
326 &papi_handle,
"linop_advanced_apply_started"};
328 &papi_handle,
"linop_advanced_apply_completed"};
330 mutable std::map<std::uintptr_t, void*> criterion_check_completed;
333 "iteration_complete"};
336 std::string name{
"ginkgo"};
The first step in using the Ginkgo library consists of creating an executor.
Definition executor.hpp:616
A LinOpFactory represents a higher order mapping which transforms one linear operator into another.
Definition lin_op.hpp:386
Definition lin_op.hpp:118
Operations can be used to define functionalities whose implementations differ among devices.
Definition executor.hpp:259
A PolymorphicObject is the abstract base for all "heavy" objects in Ginkgo that behave polymorphicall...
Definition polymorphic_object.hpp:44
An array is a container which encapsulates fixed-sized arrays, stored on the Executor tied to the arr...
Definition array.hpp:167
static constexpr mask_type all_events_mask
Bitset Mask which activates all events.
Definition logger.hpp:89
Papi is a Logger which logs every event to the PAPI software.
Definition papi.hpp:59
void on_polymorphic_object_copy_completed(const Executor *exec, const PolymorphicObject *from, const PolymorphicObject *to) const override
PolymorphicObject's copy completed event.
void on_linop_factory_generate_started(const LinOpFactory *factory, const LinOp *input) const override
LinOp Factory's generate started event.
static std::shared_ptr< Papi > create(std::shared_ptr< const gko::Executor >, const Logger::mask_type &enabled_events=Logger::all_events_mask)
Creates a Papi Logger.
Definition papi.hpp:181
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.
void on_iteration_complete(const LinOp *solver, const LinOp *b, const LinOp *x, const size_type &num_iterations, const LinOp *residual, const LinOp *residual_norm, const LinOp *implicit_resnorm_sq, const array< stopping_status > *status, bool stopped) const override
Register the iteration_complete event which logs every completed iterations.
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.
const papi_handle_t get_handle() const
Returns the corresponding papi_handle_t for this logger.
Definition papi.hpp:216
void on_allocation_started(const Executor *exec, const size_type &num_bytes) const override
Executor's allocation started event.
static std::shared_ptr< Papi > create(const Logger::mask_type &enabled_events=Logger::all_events_mask)
Creates a Papi Logger.
Definition papi.hpp:193
void on_allocation_completed(const Executor *exec, const size_type &num_bytes, const uintptr &location) const override
Executor's allocation completed event.
void on_polymorphic_object_move_started(const Executor *exec, const PolymorphicObject *from, const PolymorphicObject *to) const override
PolymorphicObject's move started event.
void on_polymorphic_object_create_completed(const Executor *exec, const PolymorphicObject *input, const PolymorphicObject *output) const override
PolymorphicObject's create completed event.
void on_polymorphic_object_create_started(const Executor *, const PolymorphicObject *po) const override
PolymorphicObject's create started event.
void on_copy_started(const Executor *from, const Executor *to, const uintptr &location_from, const uintptr &location_to, const size_type &num_bytes) const override
Executor's copy started event.
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 Executor *exec, const uintptr &location) const override
Executor's free completed event.
void on_operation_completed(const Executor *exec, const Operation *operation) const override
Executor's operation completed event (method run).
void on_polymorphic_object_deleted(const Executor *exec, const PolymorphicObject *po) const override
PolymorphicObject's deleted event.
void on_copy_completed(const Executor *from, const Executor *to, const uintptr &location_from, const uintptr &location_to, const size_type &num_bytes) const override
Executor's copy completed event.
const std::string get_handle_name() const
Returns the unique name of this logger, which can be used in the PAPI_read() call.
Definition papi.hpp:209
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_converged) const override
stop::Criterion's check completed event.
void on_linop_apply_started(const LinOp *A, const LinOp *b, const LinOp *x) const override
LinOp's apply started event.
void on_free_started(const Executor *exec, const uintptr &location) const override
Executor's free started event.
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.
void on_operation_launched(const Executor *exec, const Operation *operation) const override
Executor's operation launched event (method run).
void on_linop_apply_completed(const LinOp *A, const LinOp *b, const LinOp *x) const override
LinOp's apply completed event.
The Criterion class is a base class for all stopping criteria.
Definition criterion.hpp:36
@ criterion
Stopping criterion events.
@ factory
LinOpFactory events.
@ operation
Kernel execution and data movement.
The Ginkgo namespace.
Definition abstract_factory.hpp:20
constexpr T one()
Returns the multiplicative identity for T.
Definition math.hpp:775
std::uint8_t uint8
8-bit unsigned integral type.
Definition types.hpp:121
std::uintptr_t uintptr
Unsigned integer type capable of holding a pointer to void.
Definition types.hpp:144
std::size_t size_type
Integral type used for allocation quantities.
Definition types.hpp:92
This structure is used to represent versions of various Ginkgo modules.
Definition version.hpp:26