Gromacs  2026.0-dev-20241113-4b16639
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Functions
devicebuffer_sycl.h File Reference
#include <utility>
#include "gromacs/gpu_utils/device_context.h"
#include "gromacs/gpu_utils/device_stream.h"
#include "gromacs/gpu_utils/devicebuffer_datatype.h"
#include "gromacs/gpu_utils/gmxsycl.h"
#include "gromacs/gpu_utils/gpu_utils.h"
#include "gromacs/gpu_utils/gputraits_sycl.h"
#include "gromacs/hardware/device_information.h"
#include "gromacs/utility/fatalerror.h"
#include "gromacs/utility/gmxassert.h"
#include "gromacs/utility/stringutil.h"
+ Include dependency graph for devicebuffer_sycl.h:
+ This graph shows which files directly or indirectly include this file:

Description

Implements the DeviceBuffer type and routines for SYCL. Should only be included directly by the main DeviceBuffer file devicebuffer.h. TODO: the intent is for DeviceBuffer to become a class.

Author
Artem Zhmurov zhmur.nosp@m.ov@g.nosp@m.mail..nosp@m.com
Erik Lindahl erik..nosp@m.lind.nosp@m.ahl@g.nosp@m.mail.nosp@m..com
Andrey Alekseenko al42a.nosp@m.nd@g.nosp@m.mail..nosp@m.com

Functions

template<typename T >
static gmx_unused bool checkDeviceBuffer (const DeviceBuffer< T > &buffer, int gmx_unused requiredSize)
 Check the validity of the device buffer. More...
 
template<typename ValueType >
void allocateDeviceBuffer (DeviceBuffer< ValueType > *buffer, size_t numValues, const DeviceContext &deviceContext)
 Allocates a device-side buffer. It is currently a caller's responsibility to call it only on not-yet allocated buffers. More...
 
template<typename ValueType >
void freeDeviceBuffer (DeviceBuffer< ValueType > *buffer)
 Frees a device-side buffer. This does not reset separately stored size/capacity integers, as this is planned to be a destructor of DeviceBuffer as a proper class, and no calls on buffer should be made afterwards. More...
 
template<typename ValueType >
void copyToDeviceBuffer (DeviceBuffer< ValueType > *buffer, const ValueType *hostBuffer, size_t startingOffset, size_t numValues, const DeviceStream &deviceStream, GpuApiCallBehavior transferKind, CommandEvent *gmx_unused timingEvent)
 Performs the host-to-device data copy, synchronous or asynchronously on request. More...
 
template<typename ValueType >
void copyFromDeviceBuffer (ValueType *hostBuffer, DeviceBuffer< ValueType > *buffer, size_t startingOffset, size_t numValues, const DeviceStream &deviceStream, GpuApiCallBehavior transferKind, CommandEvent *gmx_unused timingEvent)
 Performs the device-to-host data copy, synchronous or asynchronously on request. More...
 
template<typename ValueType >
void copyBetweenDeviceBuffers (DeviceBuffer< ValueType > *destinationDeviceBuffer, DeviceBuffer< ValueType > *sourceDeviceBuffer, size_t numValues, const DeviceStream &deviceStream, GpuApiCallBehavior transferKind, CommandEvent *gmx_unused timingEvent)
 Performs the device-to-device data copy, synchronous or asynchronously on request. More...
 
template<typename ValueType >
void clearDeviceBufferAsync (DeviceBuffer< ValueType > *buffer, size_t startingOffset, size_t numValues, const DeviceStream &deviceStream)
 Clears the device buffer asynchronously. More...
 
template<typename ValueType >
void initParamLookupTable (DeviceBuffer< ValueType > *deviceBuffer, DeviceTexture *, const ValueType *hostBuffer, int numValues, const DeviceContext &deviceContext, const DeviceStream &deviceStream)
 Create a texture object for an array of type ValueType. More...
 
template<typename ValueType >
void destroyParamLookupTable (DeviceBuffer< ValueType > *deviceBuffer, DeviceTexture *)
 Release the underlying device allocations. More...
 
template<typename ValueType >
ValueType * asMpiPointer (DeviceBuffer< ValueType > &buffer)
 

Function Documentation

template<typename ValueType >
void allocateDeviceBuffer ( DeviceBuffer< ValueType > *  buffer,
size_t  numValues,
const DeviceContext &  deviceContext 
)

Allocates a device-side buffer. It is currently a caller's responsibility to call it only on not-yet allocated buffers.

Template Parameters
ValueTypeRaw value type of the buffer.
Parameters
[in,out]bufferPointer to the device-side buffer.
[in]numValuesNumber of values to accommodate.
[in]deviceContextThe buffer's device context-to-be.
template<typename T >
static gmx_unused bool checkDeviceBuffer ( const DeviceBuffer< T > &  buffer,
int gmx_unused  requiredSize 
)
static

Check the validity of the device buffer.

