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;
92 uint32_t* buffer_in1 = slot.
m_bo_in1->map<uint32_t*>();
93 uint32_t* buffer_in2 = slot.
m_bo_in2->map<uint32_t*>();
94 uint32_t* buffer_out = slot.
m_bo_out->map<uint32_t*>();
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;