20 return StatusCode::FAILURE;
24 return StatusCode::SUCCESS;
32 std::size_t slotIdx = 0;
40 const std::size_t device_idx = slotIdx %
m_devices.size();
41 ATH_MSG_DEBUG(
"Using device " << device_idx <<
" for slot " << slotIdx);
46 slot.m_kernel = std::make_unique<xrt::kernel>(
47 *slot.m_device, slot.m_device->get_xclbin_uuid(),
s_krnl_name);
49 std::exception_ptr
p = std::current_exception();
51 "Could not create XRT kernel '"
53 <<
"', check that correct XCLBIN is programmed by AthXRT service");
54 return StatusCode::FAILURE;
66 slot.m_bo_in1 = std::make_unique<xrt::bo>(
67 *slot.m_device, size_in_bytes, xrt::bo::flags::normal, bank_grp_in1);
68 slot.m_bo_in2 = std::make_unique<xrt::bo>(
69 *slot.m_device, size_in_bytes, xrt::bo::flags::normal, bank_grp_in2);
70 slot.m_bo_out = std::make_unique<xrt::bo>(
71 *slot.m_device, size_in_bytes, xrt::bo::flags::normal, bank_grp_out);
74 slot.m_run = std::make_unique<xrt::run>(*slot.m_kernel);
83 return StatusCode::SUCCESS;
103 slot.
m_bo_in1->sync(XCL_BO_SYNC_BO_TO_DEVICE);
104 slot.
m_bo_in2->sync(XCL_BO_SYNC_BO_TO_DEVICE);
111 slot.
m_bo_out->sync(XCL_BO_SYNC_BO_FROM_DEVICE);
116 uint32_t cpu_result = buffer_in1[
i] * buffer_in2[
i];
117 if (buffer_out[
i] != cpu_result) {
119 <<
i <<
": CPU result = " << cpu_result
120 <<
" Device result = " << buffer_out[
i]);
129 return StatusCode::FAILURE;
132 return StatusCode::SUCCESS;