Backport of commit 8bba2d12ec : Fix bug in GPU/CPU overlap

This commit is contained in:
Axel Kohlmeyer
2024-07-24 08:28:17 -04:00
parent fe90838843
commit 92d07ceba4

View File

@ -142,28 +142,6 @@ class AtomVecKokkos : virtual public AtomVec {
public: public:
#ifdef LMP_KOKKOS_GPU #ifdef LMP_KOKKOS_GPU
template<class ViewType>
Kokkos::View<typename ViewType::data_type,
typename ViewType::array_layout,
LMPPinnedHostType,
Kokkos::MemoryTraits<Kokkos::Unmanaged> >
create_async_copy(const ViewType& src) {
typedef Kokkos::View<typename ViewType::data_type,
typename ViewType::array_layout,
typename std::conditional<
std::is_same<typename ViewType::execution_space,LMPDeviceType>::value,
LMPPinnedHostType,typename ViewType::memory_space>::type,
Kokkos::MemoryTraits<Kokkos::Unmanaged> > mirror_type;
if (buffer_size == 0) {
buffer = Kokkos::kokkos_malloc<LMPPinnedHostType>(src.span());
buffer_size = src.span();
} else if (buffer_size < src.span()) {
buffer = Kokkos::kokkos_realloc<LMPPinnedHostType>(buffer,src.span());
buffer_size = src.span();
}
return mirror_type(buffer, src.d_view.layout());
}
template<class ViewType> template<class ViewType>
void perform_async_copy(ViewType& src, unsigned int space) { void perform_async_copy(ViewType& src, unsigned int space) {
typedef Kokkos::View<typename ViewType::data_type, typedef Kokkos::View<typename ViewType::data_type,
@ -173,11 +151,11 @@ class AtomVecKokkos : virtual public AtomVec {
LMPPinnedHostType,typename ViewType::memory_space>::type, LMPPinnedHostType,typename ViewType::memory_space>::type,
Kokkos::MemoryTraits<Kokkos::Unmanaged> > mirror_type; Kokkos::MemoryTraits<Kokkos::Unmanaged> > mirror_type;
if (buffer_size == 0) { if (buffer_size == 0) {
buffer = Kokkos::kokkos_malloc<LMPPinnedHostType>(src.span()*sizeof(typename ViewType::value_type)); buffer_size = src.span() * sizeof(typename ViewType::value_type);
buffer_size = src.span(); buffer = Kokkos::kokkos_malloc<LMPPinnedHostType>(buffer_size);
} else if (buffer_size < src.span()) { } else if (buffer_size < (src.span() * sizeof(typename ViewType::value_type))) {
buffer = Kokkos::kokkos_realloc<LMPPinnedHostType>(buffer,src.span()*sizeof(typename ViewType::value_type)); buffer_size = src.span() * sizeof(typename ViewType::value_type);
buffer_size = src.span(); buffer = Kokkos::kokkos_realloc<LMPPinnedHostType>(buffer, buffer_size);
} }
mirror_type tmp_view((typename ViewType::value_type*)buffer, src.d_view.layout()); mirror_type tmp_view((typename ViewType::value_type*)buffer, src.d_view.layout());