IPPL (Independent Parallel Particle Layer)
IPPL
Loading...
Searching...
No Matches
LoggingBufferHandler.hpp
Go to the documentation of this file.
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>
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>
51 return handler_m->getUsedSize();
52 }
53
54 template <typename MemorySpace>
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
STL namespace.
Definition Archive.h:20
Interface for memory buffer handling.
typename BufferHandler< MemorySpace >::size_type size_type
LoggingBufferHandler()
Default constructor, creates an internal BufferHandler for managing buffers. This constructor also in...
buffer_type getBuffer(size_type size, double overallocation) override
Allocates or retrieves a buffer and logs the action.
std::shared_ptr< BufferHandler< MemorySpace > > handler_m
Internal handler for buffer management.
void freeAllBuffers() override
Frees all buffers and logs the action.
void logMethod(const std::string &methodName, const std::map< std::string, std::string > &parameters)
Records a method call in the log with its parameters.
size_type getUsedSize() const override
Retrieves the total size of allocated buffers.
typename BufferHandler< MemorySpace >::buffer_type buffer_type
const std::vector< LogEntry > & getLogs() const
Retrieves the list of log entries.
size_type getFreeSize() const override
Retrieves the total size of free buffers.
void deleteAllBuffers() override
Deletes all buffers and logs the action.
int rank_m
MPI rank for identifying log sources.
void freeBuffer(buffer_type buffer) override
Frees a buffer and logs the action.
std::vector< LogEntry > logEntries_m
Log entries for buffer operations.