Newer
Older
/*
* CudaMemory.cu
*
* Created on: Aug 17, 2014
* Author: Pietro Incardona
*/
/**
* \brief This class create instructions to allocate, and destroy GPU memory
*
* This class create instructions to allocate, destroy, resize GPU buffer,
* eventually if direct, comunication is not supported, it can instruction
* to create an Host Pinned memory.
*
* Usage:
*

Pietro Incardona
committed
* CudaMemory m = new CudaMemory();
*
* m.allocate();
* int * ptr = m.getPointer();
* *ptr[i] = 1000;
* ....

Pietro Incardona
committed
#ifndef CUDA_MEMORY_CUH_
#define CUDA_MEMORY_CUH_
#include "memory.hpp"

Pietro Incardona
committed
//! Is the host memory synchronized with the GPU memory
bool is_hm_sync;
//! Size of the memory
size_t sz;
//! device memory
void * dm;
//! host memory
void * hm;

Pietro Incardona
committed
//! Allocate an host buffer
void allocate_host(size_t sz);
//! allocate memory
virtual bool allocate(size_t sz);
//! destroy memory
virtual void destroy();

Pietro Incardona
committed
//! copy from a General device
virtual bool copy(memory & m);
//! the the size of the allocated memory
virtual size_t size();
//! resize the momory allocated
virtual bool resize(size_t sz);

Pietro Incardona
committed
//! get a readable pointer with the data
void * getPointer();

Pietro Incardona
committed
//! copy from GPU to GPU buffer directly
bool copyDeviceToDevice(CudaMemory & m);
//! copy from Pointer to GPU
bool copyFromPointer(void * ptr);
//! This function notify that the device memory is not sync with
//! the host memory, is called when a task is performed that write
//! on the buffer
void isNotSync() {is_hm_sync = false;}
public:
//! Constructor
CudaMemory():is_hm_sync(false),sz(0),hm(0) {};