Backport of commit 8bba2d12ec : Fix bug in GPU/CPU overlap
This commit is contained in:
@ -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());
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user