nndeploy C++ API  0.2.0
nndeploy C++ API
mem_tracker.h
Go to the documentation of this file.
1 #ifndef _NNDEPLOY_BASE_CUDA_MEMORY_TRACKER_H_
2 #define _NNDEPLOY_BASE_CUDA_MEMORY_TRACKER_H_
3 
4 #ifdef ENABLE_NNDEPLOY_GPU_MEM_TRACKER
5 #include <cuda_runtime.h>
6 
7 #include <atomic>
8 #include <chrono>
9 #include <cstddef>
10 #include <iostream>
11 #include <thread>
12 
13 #include "nndeploy/base/common.h"
15 #include "nndeploy/base/macro.h"
16 #include "nndeploy/base/object.h"
17 
18 namespace nndeploy {
19 namespace base {
20 
21 class GpuMemoryTracker {
22  public:
23  GpuMemoryTracker(unsigned int interval_ms = 10)
24  : keep_running_(false), max_used_(0), interval_ms_(interval_ms) {}
25 
26  void start();
27 
28  void stop();
29 
30  size_t get_max_used_bytes() const { return max_used_; }
31 
32  double get_max_used_megabytes() const {
33  return max_used_ / (1024.0 * 1024.0);
34  }
35 
36  void print_max_used_mem() const {
37  std::cout << "Max GPU memory used: " << get_max_used_megabytes() << " MB"
38  << std::endl;
39  }
40 
41  ~GpuMemoryTracker() { stop(); }
42 
43  private:
44  std::atomic<bool> keep_running_;
45  std::thread monitor_thread_;
46  size_t max_used_;
47  unsigned int interval_ms_;
48 };
49 
50 extern NNDEPLOY_CC_API void memTrackerStart();
51 
52 extern NNDEPLOY_CC_API void memTrackerEnd();
53 
54 extern NNDEPLOY_CC_API void memTrackerPrint();
55 
56 } // namespace base
57 } // namespace nndeploy
58 
59 #define NNDEPLOY_MEM_TRACKER_START() nndeploy::base::memTrackerStart()
60 #define NNDEPLOY_MEM_TRACKER_END() nndeploy::base::memTrackerEnd()
61 #define NNDEPLOY_MEM_TRACKER_PRINT() nndeploy::base::memTrackerPrint()
62 
63 #else
64 
65 #define NNDEPLOY_MEM_TRACKER_START()
66 #define NNDEPLOY_MEM_TRACKER_END()
67 #define NNDEPLOY_MEM_TRACKER_PRINT()
68 
69 #endif
70 
71 #endif // _NNDEPLOY_BASE_CUDA_MEMORY_TRACKER_H_
#define NNDEPLOY_CC_API
api
Definition: macro.h:29