43 return StatusCode::SUCCESS;
65 uint64_t *stripClusters = stripOutput.data();
66 uint64_t *pixelClusters = pixelOutput.data();
68 unsigned int numStripClusters = stripClusters[0];
71 unsigned int numPixelClusters = pixelClusters[0];
74 std::unique_ptr<EFTrackingTransient::Metadata>
metadata =
75 std::make_unique<EFTrackingTransient::Metadata>();
77 metadata->numOfStripClusters = numStripClusters;
78 metadata->scRdoIndexSize = numStripClusters;
79 metadata->numOfPixelClusters = numPixelClusters;
80 metadata->pcRdoIndexSize = numPixelClusters;
93 for (
unsigned int i = 0;
i < numStripClusters;
i++)
147 for (
unsigned int i = 0;
i < numStripClusters;
i++)
165 for (
unsigned int i = 0;
i < numPixelClusters;
i++)
253 for (
unsigned int i = 0;
i < numPixelClusters;
i++)
275 return StatusCode::SUCCESS;
284 if (!scContainerHandle.
isValid())
287 return StatusCode::FAILURE;
291 if (!pcContainerHandle.
isValid())
294 return StatusCode::FAILURE;
298 std::vector<uint64_t> encodedStripClusters;
299 std::vector<uint64_t> encodedPixelClusters;
310 kernel.setArg<cl::Buffer>(0, inputPixelBuffer);
311 kernel.setArg<cl::Buffer>(1, inputStripBuffer);
312 kernel.setArg<cl::Buffer>(2, outputPixelBuffer);
313 kernel.setArg<cl::Buffer>(3, outputStripBuffer);
317 acc_queue.enqueueWriteBuffer(inputPixelBuffer, CL_FALSE, 0,
sizeof(
uint64_t) * encodedPixelClusters.size(), encodedPixelClusters.data(), NULL, NULL);
318 acc_queue.enqueueWriteBuffer(inputStripBuffer, CL_FALSE, 0,
sizeof(
uint64_t) * encodedStripClusters.size(), encodedStripClusters.data(), NULL, NULL);
324 acc_queue.enqueueTask(kernel);
331 acc_queue.enqueueReadBuffer(outputPixelBuffer, CL_FALSE, 0,
sizeof(
uint64_t) * pixelChainOutput.size(), pixelChainOutput.data(), NULL, NULL);
332 acc_queue.enqueueReadBuffer(outputStripBuffer, CL_FALSE, 0,
sizeof(
uint64_t) * stripChainOutput.size(), stripChainOutput.data(), NULL, NULL);
336 return StatusCode::SUCCESS;
349 std::vector<uint64_t> encodedPixelRDO;
350 std::vector<uint64_t> encodedStripRDO;
356 for (
unsigned int i = 0;
i < encodedPixelRDO.size();
i++)
358 ATH_MSG_DEBUG(
"Pixel RDO[" <<
i <<
"]: " << std::hex << encodedPixelRDO[
i] << std::dec);
360 for (
unsigned int i = 0;
i < encodedStripRDO.size();
i++)
362 ATH_MSG_DEBUG(
"Strip RDO[" <<
i <<
"]: " << std::hex << encodedStripRDO[
i] << std::dec);
367 cl::Buffer pixelClusterInputBuffer(
m_context, CL_MEM_READ_ONLY,
sizeof(
uint64_t) * encodedPixelRDO.size(), NULL, &
err);
368 cl::Buffer stripClusterInputBuffer(
m_context, CL_MEM_READ_ONLY,
sizeof(
uint64_t) * encodedStripRDO.size(), NULL, &
err);
369 cl::Buffer pixelClusterOutputBuffer(
m_context, CL_MEM_READ_WRITE,
sizeof(
uint64_t) * encodedPixelRDO.size(), NULL, &
err);
370 cl::Buffer stripClusterOutputBuffer(
m_context, CL_MEM_READ_WRITE,
sizeof(
uint64_t) * encodedStripRDO.size(), NULL, &
err);
386 pixelClusteringKernel.setArg<cl::Buffer>(0, pixelClusterInputBuffer);
387 pixelClusteringKernel.setArg<cl::Buffer>(1, pixelClusterOutputBuffer);
388 pixelClusteringKernel.setArg<cl::Buffer>(2, pixelClusterEDMOutputBuffer);
391 stripClusteringKernel.setArg<cl::Buffer>(0, stripClusterInputBuffer);
392 stripClusteringKernel.setArg<cl::Buffer>(1, stripClusterOutputBuffer);
393 stripClusteringKernel.setArg<cl::Buffer>(2, stripClusterEDMOutputBuffer);
394 stripClusteringKernel.setArg<
unsigned int>(3, encodedStripRDO.size());
398 pixelL2GKernel.setArg<cl::Buffer>(0, pixelClusterOutputBuffer);
399 pixelL2GKernel.setArg<cl::Buffer>(1, pixelClusterEDMOutputBuffer);
400 pixelL2GKernel.setArg<cl::Buffer>(2, pixelL2GOutputBuffer);
401 pixelL2GKernel.setArg<cl::Buffer>(3, pixelL2GEDMOutputBuffer);
404 stripL2GKernel.setArg<cl::Buffer>(0, stripClusterOutputBuffer);
405 stripL2GKernel.setArg<cl::Buffer>(1, stripClusterEDMOutputBuffer);
406 stripL2GKernel.setArg<cl::Buffer>(2, stripL2GOutputBuffer);
407 stripL2GKernel.setArg<cl::Buffer>(3, stripL2GEDMOutputBuffer);
411 edmPrepKernel.setArg<cl::Buffer>(0, pixelL2GEDMOutputBuffer);
412 edmPrepKernel.setArg<cl::Buffer>(1, stripL2GEDMOutputBuffer);
413 edmPrepKernel.setArg<cl::Buffer>(2, edmPixelOutputBuffer);
414 edmPrepKernel.setArg<cl::Buffer>(3, edmStripOutputBuffer);
420 acc_queue.enqueueWriteBuffer(pixelClusterInputBuffer, CL_FALSE, 0,
sizeof(
uint64_t) * encodedPixelRDO.size(), encodedPixelRDO.data(), NULL, &cl_evt_write_pixel_input);
421 acc_queue.enqueueWriteBuffer(stripClusterInputBuffer, CL_FALSE, 0,
sizeof(
uint64_t) * encodedStripRDO.size(), encodedStripRDO.data(), NULL, &cl_evt_write_strip_input);
422 std::vector<cl::Event> cl_evt_vec_pixel_input{cl_evt_write_pixel_input};
423 std::vector<cl::Event> cl_evt_vec_strip_input{cl_evt_write_strip_input};
435 acc_queue.enqueueTask(pixelClusteringKernel, &cl_evt_vec_pixel_input, &cl_evt_pixel_clustering);
436 acc_queue.enqueueTask(stripClusteringKernel, &cl_evt_vec_strip_input, &cl_evt_strip_clustering);
438 std::vector<cl::Event> cl_evt_vec_pixel_clustering{cl_evt_pixel_clustering};
439 std::vector<cl::Event> cl_evt_vec_strip_clustering{cl_evt_strip_clustering};
440 acc_queue.enqueueTask(pixelL2GKernel, &cl_evt_vec_pixel_clustering, &cl_evt_pixel_l2g);
441 acc_queue.enqueueTask(stripL2GKernel, &cl_evt_vec_strip_clustering, &cl_evt_strip_l2g);
442 std::vector<cl::Event> cl_evt_vec_l2g{cl_evt_pixel_l2g, cl_evt_strip_l2g};
444 acc_queue.enqueueTask(edmPrepKernel, &cl_evt_vec_l2g, &cl_evt_edm_prep);
452 acc_queue.enqueueReadBuffer(edmPixelOutputBuffer, CL_FALSE, 0,
sizeof(
uint64_t) * pixelChainOutput.size(), pixelChainOutput.data(), NULL, &cl_evt_pixel_cluster_output);
453 acc_queue.enqueueReadBuffer(edmStripOutputBuffer, CL_FALSE, 0,
sizeof(
uint64_t) * stripChainOutput.size(), stripChainOutput.data(), NULL, &cl_evt_strip_cluster_output);
458 cl_ulong pixel_input_start = cl_evt_write_pixel_input.getProfilingInfo<CL_PROFILING_COMMAND_START>();
459 cl_ulong pixel_input_end = cl_evt_write_pixel_input.getProfilingInfo<CL_PROFILING_COMMAND_END>();
460 cl_ulong pixel_input_time = pixel_input_end - pixel_input_start;
462 ATH_MSG_DEBUG(
"Pixel input buffer write time: " << pixel_input_time / 1e6 <<
" ms");
465 cl_ulong strip_input_start = cl_evt_write_strip_input.getProfilingInfo<CL_PROFILING_COMMAND_START>();
466 cl_ulong strip_input_end = cl_evt_write_strip_input.getProfilingInfo<CL_PROFILING_COMMAND_END>();
467 cl_ulong strip_input_time = strip_input_end - strip_input_start;
469 ATH_MSG_DEBUG(
"Strip input buffer write time: " << strip_input_time / 1e6 <<
" ms");
472 cl_ulong pixel_clustering_start = cl_evt_pixel_clustering.getProfilingInfo<CL_PROFILING_COMMAND_START>();
473 cl_ulong pixel_clustering_end = cl_evt_pixel_clustering.getProfilingInfo<CL_PROFILING_COMMAND_END>();
474 cl_ulong pixel_clustering_time = pixel_clustering_end - pixel_clustering_start;
476 ATH_MSG_DEBUG(
"Pixel clustering time: " << pixel_clustering_time / 1e6 <<
" ms");
479 cl_ulong strip_clustering_start = cl_evt_strip_clustering.getProfilingInfo<CL_PROFILING_COMMAND_START>();
480 cl_ulong strip_clustering_end = cl_evt_strip_clustering.getProfilingInfo<CL_PROFILING_COMMAND_END>();
481 cl_ulong strip_clustering_time = strip_clustering_end - strip_clustering_start;
483 ATH_MSG_DEBUG(
"Strip clustering time: " << strip_clustering_time / 1e6 <<
" ms");
486 cl_ulong pixel_l2g_start = cl_evt_pixel_l2g.getProfilingInfo<CL_PROFILING_COMMAND_START>();
487 cl_ulong pixel_l2g_end = cl_evt_pixel_l2g.getProfilingInfo<CL_PROFILING_COMMAND_END>();
488 cl_ulong pixel_l2g_time = pixel_l2g_end - pixel_l2g_start;
490 ATH_MSG_DEBUG(
"Pixel L2G time: " << pixel_l2g_time / 1e6 <<
" ms");
493 cl_ulong strip_l2g_start = cl_evt_strip_l2g.getProfilingInfo<CL_PROFILING_COMMAND_START>();
494 cl_ulong strip_l2g_end = cl_evt_strip_l2g.getProfilingInfo<CL_PROFILING_COMMAND_END>();
495 cl_ulong strip_l2g_time = strip_l2g_end - strip_l2g_start;
497 ATH_MSG_DEBUG(
"Strip L2G time: " << strip_l2g_time / 1e6 <<
" ms");
500 cl_ulong edm_prep_start = cl_evt_edm_prep.getProfilingInfo<CL_PROFILING_COMMAND_START>();
501 cl_ulong edm_prep_end = cl_evt_edm_prep.getProfilingInfo<CL_PROFILING_COMMAND_END>();
502 cl_ulong edm_prep_time = edm_prep_end - edm_prep_start;
504 ATH_MSG_DEBUG(
"EDMPrep time: " << edm_prep_time / 1e6 <<
" ms");
507 cl_ulong kernel_start = cl_evt_pixel_clustering.getProfilingInfo<CL_PROFILING_COMMAND_QUEUED>();
508 cl_ulong kernel_end = cl_evt_edm_prep.getProfilingInfo<CL_PROFILING_COMMAND_END>();
509 cl_ulong kernel_time = kernel_end - kernel_start;
511 ATH_MSG_DEBUG(
"Kernel execution time: " << kernel_time / 1e6 <<
" ms");
514 cl_ulong pixel_output_start = cl_evt_pixel_cluster_output.getProfilingInfo<CL_PROFILING_COMMAND_START>();
515 cl_ulong pixel_output_end = cl_evt_pixel_cluster_output.getProfilingInfo<CL_PROFILING_COMMAND_END>();
516 cl_ulong pixel_output_time = pixel_output_end - pixel_output_start;
518 ATH_MSG_DEBUG(
"Pixel output buffer read time: " << pixel_output_time / 1e6 <<
" ms");
521 cl_ulong strip_output_start = cl_evt_strip_cluster_output.getProfilingInfo<CL_PROFILING_COMMAND_START>();
522 cl_ulong strip_output_end = cl_evt_strip_cluster_output.getProfilingInfo<CL_PROFILING_COMMAND_END>();
523 cl_ulong strip_output_time = strip_output_end - strip_output_start;
525 ATH_MSG_DEBUG(
"Strip output buffer read time: " << strip_output_time / 1e6 <<
" ms");
527 return StatusCode::SUCCESS;
548 return StatusCode::SUCCESS;