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]);
184 for (
const auto& kernelName : kernelNames) {
185 const std::vector<std::shared_ptr<xrt::device>> devices =
193 m_kernels[kernelName] = std::make_unique<xrt::kernel>(
195 devices[0]->get_xclbin_uuid(),
197 xrt::kernel::cu_access_mode::exclusive
200 if (!
m_runs.contains(kernelName)) {
201 m_runs[kernelName] = std::make_unique<xrt::run>(*
m_kernels[kernelName]);
209 return StatusCode::SUCCESS;
215 std::size_t inputHandleIndex = 0;
222 unsigned long* inputMap = m_inputBuffers.at(inputHandleIndex).map<
unsigned long*>();
226 ATH_MSG_DEBUG(
"Copy " + inputDataStream.
name() +
" from storegate to host side map");
229 "Copy " + inputDataStream.
name() +
" from storegate to host side map",
233 for (std::size_t
index = 0;
index < inputDataStream->size();
index++) {
238 ATH_MSG_DEBUG(
"Copy " + inputDataStream.
name() +
" from host side map to device");
241 "Copy " + inputDataStream.
name() +
" from host side map to device",
245 m_inputBuffers.at(inputHandleIndex).sync(XCL_BO_SYNC_BO_TO_DEVICE);
252 std::size_t vSizeHandleIndex = 0;
258 const auto& [kernelName, storeGateKey, argumentIndex] =
m_vSizeInterfaces[vSizeHandleIndex];
259 ATH_MSG_DEBUG(
"Setting VSize: " << kernelName <<
", " << vSizeDataStream.
name() <<
", " << vSizeDataStream->size());
261 m_runs.at(kernelName)->set_arg(argumentIndex, vSizeDataStream->size());
270 for (
const auto& kernelName : kernelNames) {
272 m_runs.at(kernelName)->start();
275 for (
const auto& kernelName : kernelNames) {
277 m_runs.at(kernelName)->wait();
282 std::size_t outputHandleIndex = 0;
290 ATH_MSG_DEBUG(
"Copy " + outputDataStream.
name() +
" from device to host side map");
293 "Copy " + outputDataStream.
name() +
" from device to host side map",
297 m_outputBuffers.at(outputHandleIndex).sync(XCL_BO_SYNC_BO_FROM_DEVICE);
300 const unsigned long* outputMap = m_outputBuffers.at(outputHandleIndex).map<
unsigned long*>();
301 ATH_MSG_DEBUG(
"Copy " + outputDataStream.
name() +
" from host side map to storegate");
304 "Copy " + outputDataStream.
name() +
" from host side map to storegate",
308 for (std::size_t
index = 0;
index < outputDataStream->size();
index++) {
309 outputDataStream->at(
index) = outputMap[
index];
316 return StatusCode::SUCCESS;