QUDA  1.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
malloc_quda.h
Go to the documentation of this file.
1 #ifndef _MALLOC_QUDA_H
2 #define _MALLOC_QUDA_H
3 
4 #include <cstdlib>
5 #include <cstdint>
6 #include <enum_quda.h>
7 
8 namespace quda {
9 
10  void printPeakMemUsage();
11  void assertAllMemFree();
12 
16  long device_allocated_peak();
17 
21  long pinned_allocated_peak();
22 
26  long mapped_allocated_peak();
27 
31  long host_allocated_peak();
32 
33  /*
34  * The following functions should not be called directly. Use the
35  * macros below instead.
36  */
37  void *device_malloc_(const char *func, const char *file, int line, size_t size);
38  void *device_pinned_malloc_(const char *func, const char *file, int line, size_t size);
39  void *safe_malloc_(const char *func, const char *file, int line, size_t size);
40  void *pinned_malloc_(const char *func, const char *file, int line, size_t size);
41  void *mapped_malloc_(const char *func, const char *file, int line, size_t size);
42  void device_free_(const char *func, const char *file, int line, void *ptr);
43  void device_pinned_free_(const char *func, const char *file, int line, void *ptr);
44  void host_free_(const char *func, const char *file, int line, void *ptr);
45 
46  // strip path from __FILE__
47  inline constexpr const char* str_end(const char *str) { return *str ? str_end(str + 1) : str; }
48  inline constexpr bool str_slant(const char *str) { return *str == '/' ? true : (*str ? str_slant(str + 1) : false); }
49  inline constexpr const char* r_slant(const char* str) { return *str == '/' ? (str + 1) : r_slant(str - 1); }
50  inline constexpr const char* file_name(const char* str) { return str_slant(str) ? r_slant(str_end(str)) : str; }
51 
52  QudaFieldLocation get_pointer_location(const void *ptr);
53 
57  inline bool is_aligned(const void *ptr, size_t alignment)
58  {
59  return (reinterpret_cast<std::uintptr_t>(ptr) & (alignment - 1)) == 0;
60  }
61 
62 } // namespace quda
63 
64 #define device_malloc(size) quda::device_malloc_(__func__, quda::file_name(__FILE__), __LINE__, size)
65 #define device_pinned_malloc(size) quda::device_pinned_malloc_(__func__, quda::file_name(__FILE__), __LINE__, size)
66 #define safe_malloc(size) quda::safe_malloc_(__func__, quda::file_name(__FILE__), __LINE__, size)
67 #define pinned_malloc(size) quda::pinned_malloc_(__func__, quda::file_name(__FILE__), __LINE__, size)
68 #define mapped_malloc(size) quda::mapped_malloc_(__func__, quda::file_name(__FILE__), __LINE__, size)
69 #define device_free(ptr) quda::device_free_(__func__, quda::file_name(__FILE__), __LINE__, ptr)
70 #define device_pinned_free(ptr) quda::device_pinned_free_(__func__, quda::file_name(__FILE__), __LINE__, ptr)
71 #define host_free(ptr) quda::host_free_(__func__, quda::file_name(__FILE__), __LINE__, ptr)
72 
73 
74 namespace quda {
75 
76  namespace pool {
77 
81  void init();
82 
89  void *device_malloc_(const char *func, const char *file, int line, size_t size);
90 
95  void device_free_(const char *func, const char *file, int line, void *ptr);
96 
103  void *pinned_malloc_(const char *func, const char *file, int line, size_t size);
104 
109  void pinned_free_(const char *func, const char *file, int line, void *ptr);
110 
114  void flush_device();
115 
119  void flush_pinned();
120 
121  } // namespace pool
122 
123 }
124 
125 #define pool_device_malloc(size) quda::pool::device_malloc_(__func__, __FILE__, __LINE__, size)
126 #define pool_device_free(ptr) quda::pool::device_free_(__func__, __FILE__, __LINE__, ptr)
127 #define pool_pinned_malloc(size) quda::pool::pinned_malloc_(__func__, __FILE__, __LINE__, size)
128 #define pool_pinned_free(ptr) quda::pool::pinned_free_(__func__, __FILE__, __LINE__, ptr)
129 
130 
131 #endif // _MALLOC_QUDA_H
long device_allocated_peak()
Definition: malloc.cpp:59
void * safe_malloc_(const char *func, const char *file, int line, size_t size)
Definition: malloc.cpp:226
void * device_malloc_(const char *func, const char *file, int line, size_t size)
Definition: malloc.cpp:169
constexpr const char * r_slant(const char *str)
Definition: malloc_quda.h:49
void assertAllMemFree()
Definition: malloc.cpp:384
void * device_pinned_malloc_(const char *func, const char *file, int line, size_t size)
Definition: malloc.cpp:200
void device_free_(const char *func, const char *file, int line, void *ptr)
Virtual free of pinned-memory allocation.
Definition: malloc.cpp:553
void * pinned_malloc_(const char *func, const char *file, int line, size_t size)
Allocate pinned-memory. If a free pre-existing allocation exists reuse this.
Definition: malloc.cpp:482
void device_free_(const char *func, const char *file, int line, void *ptr)
Definition: malloc.cpp:301
constexpr const char * str_end(const char *str)
Definition: malloc_quda.h:47
bool is_aligned(const void *ptr, size_t alignment)
Definition: malloc_quda.h:57
void flush_pinned()
Free all outstanding pinned-memory allocations.
Definition: malloc.cpp:566
void device_pinned_free_(const char *func, const char *file, int line, void *ptr)
Definition: malloc.cpp:322
void init()
Initialize the memory pool allocator.
Definition: malloc.cpp:457
void host_free_(const char *func, const char *file, int line, void *ptr)
Definition: malloc.cpp:344
void flush_device()
Free all outstanding device-memory allocations.
Definition: malloc.cpp:578
constexpr int size
long host_allocated_peak()
Definition: malloc.cpp:65
long mapped_allocated_peak()
Definition: malloc.cpp:63
void * mapped_malloc_(const char *func, const char *file, int line, size_t size)
Definition: malloc.cpp:273
QudaFieldLocation get_pointer_location(const void *ptr)
Definition: malloc.cpp:399
constexpr bool str_slant(const char *str)
Definition: malloc_quda.h:48
enum QudaFieldLocation_s QudaFieldLocation
long pinned_allocated_peak()
Definition: malloc.cpp:61
void * device_malloc_(const char *func, const char *file, int line, size_t size)
Allocate device-memory. If free pre-existing allocation exists reuse this.
Definition: malloc.cpp:524
void printPeakMemUsage()
Definition: malloc.cpp:375
constexpr const char * file_name(const char *str)
Definition: malloc_quda.h:50
void pinned_free_(const char *func, const char *file, int line, void *ptr)
Virtual free of pinned-memory allocation.
Definition: malloc.cpp:511
void * pinned_malloc_(const char *func, const char *file, int line, size_t size)
Definition: malloc.cpp:250