#include #include namespace Grid { int PointerCache::victim; PointerCache::PointerCacheEntry PointerCache::Entries[PointerCache::Ncache]; void *PointerCache::Insert(void *ptr,size_t bytes) { if (bytes < 4096 ) return ptr; #ifdef GRID_OMP assert(omp_in_parallel()==0); #endif void * ret = NULL; int v = -1; for(int e=0;e= 0); const int page_size = 4096; uint64_t virt_pfn = (uint64_t)Buf / page_size; off_t offset = sizeof(uint64_t) * virt_pfn; uint64_t npages = (BYTES + page_size-1) / page_size; uint64_t pagedata[npages]; uint64_t ret = lseek(fd, offset, SEEK_SET); assert(ret == offset); ret = ::read(fd, pagedata, sizeof(uint64_t)*npages); assert(ret == sizeof(uint64_t) * npages); int nhugepages = npages / 512; int n4ktotal, nnothuge; n4ktotal = 0; nnothuge = 0; for (int i = 0; i < nhugepages; ++i) { uint64_t baseaddr = (pagedata[i*512] & 0x7fffffffffffffULL) * page_size; for (int j = 0; j < 512; ++j) { uint64_t pageaddr = (pagedata[i*512+j] & 0x7fffffffffffffULL) * page_size; ++n4ktotal; if (pageaddr != baseaddr + j * page_size) ++nnothuge; } } int rank = CartesianCommunicator::RankWorld(); printf("rank %d Allocated %d 4k pages, %d not in huge pages\n", rank, n4ktotal, nnothuge); #endif } }