1 #ifndef __CUV_ALLOCATORS_HPP__
2 #define __CUV_ALLOCATORS_HPP__
5 #include <boost/shared_ptr.hpp>
6 #include <boost/thread/recursive_mutex.hpp>
12 #define CUV_LOG_DEBUG(X) std::cout << X << std::endl;
14 #define CUV_LOG_DEBUG(X)
18 #include "meta_programming.hpp"
29 virtual void alloc(
void** ptr,
size_t memsize,
size_t valueSize,
host_memory_space) = 0;
31 virtual void alloc(
void** ptr,
size_t memsize,
size_t valueSize,
dev_memory_space) = 0;
33 virtual void alloc2d(
void** ptr,
size_t& pitch,
size_t height,
size_t width,
size_t valueSize,
36 virtual void alloc2d(
void** ptr,
size_t& pitch,
size_t height,
size_t width,
size_t valueSize,
57 virtual void alloc(
void** ptr,
size_t memsize,
size_t valueSize,
host_memory_space);
59 virtual void alloc(
void** ptr,
size_t memsize,
size_t valueSize,
dev_memory_space);
61 virtual void alloc2d(
void** ptr,
size_t& pitch,
size_t height,
size_t width,
size_t valueSize,
64 virtual void alloc2d(
void** ptr,
size_t& pitch,
size_t height,
size_t width,
size_t valueSize,
83 virtual void alloc(
void** ptr,
size_t memsize,
size_t valueSize,
host_memory_space);
85 virtual void alloc(
void** ptr,
size_t memsize,
size_t valueSize,
dev_memory_space);
87 virtual void alloc2d(
void** ptr,
size_t& pitch,
size_t height,
size_t width,
size_t valueSize,
90 virtual void alloc2d(
void** ptr,
size_t& pitch,
size_t height,
size_t width,
size_t valueSize,
108 boost::recursive_mutex m_dev_pool_mutex;
109 boost::recursive_mutex m_host_pool_mutex;
112 std::map<void*, bool> m_dev_pool;
113 std::map<void*, size_t> m_dev_pool_sizes;
115 std::map<void*, bool> m_host_pool;
116 std::map<void*, size_t> m_host_pool_sizes;
134 template<
class memory_space>
135 boost::recursive_mutex& get_pool_mutex(memory_space m)
const;
137 template<
class memory_space>
138 std::map<void*, bool>& get_pool(memory_space m);
140 template<
class memory_space>
141 const std::map<void*, bool>& get_pool(memory_space m)
const;
143 template<
class memory_space>
144 std::map<void*, size_t>& get_pool_sizes(memory_space m);
146 template<
class memory_space>
147 const std::map<void*, size_t>& get_pool_sizes(memory_space m)
const;
149 template<
class memory_space>
150 void collect_garbage(memory_space m);
152 template<
class memory_space>
153 void alloc_pooled(
void** ptr,
size_t memsize,
size_t valueSize, memory_space m);
155 template<
class memory_space>
156 void delete_pool(memory_space);
158 template<
class memory_space>
159 void do_dealloc(
void** ptr, memory_space m);
162 static const size_t MIN_SIZE_HOST = 8192;
163 static const size_t MIN_SIZE_DEV = 1;
168 virtual void garbage_collection() {
173 virtual void alloc(
void** ptr,
size_t memsize,
size_t valueSize,
host_memory_space);
175 virtual void alloc(
void** ptr,
size_t memsize,
size_t valueSize,
dev_memory_space);
177 virtual void alloc2d(
void** ptr,
size_t& pitch,
size_t height,
size_t width,
size_t valueSize,
180 virtual void alloc2d(
void** ptr,
size_t& pitch,
size_t height,
size_t width,
size_t valueSize,
187 template<
class memory_space>
188 size_t pool_free_count(memory_space m)
const;
190 template<
class memory_space>
191 size_t pool_size(memory_space m)
const;
193 template<
class memory_space>
194 size_t pool_count(memory_space m)
const;
196 size_t pool_free_count()
const;
198 size_t pool_size()
const;
200 size_t pool_count()
const;