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;