void garbageCollect() { int n = getActiveDeviceId(); for(mem_iter iter = memory_maps[n].begin(); iter != memory_maps[n].end(); ++iter) { if ((iter->second).is_free) { if (!(iter->second).is_unlinked) { cudaFreeWrapper(iter->first); total_bytes[n] -= iter->second.bytes; } } } mem_iter memory_curr = memory_maps[n].begin(); mem_iter memory_end = memory_maps[n].end(); while(memory_curr != memory_end) { if (memory_curr->second.is_free && !memory_curr->second.is_unlinked) { memory_maps[n].erase(memory_curr++); } else { ++memory_curr; } } }
void memFree(T *ptr) { int n = getActiveDeviceId(); mem_iter iter = memory_maps[n].find((void *)ptr); if (iter != memory_maps[n].end()) { iter->second.is_free = true; used_bytes -= iter->second.bytes; } else { cudaFreeWrapper(ptr); // Free it because we are not sure what the size is } }
static void garbageCollect() { int n = getActiveDeviceId(); for(mem_iter iter = memory_maps[n].begin(); iter != memory_maps[n].end(); iter++) { if ((iter->second).is_free) cudaFreeWrapper(iter->first); } mem_iter memory_curr = memory_maps[n].begin(); mem_iter memory_end = memory_maps[n].end(); while(memory_curr != memory_end) { if (memory_curr->second.is_free) { memory_maps[n].erase(memory_curr++); } else { ++memory_curr; } } }
void memFree(T *ptr) { cudaFreeWrapper(ptr); // Free it because we are not sure what the size is }