#include "device_stream.h"
-DeviceStream::DeviceStream() = default;
-
-void DeviceStream::init(const DeviceContext& /* deviceContext */,
- DeviceStreamPriority /* priority */,
- const bool /* useTiming */)
+DeviceStream::DeviceStream(const DeviceContext& /* deviceContext */,
+ DeviceStreamPriority /* priority */,
+ const bool /* useTiming */)
{
}
#include "gromacs/utility/gmxassert.h"
#include "gromacs/utility/stringutil.h"
-DeviceStream::DeviceStream()
-{
- stream_ = nullptr;
-}
-
-void DeviceStream::init(const DeviceContext& /* deviceContext */,
- DeviceStreamPriority priority,
- const bool /* useTiming */)
+DeviceStream::DeviceStream(const DeviceContext& /* deviceContext */,
+ DeviceStreamPriority priority,
+ const bool /* useTiming */)
{
cudaError_t stat;
class DeviceStream
{
public:
- //! Default constructor
- DeviceStream();
- //! Destructor
- ~DeviceStream();
-
- /*! \brief Initialize
- *
- * \param[in] deviceContext Device context (not used in CUDA).
- * \param[in] priority Stream priority: high or normal.
- * \param[in] useTiming If the timing should be enabled (not used in CUDA).
- */
- void init(const DeviceContext& deviceContext, DeviceStreamPriority priority, bool useTiming);
-
/*! \brief Construct and init.
*
* \param[in] deviceContext Device context (only used in OpenCL).
* \param[in] priority Stream priority: high or normal (only used in CUDA).
* \param[in] useTiming If the timing should be enabled (only used in OpenCL).
*/
- DeviceStream(const DeviceContext& deviceContext, DeviceStreamPriority priority, const bool useTiming)
- {
- init(deviceContext, priority, useTiming);
- }
+ DeviceStream(const DeviceContext& deviceContext, DeviceStreamPriority priority, bool useTiming);
+
+ //! Destructor
+ ~DeviceStream();
/*! \brief Check if the underlying stream is valid.
*
//! Device context.
DeviceContext context_;
//! GPU command streams.
- EnumerationArray<DeviceStreamType, DeviceStream> streams_;
+ EnumerationArray<DeviceStreamType, std::unique_ptr<DeviceStream>> streams_;
};
// DeviceStreamManager::Impl
{
try
{
- streams_[DeviceStreamType::NonBondedLocal].init(context_, DeviceStreamPriority::Normal, useTiming);
+ streams_[DeviceStreamType::NonBondedLocal] =
+ std::make_unique<DeviceStream>(context_, DeviceStreamPriority::Normal, useTiming);
if (simulationWork.useGpuPme)
{
* - default high priority with CUDA
* - no priorities implemented yet with OpenCL; see #2532
*/
- streams_[DeviceStreamType::Pme].init(context_, DeviceStreamPriority::High, useTiming);
+ streams_[DeviceStreamType::Pme] =
+ std::make_unique<DeviceStream>(context_, DeviceStreamPriority::High, useTiming);
}
if (havePpDomainDecomposition)
{
- streams_[DeviceStreamType::NonBondedNonLocal].init(context_, DeviceStreamPriority::High,
- useTiming);
+ streams_[DeviceStreamType::NonBondedNonLocal] =
+ std::make_unique<DeviceStream>(context_, DeviceStreamPriority::High, useTiming);
}
// Update stream is used both for coordinates transfers and for GPU update/constraints
if (simulationWork.useGpuPme || simulationWork.useGpuUpdate || simulationWork.useGpuBufferOps)
{
- streams_[DeviceStreamType::UpdateAndConstraints].init(
- context_, DeviceStreamPriority::Normal, useTiming);
+ streams_[DeviceStreamType::UpdateAndConstraints] =
+ std::make_unique<DeviceStream>(context_, DeviceStreamPriority::Normal, useTiming);
}
if (simulationWork.useGpuPmePpCommunication)
{
- streams_[DeviceStreamType::PmePpTransfer].init(context_, DeviceStreamPriority::Normal, useTiming);
+ streams_[DeviceStreamType::PmePpTransfer] =
+ std::make_unique<DeviceStream>(context_, DeviceStreamPriority::Normal, useTiming);
}
}
GMX_CATCH_ALL_AND_EXIT_WITH_FATAL_ERROR
const DeviceStream& DeviceStreamManager::stream(DeviceStreamType streamToGet) const
{
- return impl_->streams_[streamToGet];
+ return *impl_->streams_[streamToGet];
}
const DeviceStream& DeviceStreamManager::bondedStream(bool hasPPDomainDecomposition) const
bool DeviceStreamManager::streamIsValid(DeviceStreamType streamToCheck) const
{
- return impl_->streams_[streamToCheck].isValid();
+ return impl_->streams_[streamToCheck] != nullptr && impl_->streams_[streamToCheck]->isValid();
}
} // namespace gmx
#include "gromacs/utility/gmxassert.h"
#include "gromacs/utility/stringutil.h"
-DeviceStream::DeviceStream()
-{
- stream_ = nullptr;
-}
-
-void DeviceStream::init(const DeviceContext& deviceContext, DeviceStreamPriority /* priority */, const bool useTiming)
+DeviceStream::DeviceStream(const DeviceContext& deviceContext,
+ DeviceStreamPriority /* priority */,
+ const bool useTiming)
{
const DeviceInformation& deviceInfo = deviceContext.deviceInfo();
cl_command_queue_properties queueProperties = useTiming ? CL_QUEUE_PROFILING_ENABLE : 0;
#include "gromacs/gpu_utils/device_stream.h"
-DeviceStream::DeviceStream() = default;
-
-void DeviceStream::init(const DeviceContext& /* deviceContext */,
- DeviceStreamPriority /* priority */,
- const bool /* useTiming */)
+DeviceStream::DeviceStream(const DeviceContext& /* deviceContext */,
+ DeviceStreamPriority /* priority */,
+ const bool /* useTiming */)
{
}