Checks if the buffer is valid and if its allocation is big enough.

Parameters
[in]bufferDevice buffer to be checked.
[in]requiredSizeNumber of elements that the buffer will have to accommodate.
Returns
Whether the device buffer exists and has enough capacity.
template<typename ValueType >
void clearDeviceBufferAsync ( DeviceBuffer< ValueType > *  buffer,
size_t  startingOffset,
size_t  numValues,
const DeviceStream deviceStream 
)

Clears the device buffer asynchronously.

Template Parameters
ValueTypeRaw value type of the buffer.
Parameters
[in,out]bufferPointer to the device-side buffer.
[in]startingOffsetOffset (in values) at the device-side buffer to start clearing at.
[in]numValuesNumber of values to clear.
[in]deviceStreamGPU stream.
template<typename ValueType >
void copyBetweenDeviceBuffers ( DeviceBuffer< ValueType > *  destinationDeviceBuffer,
DeviceBuffer< ValueType > *  sourceDeviceBuffer,
size_t  numValues,
const DeviceStream deviceStream,
GpuApiCallBehavior  transferKind,
CommandEvent *gmx_unused  timingEvent 
)

Performs the device-to-device data copy, synchronous or asynchronously on request.

Template Parameters
ValueTypeRaw value type of the buffer.
template<typename ValueType >
void copyFromDeviceBuffer ( ValueType *  hostBuffer,
DeviceBuffer< ValueType > *  buffer,
size_t  startingOffset,
size_t  numValues,
const DeviceStream deviceStream,
GpuApiCallBehavior  transferKind,
CommandEvent *gmx_unused  timingEvent 
)

Performs the device-to-host data copy, synchronous or asynchronously on request.

Unlike in CUDA and OpenCL, synchronous call does not guarantee that all previously submitted operations are complete, only the ones that are required for buffer consistency.

Template Parameters
ValueTypeRaw value type of the buffer.
Parameters
[in,out]hostBufferPointer to the raw host-side memory, also typed ValueType
[in]bufferPointer to the device-side buffer.
[in]startingOffsetOffset (in values) at the device-side buffer to copy from.
[in]numValuesNumber of values to copy.
[in]deviceStreamGPU stream to perform asynchronous copy in.
[in]transferKindCopy type: synchronous or asynchronous.
[out]timingEventA pointer to the H2D copy timing event to be filled in. Ignored in SYCL.
template<typename ValueType >
void copyToDeviceBuffer ( DeviceBuffer< ValueType > *  buffer,
const ValueType *  hostBuffer,
size_t  startingOffset,
size_t  numValues,
const DeviceStream deviceStream,
GpuApiCallBehavior  transferKind,
CommandEvent *gmx_unused  timingEvent 
)

Performs the host-to-device data copy, synchronous or asynchronously on request.

Unlike in CUDA and OpenCL, synchronous call does not guarantee that all previously submitted operations are complete, only the ones that are required for buffer consistency.

Template Parameters
ValueTypeRaw value type of the buffer.
Parameters
[in,out]bufferPointer to the device-side buffer.
[in]hostBufferPointer to the raw host-side memory, also typed ValueType.
[in]startingOffsetOffset (in values) at the device-side buffer to copy into.
[in]numValuesNumber of values to copy.
[in]deviceStreamGPU stream to perform asynchronous copy in.
[in]transferKindCopy type: synchronous or asynchronous.
[out]timingEventA pointer to the H2D copy timing event to be filled in. Ignored in SYCL.
template<typename ValueType >
void destroyParamLookupTable ( DeviceBuffer< ValueType > *  deviceBuffer,
DeviceTexture  
)

Release the underlying device allocations.

Template Parameters
ValueTypeRaw data type.
Parameters
[in,out]deviceBufferDevice buffer to store data in.
template<typename ValueType >
void freeDeviceBuffer ( DeviceBuffer< ValueType > *  buffer)

Frees a device-side buffer. This does not reset separately stored size/capacity integers, as this is planned to be a destructor of DeviceBuffer as a proper class, and no calls on buffer should be made afterwards.

Parameters
[in]bufferPointer to the buffer to free.
template<typename ValueType >
void initParamLookupTable ( DeviceBuffer< ValueType > *  deviceBuffer,
DeviceTexture ,
const ValueType *  hostBuffer,
int  numValues,
const DeviceContext &  deviceContext,
const DeviceStream deviceStream 
)

Create a texture object for an array of type ValueType.

Creates the device buffer and copies read-only data for an array of type ValueType. Like OpenCL, does not really do anything with textures, simply creates a buffer and initializes it.

Template Parameters
ValueTypeRaw data type.
Parameters
[out]deviceBufferDevice buffer to store data in.
[in]hostBufferHost buffer to get date from.
[in]numValuesNumber of elements in the buffer.
[in]deviceContextDevice context for memory allocation.
[in]deviceStreamDevice stream for initialization.