Enqueues a kernel to execute using a single work-item. \see_opencl_ref{clEnqueueTask}
| 1426 | /// |
| 1427 | /// \see_opencl_ref{clEnqueueTask} |
| 1428 | event enqueue_task(const kernel &kernel, const wait_list &events = wait_list()) |
| 1429 | { |
| 1430 | BOOST_ASSERT(m_queue != 0); |
| 1431 | BOOST_ASSERT(kernel.get_context() == this->get_context()); |
| 1432 | |
| 1433 | event event_; |
| 1434 | |
| 1435 | // clEnqueueTask() was deprecated in OpenCL 2.0. In that case we |
| 1436 | // just forward to the equivalent clEnqueueNDRangeKernel() call. |
| 1437 | #ifdef CL_VERSION_2_0 |
| 1438 | size_t one = 1; |
| 1439 | cl_int ret = clEnqueueNDRangeKernel( |
| 1440 | m_queue, kernel, 1, 0, &one, &one, |
| 1441 | events.size(), events.get_event_ptr(), &event_.get() |
| 1442 | ); |
| 1443 | #else |
| 1444 | cl_int ret = clEnqueueTask( |
| 1445 | m_queue, kernel, events.size(), events.get_event_ptr(), &event_.get() |
| 1446 | ); |
| 1447 | #endif |
| 1448 | |
| 1449 | if(ret != CL_SUCCESS){ |
| 1450 | BOOST_THROW_EXCEPTION(opencl_error(ret)); |
| 1451 | } |
| 1452 | |
| 1453 | return event_; |
| 1454 | } |
| 1455 | |
| 1456 | /// Enqueues a function to execute on the host. |
| 1457 | event enqueue_native_kernel(void (BOOST_COMPUTE_CL_CALLBACK *user_func)(void *), |