Newer
Older
#include "TemplateParameters.h"
enum class buf_choose_policy
{
naiv,
sorted_vec,
};
template< MemType mem >
class buffer
{
private:
void *ptr;
size_t allocated_size;
size_t scalar_size;
bool is_free;
int id;
public:
buffer();
~buffer();
buffer(const size_t required_size);
bool is_available() const;
memory_pipline_base();
~memory_pipline_base();
template< MemType mem >
void set_available(const int id);
template< MemType mem >
std::vector<buffer<mem> >& get_memtyped_vector();
};
template<buf_choose_policy choose_type = buf_choose_policy::naiv>
class memory_pipline: public memory_pipline_base
{
private:
#ifdef INCLUDE_CUDA
using memory_pipline_base::gpu_buff;
#endif
using memory_pipline_base::cpu_buff;
memory_pipline(/* args */) : memory_pipline_base() {}
~memory_pipline() = default;
};
template<>
class memory_pipline<buf_choose_policy::sorted_vec>: public memory_pipline_base
{
private:
#ifdef INCLUDE_CUDA
using memory_pipline_base::gpu_buff;
#endif
using memory_pipline_base::cpu_buff;
public:
memory_pipline(/* args */) : memory_pipline_base() {}
~memory_pipline() = default;
int get_buffer(const size_t required_size, void *& ptr);
};
template<>
class memory_pipline<buf_choose_policy::find_best_unsorted>: public memory_pipline_base
{
private:
#ifdef INCLUDE_CUDA
using memory_pipline_base::gpu_buff;
#endif
using memory_pipline_base::cpu_buff;
public:
memory_pipline(/* args */) : memory_pipline_base() {}
~memory_pipline() = default;
memory_faucet(const memory_faucet&) = delete;
memory_faucet& operator=(const memory_faucet&) = delete;
static memory_pipline<buf_choose_policy::naiv>* mem_pipe_naiv;
static memory_pipline<buf_choose_policy::sorted_vec>* mem_pipe_sorted;
static memory_pipline<buf_choose_policy::find_best_unsorted>* mem_pipe_unsorted;
template<buf_choose_policy choose_type = buf_choose_policy::naiv>
static memory_pipline<choose_type>* get_faucet();
template< MemType mem, buf_choose_policy choose_type = buf_choose_policy::naiv >