Batch GPU stage downloads
This commit is contained in:
@@ -317,6 +317,8 @@ void bssn_class::Step_MainPath_GPU(int lev, int YN)
|
||||
|
||||
auto stage_download_var_list =
|
||||
[&](Block *cg, MyList<var> *var_list, bool skip_unmapped) {
|
||||
std::vector<double *> batch_host_ptrs;
|
||||
std::vector<MyList<var> *> batch_vars;
|
||||
while (var_list)
|
||||
{
|
||||
double *host_ptr = cg->fgfs[var_list->data->sgfn];
|
||||
@@ -325,18 +327,28 @@ void bssn_class::Step_MainPath_GPU(int lev, int YN)
|
||||
var_list = var_list->next;
|
||||
continue;
|
||||
}
|
||||
if (bssn_cuda_download_buffer(cg->shape, host_ptr))
|
||||
{
|
||||
cerr << "GPU stage download failure: lev=" << lev
|
||||
<< " var=" << var_list->data->name
|
||||
<< " bbox=(" << cg->bbox[0] << ":" << cg->bbox[3] << ","
|
||||
<< cg->bbox[1] << ":" << cg->bbox[4] << ","
|
||||
<< cg->bbox[2] << ":" << cg->bbox[5] << ")" << endl;
|
||||
ERROR = 1;
|
||||
break;
|
||||
}
|
||||
batch_host_ptrs.push_back(host_ptr);
|
||||
batch_vars.push_back(var_list);
|
||||
var_list = var_list->next;
|
||||
}
|
||||
if (!batch_host_ptrs.empty() &&
|
||||
bssn_gpu_download_buffer_batch(cg->shape, &batch_host_ptrs[0],
|
||||
static_cast<int>(batch_host_ptrs.size())))
|
||||
{
|
||||
for (size_t i = 0; i < batch_host_ptrs.size(); ++i)
|
||||
{
|
||||
if (bssn_cuda_download_buffer(cg->shape, batch_host_ptrs[i]))
|
||||
{
|
||||
cerr << "GPU stage download failure: lev=" << lev
|
||||
<< " var=" << batch_vars[i]->data->name
|
||||
<< " bbox=(" << cg->bbox[0] << ":" << cg->bbox[3] << ","
|
||||
<< cg->bbox[1] << ":" << cg->bbox[4] << ","
|
||||
<< cg->bbox[2] << ":" << cg->bbox[5] << ")" << endl;
|
||||
ERROR = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
auto stage_download_patch_list =
|
||||
|
||||
Reference in New Issue
Block a user