Gromacs  2020.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Functions
oclutils.cpp File Reference
#include "gmxpre.h"
#include "oclutils.h"
#include <stdlib.h>
#include <cassert>
#include <cstdio>
#include <string>
#include "gromacs/gpu_utils/gpu_utils.h"
#include "gromacs/utility/fatalerror.h"
#include "gromacs/utility/smalloc.h"
+ Include dependency graph for oclutils.cpp:

Description

Define utility routines for OpenCL.

Author
Anca Hamuraru anca@.nosp@m.stre.nosp@m.amcom.nosp@m.puti.nosp@m.ng.eu

Functions

int ocl_copy_H2D (cl_mem d_dest, const void *h_src, size_t offset, size_t bytes, GpuApiCallBehavior transferKind, cl_command_queue command_queue, cl_event *copy_event)
 Launches synchronous or asynchronous host to device memory copy. More...
 
int ocl_copy_H2D_async (cl_mem d_dest, const void *h_src, size_t offset, size_t bytes, cl_command_queue command_queue, cl_event *copy_event)
 Launches asynchronous host to device memory copy. More...
 
int ocl_copy_H2D_sync (cl_mem d_dest, const void *h_src, size_t offset, size_t bytes, cl_command_queue command_queue)
 Launches synchronous host to device memory copy.
 
int ocl_copy_D2H (void *h_dest, cl_mem d_src, size_t offset, size_t bytes, GpuApiCallBehavior transferKind, cl_command_queue command_queue, cl_event *copy_event)
 Launches synchronous or asynchronous device to host memory copy. More...
 
int ocl_copy_D2H_async (void *h_dest, cl_mem d_src, size_t offset, size_t bytes, cl_command_queue command_queue, cl_event *copy_event)
 Launches asynchronous device to host memory copy. More...
 
void pmalloc (void **h_ptr, size_t nbytes)
 Allocates nbytes of host memory. Use ocl_free to free memory allocated with this function. More...
 
void pfree (void *h_ptr)
 Frees memory allocated with pmalloc. More...
 
std::string ocl_get_error_string (cl_int error)
 Convert error code to diagnostic string.
 

Function Documentation

int ocl_copy_D2H ( void *  h_dest,
cl_mem  d_src,
size_t  offset,
size_t  bytes,
GpuApiCallBehavior  transferKind,
cl_command_queue  command_queue,
cl_event *  copy_event 
)

Launches synchronous or asynchronous device to host memory copy.

If copy_event is not NULL, on return it will contain an event object identifying this particular device to host operation. The event can further be used to queue a wait for this operation or to query profiling information.

int ocl_copy_D2H_async ( void *  h_dest,
cl_mem  d_src,
size_t  offset,
size_t  bytes,
cl_command_queue  command_queue,
cl_event *  copy_event 
)

Launches asynchronous device to host memory copy.

If copy_event is not nullptr, on return it will contain an event object identifying this particular host to device operation. The event can further be used to queue a wait for this operation or to query profiling information.

int ocl_copy_H2D ( cl_mem  d_dest,
const void *  h_src,
size_t  offset,
size_t  bytes,
GpuApiCallBehavior  transferKind,
cl_command_queue  command_queue,
cl_event *  copy_event 
)

Launches synchronous or asynchronous host to device memory copy.

If copy_event is not NULL, on return it will contain an event object identifying this particular host to device operation. The event can further be used to queue a wait for this operation or to query profiling information.

int ocl_copy_H2D_async ( cl_mem  d_dest,
const void *  h_src,
size_t  offset,
size_t  bytes,
cl_command_queue  command_queue,
cl_event *  copy_event 
)

Launches asynchronous host to device memory copy.

If copy_event is not nullptr, on return it will contain an event object identifying this particular host to device operation. The event can further be used to queue a wait for this operation or to query profiling information.

void pfree ( void *  h_ptr)

Frees memory allocated with pmalloc.

Free host memory in malloc style.

Parameters
[in]h_ptrBuffer allocated with pmalloc that needs to be freed.
void pmalloc ( void **  h_ptr,
size_t  nbytes 
)

Allocates nbytes of host memory. Use ocl_free to free memory allocated with this function.

Allocate host memory in malloc style.

Todo:
This function should allocate page-locked memory to help reduce D2H and H2D transfer times, similar with pmalloc from pmalloc_cuda.cu.
Parameters
[in,out]h_ptrPointer where to store the address of the newly allocated buffer.
[in]nbytesSize in bytes of the buffer to be allocated.