mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-09 21:50:45 +01:00
pull develop
This commit is contained in:
commit
8358ee38c4
@ -12,6 +12,7 @@ std::vector<_grid_mem_range> _grid_mem_avail;
|
|||||||
std::map<void*,_grid_mem_range> _grid_mem_alloc;
|
std::map<void*,_grid_mem_range> _grid_mem_alloc;
|
||||||
|
|
||||||
void gridMemoryInit() {
|
void gridMemoryInit() {
|
||||||
|
#ifdef GRID_NVCC
|
||||||
size_t free,total;
|
size_t free,total;
|
||||||
cudaMemGetInfo(&free,&total);
|
cudaMemGetInfo(&free,&total);
|
||||||
|
|
||||||
@ -35,10 +36,11 @@ void gridMemoryInit() {
|
|||||||
std::cout << GridLogMessage << "gridMemoryInit: " << sz << " bytes" << std::endl;
|
std::cout << GridLogMessage << "gridMemoryInit: " << sz << " bytes" << std::endl;
|
||||||
|
|
||||||
_grid_mem_avail.push_back( { 0, _grid_mem_pages } );
|
_grid_mem_avail.push_back( { 0, _grid_mem_pages } );
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void gridMallocManaged(void** pp, size_t sz) {
|
void gridMallocManaged(void** pp, size_t sz) {
|
||||||
|
#ifdef GRID_NVCC
|
||||||
if (_grid_mem_avail.empty())
|
if (_grid_mem_avail.empty())
|
||||||
gridMemoryInit();
|
gridMemoryInit();
|
||||||
|
|
||||||
@ -57,10 +59,13 @@ void gridMallocManaged(void** pp, size_t sz) {
|
|||||||
*pp = (char*)_grid_mem_base + _GRID_MEM_PAGE_SIZE*_grid_mem_avail[m].page_start;
|
*pp = (char*)_grid_mem_base + _GRID_MEM_PAGE_SIZE*_grid_mem_avail[m].page_start;
|
||||||
_grid_mem_alloc[*pp] = { _grid_mem_avail[m].page_start, _grid_mem_avail[m].page_start + pages };
|
_grid_mem_alloc[*pp] = { _grid_mem_avail[m].page_start, _grid_mem_avail[m].page_start + pages };
|
||||||
_grid_mem_avail[m].page_start += pages;
|
_grid_mem_avail[m].page_start += pages;
|
||||||
|
#else
|
||||||
|
*pp = malloc(sz);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void gridFree(void* p) {
|
void gridFree(void* p) {
|
||||||
|
#ifdef GRID_NVCC
|
||||||
if (_grid_mem_avail.empty())
|
if (_grid_mem_avail.empty())
|
||||||
gridMemoryInit();
|
gridMemoryInit();
|
||||||
|
|
||||||
@ -85,10 +90,13 @@ void gridFree(void* p) {
|
|||||||
_grid_mem_avail.push_back( alloc );
|
_grid_mem_avail.push_back( alloc );
|
||||||
}
|
}
|
||||||
_grid_mem_alloc.erase(p);
|
_grid_mem_alloc.erase(p);
|
||||||
|
#else
|
||||||
|
free(p);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void gridAcceleratorPrefetch(void* p, size_t sz) {
|
void gridAcceleratorPrefetch(void* p, size_t sz) {
|
||||||
|
#ifdef GRID_NVCC
|
||||||
auto & alloc = _grid_mem_alloc[p];
|
auto & alloc = _grid_mem_alloc[p];
|
||||||
if (alloc.page_start == alloc.page_end) // pinned to host
|
if (alloc.page_start == alloc.page_end) // pinned to host
|
||||||
return;
|
return;
|
||||||
@ -96,10 +104,11 @@ void gridAcceleratorPrefetch(void* p, size_t sz) {
|
|||||||
int target;
|
int target;
|
||||||
cudaGetDevice(&target);
|
cudaGetDevice(&target);
|
||||||
cudaMemPrefetchAsync(p,sz,target);
|
cudaMemPrefetchAsync(p,sz,target);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void gridMemGetInfo(size_t* pfree, size_t* ptotal) {
|
void gridMemGetInfo(size_t* pfree, size_t* ptotal) {
|
||||||
|
#ifdef GRID_NVCC
|
||||||
if (_grid_mem_avail.empty())
|
if (_grid_mem_avail.empty())
|
||||||
gridMemoryInit();
|
gridMemoryInit();
|
||||||
|
|
||||||
@ -107,10 +116,14 @@ void gridMemGetInfo(size_t* pfree, size_t* ptotal) {
|
|||||||
*pfree = 0;
|
*pfree = 0;
|
||||||
for (auto & a : _grid_mem_avail)
|
for (auto & a : _grid_mem_avail)
|
||||||
*pfree += (a.page_end - a.page_start) * _GRID_MEM_PAGE_SIZE;
|
*pfree += (a.page_end - a.page_start) * _GRID_MEM_PAGE_SIZE;
|
||||||
|
#else
|
||||||
|
*pfree = 0;
|
||||||
|
*ptotal = 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void gridMoveToHost(void** pp) {
|
void gridMoveToHost(void** pp) {
|
||||||
|
#ifdef GRID_NVCC
|
||||||
if (_grid_mem_avail.empty())
|
if (_grid_mem_avail.empty())
|
||||||
gridMemoryInit();
|
gridMemoryInit();
|
||||||
|
|
||||||
@ -126,6 +139,7 @@ void gridMoveToHost(void** pp) {
|
|||||||
gridFree(*pp);
|
gridFree(*pp);
|
||||||
*pp = pn;
|
*pp = pn;
|
||||||
_grid_mem_alloc[pn] = { 0,0 };
|
_grid_mem_alloc[pn] = { 0,0 };
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
NAMESPACE_END(Grid);
|
NAMESPACE_END(Grid);
|
||||||
|
@ -114,7 +114,8 @@ THE SOFTWARE.
|
|||||||
#define GRID_MACRO_WRITE_MEMBER(A,B) ::Grid::write(WR,#B,obj. B);
|
#define GRID_MACRO_WRITE_MEMBER(A,B) ::Grid::write(WR,#B,obj. B);
|
||||||
|
|
||||||
#define GRID_SERIALIZABLE_CLASS_MEMBERS(cname,...)\
|
#define GRID_SERIALIZABLE_CLASS_MEMBERS(cname,...)\
|
||||||
std::string SerialisableClassName(void) const {return std::string(#cname);} \
|
static inline std::string SerialisableClassName(void) {return std::string(#cname);} \
|
||||||
|
static constexpr bool isEnum = false; \
|
||||||
GRID_MACRO_EVAL(GRID_MACRO_MAP(GRID_MACRO_MEMBER,__VA_ARGS__))\
|
GRID_MACRO_EVAL(GRID_MACRO_MAP(GRID_MACRO_MEMBER,__VA_ARGS__))\
|
||||||
template <typename T>\
|
template <typename T>\
|
||||||
static inline void write(Writer<T> &WR,const std::string &s, const cname &obj){ \
|
static inline void write(Writer<T> &WR,const std::string &s, const cname &obj){ \
|
||||||
@ -162,6 +163,8 @@ public:\
|
|||||||
public:\
|
public:\
|
||||||
accelerator name(void) : value_(undefname) {}; \
|
accelerator name(void) : value_(undefname) {}; \
|
||||||
accelerator name(int value): value_(value) {}; \
|
accelerator name(int value): value_(value) {}; \
|
||||||
|
static inline std::string SerialisableClassName(void) {return std::string(#name);}\
|
||||||
|
static constexpr bool isEnum = true; \
|
||||||
template <typename T>\
|
template <typename T>\
|
||||||
static inline void write(::Grid::Writer<T> &WR,const std::string &s, const name &obj) \
|
static inline void write(::Grid::Writer<T> &WR,const std::string &s, const name &obj) \
|
||||||
{\
|
{\
|
||||||
|
Loading…
x
Reference in New Issue
Block a user