/*
* This file is part of the GROMACS molecular simulation package.
*
- * Copyright (c) 2018,2019,2020, by the GROMACS development team, led by
+ * Copyright (c) 2018,2019,2020,2021, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
#define PMEGPUTYPESHOSTIMPL_H
#include "config.h"
+#include "gromacs/utility/enumerationhelpers.h"
#include <array>
#include <set>
#include <vector>
-#if GMX_GPU == GMX_GPU_CUDA
-# include "gromacs/gpu_utils/gpueventsynchronizer.cuh"
+#if GMX_GPU_CUDA
# include "gromacs/gpu_utils/gpuregiontimer.cuh"
-#elif GMX_GPU == GMX_GPU_OPENCL
-# include "gromacs/gpu_utils/gpueventsynchronizer_ocl.h"
+#elif GMX_GPU_OPENCL
# include "gromacs/gpu_utils/gpuregiontimer_ocl.h"
+#elif GMX_GPU_SYCL
+# include "gromacs/gpu_utils/gpuregiontimer_sycl.h"
#endif
+#include "gromacs/gpu_utils/gpueventsynchronizer.h"
+
+#include "gromacs/fft/gpu_3dfft.h"
#include "gromacs/timing/gpu_timing.h" // for gtPME_EVENT_COUNT
-#include "pme_gpu_3dfft.h"
+#ifndef NUMFEPSTATES
+//! Number of FEP states.
+# define NUMFEPSTATES 2
+#endif
-class GpuParallel3dFft;
+namespace gmx
+{
+class Gpu3dFft;
+} // namespace gmx
/*! \internal \brief
* The main PME CUDA/OpenCL-specific host data structure, included in the PME GPU structure by the archSpecific pointer.
* \param[in] pmeStream GPU pme stream.
*/
PmeGpuSpecific(const DeviceContext& deviceContext, const DeviceStream& pmeStream) :
- deviceContext_(deviceContext),
- pmeStream_(pmeStream)
+ deviceContext_(deviceContext), pmeStream_(pmeStream)
{
}
GpuEventSynchronizer syncSpreadGridD2H;
/* Settings which are set at the start of the run */
- /*! \brief A boolean which tells whether the complex and real grids for cu/clFFT are different or same. Currenty true. */
+ /*! \brief A boolean which tells whether the complex and real grids for cu/clFFT are different or same. Currently true. */
bool performOutOfPlaceFFT = false;
/*! \brief A boolean which tells if the GPU timing events are enabled.
* False by default, can be enabled by setting the environment variable GMX_ENABLE_GPU_TIMING.
bool useTiming = false;
//! Vector of FFT setups
- std::vector<std::unique_ptr<GpuParallel3dFft>> fftSetup;
+ std::vector<std::unique_ptr<gmx::Gpu3dFft>> fftSetup;
//! All the timers one might use
- std::array<GpuRegionTimer, gtPME_EVENT_COUNT> timingEvents;
+ gmx::EnumerationArray<PmeStage, GpuRegionTimer> timingEvents;
//! Indices of timingEvents actually used
- std::set<size_t> activeTimers;
+ std::set<PmeStage> activeTimers;
/* GPU arrays element counts (not the arrays sizes in bytes!).
* They might be larger than the actual meaningful data sizes.
/*! \brief Both the kernelParams.atoms.theta and kernelParams.atoms.dtheta float element count (reserved) */
int splineDataSizeAlloc = 0;
/*! \brief The kernelParams.atoms.coefficients float element count (actual) */
- int coefficientsSize = 0;
+ int coefficientsSize[NUMFEPSTATES] = { 0, 0 };
/*! \brief The kernelParams.atoms.coefficients float element count (reserved) */
- int coefficientsSizeAlloc = 0;
+ int coefficientsCapacity[NUMFEPSTATES] = { 0, 0 };
/*! \brief The kernelParams.grid.splineValuesArray float element count (actual) */
- int splineValuesSize = 0;
+ int splineValuesSize[NUMFEPSTATES] = { 0, 0 };
/*! \brief The kernelParams.grid.splineValuesArray float element count (reserved) */
- int splineValuesSizeAlloc = 0;
+ int splineValuesCapacity[NUMFEPSTATES] = { 0, 0 };
/*! \brief The kernelParams.grid.realGrid float element count (actual) */
- int realGridSize = 0;
+ int realGridSize[NUMFEPSTATES] = { 0, 0 };
/*! \brief The kernelParams.grid.realGrid float element count (reserved) */
- int realGridSizeAlloc = 0;
+ int realGridCapacity[NUMFEPSTATES] = { 0, 0 };
/*! \brief The kernelParams.grid.fourierGrid float (not float2!) element count (actual) */
- int complexGridSize = 0;
+ int complexGridSize[NUMFEPSTATES] = { 0, 0 };
/*! \brief The kernelParams.grid.fourierGrid float (not float2!) element count (reserved) */
- int complexGridSizeAlloc = 0;
+ int complexGridCapacity[NUMFEPSTATES] = { 0, 0 };
};
#endif