Move resident sync comm buffers into StepAllocation pool
This commit is contained in:
@@ -459,7 +459,12 @@ struct StepAllocation {
|
|||||||
double *d_state_curr_mem;
|
double *d_state_curr_mem;
|
||||||
double *d_state_next_mem;
|
double *d_state_next_mem;
|
||||||
double *d_matter_mem;
|
double *d_matter_mem;
|
||||||
|
double *d_comm_mem;
|
||||||
|
double *h_comm_mem;
|
||||||
size_t cap_all;
|
size_t cap_all;
|
||||||
|
size_t cap_comm;
|
||||||
|
bool h_comm_pinned;
|
||||||
|
size_t cap_h_comm;
|
||||||
};
|
};
|
||||||
|
|
||||||
static std::unordered_map<void *, StepContext> g_step_ctx;
|
static std::unordered_map<void *, StepContext> g_step_ctx;
|
||||||
@@ -467,7 +472,11 @@ static std::vector<StepAllocation> g_step_pool;
|
|||||||
|
|
||||||
static StepAllocation empty_step_allocation()
|
static StepAllocation empty_step_allocation()
|
||||||
{
|
{
|
||||||
StepAllocation alloc = {nullptr, nullptr, nullptr, nullptr, nullptr, 0};
|
StepAllocation alloc = {
|
||||||
|
nullptr, nullptr, nullptr, nullptr, nullptr,
|
||||||
|
nullptr, nullptr,
|
||||||
|
0, 0, false, 0
|
||||||
|
};
|
||||||
return alloc;
|
return alloc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -480,14 +489,21 @@ static StepAllocation detach_step_allocation(StepContext &ctx)
|
|||||||
{
|
{
|
||||||
StepAllocation alloc = {
|
StepAllocation alloc = {
|
||||||
ctx.d_state0_mem, ctx.d_accum_mem, ctx.d_state_curr_mem,
|
ctx.d_state0_mem, ctx.d_accum_mem, ctx.d_state_curr_mem,
|
||||||
ctx.d_state_next_mem, ctx.d_matter_mem, ctx.cap_all
|
ctx.d_state_next_mem, ctx.d_matter_mem,
|
||||||
|
ctx.d_comm_mem, ctx.h_comm_mem,
|
||||||
|
ctx.cap_all, ctx.cap_comm, ctx.h_comm_pinned, ctx.cap_h_comm
|
||||||
};
|
};
|
||||||
ctx.d_state0_mem = nullptr;
|
ctx.d_state0_mem = nullptr;
|
||||||
ctx.d_accum_mem = nullptr;
|
ctx.d_accum_mem = nullptr;
|
||||||
ctx.d_state_curr_mem = nullptr;
|
ctx.d_state_curr_mem = nullptr;
|
||||||
ctx.d_state_next_mem = nullptr;
|
ctx.d_state_next_mem = nullptr;
|
||||||
ctx.d_matter_mem = nullptr;
|
ctx.d_matter_mem = nullptr;
|
||||||
|
ctx.d_comm_mem = nullptr;
|
||||||
|
ctx.h_comm_mem = nullptr;
|
||||||
ctx.cap_all = 0;
|
ctx.cap_all = 0;
|
||||||
|
ctx.cap_comm = 0;
|
||||||
|
ctx.h_comm_pinned = false;
|
||||||
|
ctx.cap_h_comm = 0;
|
||||||
ctx.matter_ready = false;
|
ctx.matter_ready = false;
|
||||||
ctx.state_ready = false;
|
ctx.state_ready = false;
|
||||||
ctx.d_state0.fill(nullptr);
|
ctx.d_state0.fill(nullptr);
|
||||||
@@ -505,7 +521,12 @@ static void attach_step_allocation(StepContext &ctx, const StepAllocation &alloc
|
|||||||
ctx.d_state_curr_mem = alloc.d_state_curr_mem;
|
ctx.d_state_curr_mem = alloc.d_state_curr_mem;
|
||||||
ctx.d_state_next_mem = alloc.d_state_next_mem;
|
ctx.d_state_next_mem = alloc.d_state_next_mem;
|
||||||
ctx.d_matter_mem = alloc.d_matter_mem;
|
ctx.d_matter_mem = alloc.d_matter_mem;
|
||||||
|
ctx.d_comm_mem = alloc.d_comm_mem;
|
||||||
|
ctx.h_comm_mem = alloc.h_comm_mem;
|
||||||
ctx.cap_all = alloc.cap_all;
|
ctx.cap_all = alloc.cap_all;
|
||||||
|
ctx.cap_comm = alloc.cap_comm;
|
||||||
|
ctx.h_comm_pinned = alloc.h_comm_pinned;
|
||||||
|
ctx.cap_h_comm = alloc.cap_h_comm;
|
||||||
ctx.matter_ready = false;
|
ctx.matter_ready = false;
|
||||||
ctx.state_ready = false;
|
ctx.state_ready = false;
|
||||||
}
|
}
|
||||||
@@ -619,18 +640,6 @@ static void release_step_ctx(void *block_tag)
|
|||||||
{
|
{
|
||||||
auto it = g_step_ctx.find(block_tag);
|
auto it = g_step_ctx.find(block_tag);
|
||||||
if (it == g_step_ctx.end()) return;
|
if (it == g_step_ctx.end()) return;
|
||||||
if (it->second.d_comm_mem) {
|
|
||||||
cudaFree(it->second.d_comm_mem);
|
|
||||||
it->second.d_comm_mem = nullptr;
|
|
||||||
it->second.cap_comm = 0;
|
|
||||||
}
|
|
||||||
if (it->second.h_comm_mem) {
|
|
||||||
if (it->second.h_comm_pinned) cudaFreeHost(it->second.h_comm_mem);
|
|
||||||
else free(it->second.h_comm_mem);
|
|
||||||
it->second.h_comm_mem = nullptr;
|
|
||||||
it->second.h_comm_pinned = false;
|
|
||||||
it->second.cap_h_comm = 0;
|
|
||||||
}
|
|
||||||
StepAllocation alloc = detach_step_allocation(it->second);
|
StepAllocation alloc = detach_step_allocation(it->second);
|
||||||
recycle_step_allocation(alloc);
|
recycle_step_allocation(alloc);
|
||||||
g_step_ctx.erase(it);
|
g_step_ctx.erase(it);
|
||||||
|
|||||||
Reference in New Issue
Block a user