aboutsummaryrefslogtreecommitdiff
path: root/Source/Particles/ParticleCreation/SmartUtils.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--Source/Particles/ParticleCreation/SmartUtils.cpp32
1 files changed, 27 insertions, 5 deletions
diff --git a/Source/Particles/ParticleCreation/SmartUtils.cpp b/Source/Particles/ParticleCreation/SmartUtils.cpp
index 2ed06b9a2..7e79f58c5 100644
--- a/Source/Particles/ParticleCreation/SmartUtils.cpp
+++ b/Source/Particles/ParticleCreation/SmartUtils.cpp
@@ -7,17 +7,27 @@
*/
#include "SmartUtils.H"
+#include <AMReX_GpuContainers.H>
+
#include <algorithm>
#include <utility>
+#include <vector>
PolicyVec getPolicies (const NameMap& names) noexcept
{
- PolicyVec policies;
- policies.resize(names.size());
+ std::vector<InitializationPolicy> h_policies;
+ h_policies.resize(names.size());
for (const auto& kv : names)
{
- policies[kv.second] = initialization_policies[kv.first];
+ h_policies[kv.second] = initialization_policies[kv.first];
}
+
+ // host-to-device copy
+ PolicyVec policies;
+ policies.resize(names.size());
+ amrex::Gpu::copyAsync(amrex::Gpu::hostToDevice, h_policies.begin(), h_policies.end(), policies.begin());
+ amrex::Gpu::Device::streamSynchronize();
+
return policies;
}
@@ -25,6 +35,9 @@ SmartCopyTag getSmartCopyTag (const NameMap& src, const NameMap& dst) noexcept
{
SmartCopyTag tag;
+ std::vector<int> h_src_comps;
+ std::vector<int> h_dst_comps;
+
// we use the fact that maps are sorted
auto i_src = src.begin();
auto i_dst = dst.begin();
@@ -44,12 +57,21 @@ SmartCopyTag getSmartCopyTag (const NameMap& src, const NameMap& dst) noexcept
{
// name is in both...
tag.common_names.push_back(i_src->first);
- tag.src_comps.push_back(i_src->second);
- tag.dst_comps.push_back(i_dst->second);
+ h_src_comps.push_back(i_src->second);
+ h_dst_comps.push_back(i_dst->second);
++i_src;
++i_dst;
}
}
+ // host-to-device copies
+ tag.src_comps.resize(h_src_comps.size());
+ amrex::Gpu::copyAsync(amrex::Gpu::hostToDevice, h_src_comps.begin(), h_src_comps.end(), tag.src_comps.begin());
+
+ tag.dst_comps.resize(h_dst_comps.size());
+ amrex::Gpu::copyAsync(amrex::Gpu::hostToDevice, h_dst_comps.begin(), h_dst_comps.end(), tag.dst_comps.begin());
+
+ amrex::Gpu::Device::streamSynchronize();
+
return tag;
}