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;