diff --git a/source/adios2/toolkit/format/bp5/BP5Deserializer.cpp b/source/adios2/toolkit/format/bp5/BP5Deserializer.cpp index befbf1ba7f..ba851e3082 100644 --- a/source/adios2/toolkit/format/bp5/BP5Deserializer.cpp +++ b/source/adios2/toolkit/format/bp5/BP5Deserializer.cpp @@ -1256,6 +1256,19 @@ static int FindOffsetCM(size_t Dims, const size_t *Size, const size_t *Index) * ******************************* */ +void BP5Deserializer::MemCopyData(char *OutData, const char *InData, + size_t Size, MemorySpace MemSpace) +{ +#ifdef ADIOS2_HAVE_CUDA + if (MemSpace == MemorySpace::CUDA) + { + helper::CudaMemCopyToBuffer(OutData, 0, InData, Size); + return; + } +#endif + memcpy(OutData, InData, Size); +} + // Row major version void BP5Deserializer::ExtractSelectionFromPartialRM( int ElementSize, size_t Dims, const size_t *GlobalDims, @@ -1343,7 +1356,7 @@ void BP5Deserializer::ExtractSelectionFromPartialRM( size_t i; for (i = 0; i < BlockCount; i++) { - memcpy(OutData, InData, BlockSize * ElementSize); + MemCopyData(OutData, InData, BlockSize * ElementSize, MemSpace); InData += SourceBlockStride; OutData += DestBlockStride; } @@ -1444,7 +1457,7 @@ void BP5Deserializer::ExtractSelectionFromPartialCM( OutData += DestBlockStartOffset; for (int i = 0; i < BlockCount; i++) { - memcpy(OutData, InData, BlockSize * ElementSize); + MemCopyData(OutData, InData, BlockSize * ElementSize, MemSpace); InData += SourceBlockStride; OutData += DestBlockStride; } diff --git a/source/adios2/toolkit/format/bp5/BP5Deserializer.h b/source/adios2/toolkit/format/bp5/BP5Deserializer.h index 15f3c2e104..fc22cf7a92 100644 --- a/source/adios2/toolkit/format/bp5/BP5Deserializer.h +++ b/source/adios2/toolkit/format/bp5/BP5Deserializer.h @@ -171,6 +171,8 @@ class BP5Deserializer : virtual public BP5Base bool GetSingleValueFromMetadata(core::VariableBase &variable, BP5VarRec *VarRec, void *DestData, size_t Step, size_t WriterRank); + void MemCopyData(char *OutData, const char *InData, size_t Size, + MemorySpace MemSpace); void ExtractSelectionFromPartialRM( int ElementSize, size_t Dims, const size_t *GlobalDims, const size_t *PartialOffsets, const size_t *PartialCounts,