10 const std::string&
name,
11 ISvcLocator* pSvcLocator
34 const std::vector<std::shared_ptr<xrt::device>> devices =
40 m_kernels[kernelName] = std::make_unique<xrt::kernel>(
42 (devices[0])->get_xclbin_uuid(),
44 xrt::kernel::cu_access_mode::exclusive
49 m_inputBuffers.emplace_back(
52 xrt::bo::flags::normal,
53 m_kernels[kernelName]->group_id(argumentIndex)
56 if (!
m_runs.contains(kernelName)) {
57 m_runs[kernelName] = std::make_unique<xrt::run>(*
m_kernels[kernelName]);
61 m_runs[kernelName]->set_arg(argumentIndex, m_inputBuffers.back());
68 " to get input size from " <<
74 const std::vector<std::shared_ptr<xrt::device>> devices =
80 m_kernels[kernelName] = std::make_unique<xrt::kernel>(
82 (devices[0])->get_xclbin_uuid(),
84 xrt::kernel::cu_access_mode::exclusive
90 if (!
m_runs.contains(kernelName)) {
91 m_runs[kernelName] = std::make_unique<xrt::run>(*
m_kernels[kernelName]);
107 const std::vector<std::shared_ptr<xrt::device>> devices =
113 m_kernels[kernelName] = std::make_unique<xrt::kernel>(
115 devices[0]->get_xclbin_uuid(),
117 xrt::kernel::cu_access_mode::exclusive
121 m_outputBuffers.emplace_back(
124 xrt::bo::flags::normal,
125 m_kernels[kernelName]->group_id(argumentIndex)
128 if (!
m_runs.contains(kernelName)) {
129 m_runs[kernelName] = std::make_unique<xrt::run>(*
m_kernels[kernelName]);
133 m_runs[kernelName]->set_arg(argumentIndex, m_outputBuffers.back());
136 for (
const auto& [kernelName, argumentIndex, sourceKernelName, sourceArgumentIndex] :
m_sharedInterfaces) {
138 "Setting up shared buffer between " <<
148 const std::vector<std::shared_ptr<xrt::device>> devices =
154 m_kernels[kernelName] = std::make_unique<xrt::kernel>(
156 devices[0]->get_xclbin_uuid(),
158 xrt::kernel::cu_access_mode::exclusive
162 if (!
m_runs.contains(kernelName)) {
163 m_runs[kernelName] = std::make_unique<xrt::run>(*
m_kernels[kernelName]);
168 std::size_t
index = 0;
169 for (
const auto& [outputKernelName, outputStoreGateKey, outputArgumentIndex] :
m_outputInterfaces) {
171 outputKernelName == sourceKernelName &&
172 outputArgumentIndex == sourceArgumentIndex
174 m_runs[kernelName]->set_arg(argumentIndex, m_outputBuffers[
index]);
183 return StatusCode::SUCCESS;
189 std::size_t inputHandleIndex = 0;
196 unsigned long* inputMap = m_inputBuffers.at(inputHandleIndex).map<
unsigned long*>();
219 m_inputBuffers.at(inputHandleIndex).sync(XCL_BO_SYNC_BO_TO_DEVICE);
226 std::size_t vSizeHandleIndex = 0;
232 const auto& [kernelName, storeGateKey, argumentIndex] =
m_vSizeInterfaces[vSizeHandleIndex];
233 ATH_MSG_DEBUG(
"Setting VSize: " << kernelName <<
", " << vSizeDataStream.
name() <<
", " << vSizeDataStream->size());
235 m_runs.at(kernelName)->set_arg(argumentIndex, vSizeDataStream->size());
244 for (
const auto& kernelName : kernelNames) {
246 m_runs.at(kernelName)->start();
249 for (
const auto& kernelName : kernelNames) {
251 m_runs.at(kernelName)->wait();
256 std::size_t outputHandleIndex = 0;
271 m_outputBuffers.at(outputHandleIndex).sync(XCL_BO_SYNC_BO_FROM_DEVICE);
274 const unsigned long* outputMap = m_outputBuffers.at(outputHandleIndex).map<
unsigned long*>();
290 return StatusCode::SUCCESS;