21 return StatusCode::FAILURE;
24 return StatusCode::SUCCESS;
31 cl_int
err = CL_SUCCESS;
34 std::size_t slotIdx = 0;
41 <<
"), using the first one");
51 "Could not create OpenCL kernel '"
53 <<
"', check that correct XCLBIN is programmed by AthXRT service");
54 return StatusCode::FAILURE;
58 slot.m_queue = std::make_unique<cl::CommandQueue>(
59 *slot.m_context, slot.m_context->getInfo<CL_CONTEXT_DEVICES>()[0], 0,
67 slot.m_dev_buf_in1 = std::make_unique<cl::Buffer>(
68 *slot.m_context, CL_MEM_READ_ONLY | CL_MEM_ALLOC_HOST_PTR,
69 size_in_bytes,
nullptr, &
err);
72 slot.m_dev_buf_in2 = std::make_unique<cl::Buffer>(
73 *slot.m_context, CL_MEM_READ_ONLY | CL_MEM_ALLOC_HOST_PTR,
74 size_in_bytes,
nullptr, &
err);
77 slot.m_dev_buf_out = std::make_unique<cl::Buffer>(
78 *slot.m_context, CL_MEM_WRITE_ONLY | CL_MEM_ALLOC_HOST_PTR,
79 size_in_bytes,
nullptr, &
err);
82 slot.m_host_buf_in1 = (
uint32_t*)slot.m_queue->enqueueMapBuffer(
83 *slot.m_dev_buf_in1, CL_TRUE, CL_MAP_WRITE, 0, size_in_bytes,
nullptr,
87 slot.m_host_buf_in2 = (
uint32_t*)slot.m_queue->enqueueMapBuffer(
88 *slot.m_dev_buf_in2, CL_TRUE, CL_MAP_WRITE, 0, size_in_bytes,
nullptr,
92 slot.m_host_buf_out = (
uint32_t*)slot.m_queue->enqueueMapBuffer(
93 *slot.m_dev_buf_out, CL_TRUE, CL_MAP_READ, 0, size_in_bytes,
nullptr,
110 return StatusCode::SUCCESS;
115 ATH_MSG_INFO(
"stop_worker(): Cleaning OCL environment");
118 ATH_CHECK(slot.m_queue->enqueueUnmapMemObject(
119 *slot.m_dev_buf_in1, slot.m_host_buf_in1) == CL_SUCCESS);
120 ATH_CHECK(slot.m_queue->enqueueUnmapMemObject(
121 *slot.m_dev_buf_in2, slot.m_host_buf_in2) == CL_SUCCESS);
122 ATH_CHECK(slot.m_queue->enqueueUnmapMemObject(
123 *slot.m_dev_buf_out, slot.m_host_buf_out) == CL_SUCCESS);
124 ATH_CHECK(slot.m_queue->finish() == CL_SUCCESS);
127 return StatusCode::SUCCESS;
145 nullptr) == CL_SUCCESS);
154 std::vector<cl::Memory> mems_out_vector = {*slot.
m_dev_buf_out};
156 mems_out_vector, CL_MIGRATE_MEM_OBJECT_HOST,
nullptr,
157 nullptr) == CL_SUCCESS);
166 <<
i <<
": CPU result = " << cpu_result
173 ATH_MSG_INFO(
"OpenCL vector multiplication test PASSED!");
176 return StatusCode::FAILURE;
179 return StatusCode::SUCCESS;