case GpuApiCallBehavior::Async:
cl_error = clEnqueueWriteBuffer(command_queue, d_dest, CL_FALSE, offset, bytes, h_src,
0, nullptr, copy_event);
- assert(cl_error == CL_SUCCESS);
- // TODO: handle errors
break;
case GpuApiCallBehavior::Sync:
cl_error = clEnqueueWriteBuffer(command_queue, d_dest, CL_TRUE, offset, bytes, h_src, 0,
nullptr, copy_event);
- assert(cl_error == CL_SUCCESS);
- // TODO: handle errors
break;
default: throw;
}
+ GMX_ASSERT(cl_error == CL_SUCCESS,
+ ("clEnqueueWriteBuffer failed: " + ocl_get_error_string(cl_error)).c_str());
return 0;
}
case GpuApiCallBehavior::Async:
cl_error = clEnqueueReadBuffer(command_queue, d_src, CL_FALSE, offset, bytes, h_dest, 0,
nullptr, copy_event);
- assert(cl_error == CL_SUCCESS);
- // TODO: handle errors
break;
case GpuApiCallBehavior::Sync:
cl_error = clEnqueueReadBuffer(command_queue, d_src, CL_TRUE, offset, bytes, h_dest, 0,
nullptr, copy_event);
- assert(cl_error == CL_SUCCESS);
- // TODO: handle errors
break;
default: throw;
}
+ GMX_ASSERT(cl_error == CL_SUCCESS,
+ ("clEnqueueWriteBuffer failed: " + ocl_get_error_string(cl_error)).c_str());
+
return 0;
}
cl_uint device_size_t_size_bits;
cl_uint host_size_t_size_bits;
- assert(dinfo);
+ GMX_ASSERT(dinfo, "Need a valid device info object");
size_t global_work_size[3];
GMX_ASSERT(work_dim <= 3, "Not supporting hyper-grids just yet");
cl_kernel* kernel_ptr;
cl_int cl_error;
- assert(eeltype < eelOclNR);
- assert(evdwtype < evdwOclNR);
+ GMX_ASSERT(eeltype < eelOclNR,
+ "The electrostatics type requested is not implemented in the OpenCL kernels.");
+ GMX_ASSERT(evdwtype < evdwOclNR,
+ "The VdW type requested is not implemented in the OpenCL kernels.");
if (bDoEne)
{
if (nullptr == kernel_ptr[0])
{
*kernel_ptr = clCreateKernel(nb->dev_rundata->program, kernel_name_to_run, &cl_error);
- assert(cl_error == CL_SUCCESS);
+ GMX_ASSERT(cl_error == CL_SUCCESS,
+ ("clCreateKernel failed: " + ocl_get_error_string(cl_error)).c_str());
}
- // TODO: handle errors
return *kernel_ptr;
}
/* Release event and reset it to 0. It is ok to release it as enqueuewaitforevents performs implicit retain for events. */
cl_error = clReleaseEvent(*ocl_event);
- assert(CL_SUCCESS == cl_error);
+ GMX_ASSERT(cl_error == CL_SUCCESS,
+ ("clReleaseEvent failed: " + ocl_get_error_string(cl_error)).c_str());
*ocl_event = nullptr;
}
{
cl_int gmx_used_in_debug cl_error = clEnqueueMarkerWithWaitList(
stream, 0, nullptr, &(nb->misc_ops_and_local_H2D_done));
- assert(CL_SUCCESS == cl_error);
+ GMX_ASSERT(cl_error == CL_SUCCESS,
+ ("clEnqueueMarkerWithWaitList failed: " + ocl_get_error_string(cl_error)).c_str());
/* Based on the v1.2 section 5.13 of the OpenCL spec, a flush is needed
* in the local stream in order to be able to sync with the above event
* from the non-local stream.
*/
cl_error = clFlush(stream);
- assert(CL_SUCCESS == cl_error);
+ GMX_ASSERT(cl_error == CL_SUCCESS,
+ ("clFlush failed: " + ocl_get_error_string(cl_error)).c_str());
}
else
{
/* kick off work */
cl_error = clFlush(stream);
- assert(CL_SUCCESS == cl_error);
+ GMX_ASSERT(cl_error == CL_SUCCESS, ("clFlush failed: " + ocl_get_error_string(cl_error)).c_str());
/* After the non-local D2H is launched the nonlocal_done event can be
recorded which signals that the local D2H can proceed. This event is not
if (iloc == InteractionLocality::NonLocal)
{
cl_error = clEnqueueMarkerWithWaitList(stream, 0, nullptr, &(nb->nonlocal_done));
- assert(CL_SUCCESS == cl_error);
+ GMX_ASSERT(cl_error == CL_SUCCESS,
+ ("clEnqueueMarkerWithWaitList failed: " + ocl_get_error_string(cl_error)).c_str());
nb->bNonLocalStreamActive = CL_TRUE;
}
/* OpenCL: By default, use analytical Ewald
* TODO: tabulated does not work, it needs fixing, see init_nbparam() in nbnxn_ocl_data_mgmt.cpp
*
- * TODO: decide if dev_info parameter should be added to recognize NVIDIA CC>=3.0 devices.
- *
*/
/* By default use analytical Ewald. */
bUseAnalyticalEwald = true;
cl_context context;
cl_int cl_error;
- assert(runtimeData != nullptr);
- assert(devInfo != nullptr);
+ GMX_ASSERT(runtimeData, "Need a valid runtimeData object");
+ GMX_ASSERT(devInfo, "Need a valid device info object");
platform_id = devInfo->ocl_gpu_id.ocl_platform_id;
device_id = devInfo->ocl_gpu_id.ocl_device_id;
cl_int cl_error;
cl_command_queue_properties queue_properties;
- assert(ic);
+ GMX_ASSERT(ic, "Need a valid interaction constants object");
auto nb = new NbnxmGpu;
snew(nb->atdat, 1);
/* kick off buffer clearing kernel to ensure concurrency with constraints/update */
cl_int gmx_unused cl_error;
cl_error = clFlush(nb->stream[InteractionLocality::Local]);
- assert(CL_SUCCESS == cl_error);
+ GMX_ASSERT(cl_error == CL_SUCCESS, ("clFlush failed: " + ocl_get_error_string(cl_error)).c_str());
}
//! This function is documented in the header file
{
cl_int gmx_unused cl_error;
- assert(nullptr != kernel_ptr);
+ GMX_ASSERT(kernel_ptr, "Need a valid kernel pointer");
if (*kernel_ptr)
{