6 #include "GaudiKernel/ConcurrencyFlags.h"
24 return StatusCode::FAILURE;
27 return StatusCode::SUCCESS;
34 cl_int
err = CL_SUCCESS;
37 std::size_t slotIdx = 0;
44 <<
"), using the first one");
54 "Could not create OpenCL kernel '"
56 <<
"', check that correct XCLBIN is programmed by AthXRT service");
57 return StatusCode::FAILURE;
61 slot.m_queue = std::make_unique<cl::CommandQueue>(
62 *slot.m_context, slot.m_context->getInfo<CL_CONTEXT_DEVICES>()[0], 0,
70 slot.m_dev_buf_in1 = std::make_unique<cl::Buffer>(
71 *slot.m_context, CL_MEM_READ_ONLY | CL_MEM_ALLOC_HOST_PTR,
72 size_in_bytes,
nullptr, &
err);
75 slot.m_dev_buf_in2 = std::make_unique<cl::Buffer>(
76 *slot.m_context, CL_MEM_READ_ONLY | CL_MEM_ALLOC_HOST_PTR,
77 size_in_bytes,
nullptr, &
err);
80 slot.m_dev_buf_out = std::make_unique<cl::Buffer>(
81 *slot.m_context, CL_MEM_WRITE_ONLY | CL_MEM_ALLOC_HOST_PTR,
82 size_in_bytes,
nullptr, &
err);
85 slot.m_host_buf_in1 = (
uint32_t*)slot.m_queue->enqueueMapBuffer(
86 *slot.m_dev_buf_in1, CL_TRUE, CL_MAP_WRITE, 0, size_in_bytes,
nullptr,
90 slot.m_host_buf_in2 = (
uint32_t*)slot.m_queue->enqueueMapBuffer(
91 *slot.m_dev_buf_in2, CL_TRUE, CL_MAP_WRITE, 0, size_in_bytes,
nullptr,
95 slot.m_host_buf_out = (
uint32_t*)slot.m_queue->enqueueMapBuffer(
96 *slot.m_dev_buf_out, CL_TRUE, CL_MAP_READ, 0, size_in_bytes,
nullptr,
113 return StatusCode::SUCCESS;
118 ATH_MSG_INFO(
"stop_worker(): Cleaning OCL environment");
121 ATH_CHECK(slot.m_queue->enqueueUnmapMemObject(
122 *slot.m_dev_buf_in1, slot.m_host_buf_in1) == CL_SUCCESS);
123 ATH_CHECK(slot.m_queue->enqueueUnmapMemObject(
124 *slot.m_dev_buf_in2, slot.m_host_buf_in2) == CL_SUCCESS);
125 ATH_CHECK(slot.m_queue->enqueueUnmapMemObject(
126 *slot.m_dev_buf_out, slot.m_host_buf_out) == CL_SUCCESS);
127 ATH_CHECK(slot.m_queue->finish() == CL_SUCCESS);
130 return StatusCode::SUCCESS;
148 nullptr) == CL_SUCCESS);
157 std::vector<cl::Memory> mems_out_vector = {*slot.
m_dev_buf_out};
159 mems_out_vector, CL_MIGRATE_MEM_OBJECT_HOST,
nullptr,
160 nullptr) == CL_SUCCESS);
169 <<
i <<
": CPU result = " << cpu_result
179 return StatusCode::FAILURE;
182 return StatusCode::SUCCESS;