IPPL API Reference
Independent Parallel Particle Layer C++ API
Loading...
Searching...
No Matches
LoggingBufferHandler.hpp
1#ifndef IPPL_LOGGING_BUFFER_HANDLER_HPP
2#define IPPL_LOGGING_BUFFER_HANDLER_HPP
3
4#include <iostream>
5#include <mpi.h>
6
7namespace ippl {
8
9 template <typename MemorySpace>
11 std::shared_ptr<BufferHandler<MemorySpace>> handler, int rank)
12 : handler_m(std::move(handler))
13 , rank_m(rank) {}
14
15 template <typename MemorySpace>
17 handler_m = std::make_shared<DefaultBufferHandler<MemorySpace>>();
18 MPI_Comm_rank(MPI_COMM_WORLD, &rank_m);
19 }
20
21 template <typename MemorySpace>
22 typename LoggingBufferHandler<MemorySpace>::buffer_type
23 LoggingBufferHandler<MemorySpace>::getBuffer(size_type size, double overallocation) {
24 auto buffer = handler_m->getBuffer(size, overallocation);
25 logMethod("getBuffer", {{"size", std::to_string(size)},
26 {"overallocation", std::to_string(overallocation)}});
27 return buffer;
28 }
29
30 template <typename MemorySpace>
32 handler_m->freeBuffer(buffer);
33 logMethod("freeBuffer", {});
34 }
35
36 template <typename MemorySpace>
38 handler_m->freeAllBuffers();
39 logMethod("freeAllBuffers", {});
40 }
41
42 template <typename MemorySpace>
44 handler_m->deleteAllBuffers();
45 logMethod("deleteAllBuffers", {});
46 }
47
48 template <typename MemorySpace>
49 typename LoggingBufferHandler<MemorySpace>::size_type
51 return handler_m->getUsedSize();
52 }
53
54 template <typename MemorySpace>
55 typename LoggingBufferHandler<MemorySpace>::size_type
57 return handler_m->getFreeSize();
58 }
59
60 template <typename MemorySpace>
61 const std::vector<LogEntry>& LoggingBufferHandler<MemorySpace>::getLogs() const {
62 return logEntries_m;
63 }
64
65 template <typename MemorySpace>
67 const std::string& methodName, const std::map<std::string, std::string>& parameters) {
68 logEntries_m.push_back({methodName, parameters, handler_m->getUsedSize(),
69 handler_m->getFreeSize(), MemorySpace::name(), rank_m,
70 std::chrono::high_resolution_clock::now()});
71 }
72
73} // namespace ippl
74
75#endif
Decorator class for buffer management that adds logging capabilities to buffer operations.
Definition LoggingBufferHandler.h:31
LoggingBufferHandler()
Default constructor, creates an internal BufferHandler for managing buffers. This constructor also in...
Definition LoggingBufferHandler.hpp:16
buffer_type getBuffer(size_type size, double overallocation) override
Allocates or retrieves a buffer and logs the action.
Definition LoggingBufferHandler.hpp:23
void freeAllBuffers() override
Frees all buffers and logs the action.
Definition LoggingBufferHandler.hpp:37
size_type getUsedSize() const override
Retrieves the total size of allocated buffers.
Definition LoggingBufferHandler.hpp:50
const std::vector< LogEntry > & getLogs() const
Retrieves the list of log entries.
Definition LoggingBufferHandler.hpp:61
size_type getFreeSize() const override
Retrieves the total size of free buffers.
Definition LoggingBufferHandler.hpp:56
void deleteAllBuffers() override
Deletes all buffers and logs the action.
Definition LoggingBufferHandler.hpp:43
void freeBuffer(buffer_type buffer) override
Frees a buffer and logs the action.
Definition LoggingBufferHandler.hpp:31
Definition Archive.h:20