9#ifndef EFTRACKING_FPGA_INTEGRATION_F110IntegrationAlg_H
10#define EFTRACKING_FPGA_INTEGRATION_F110IntegrationAlg_H
22#include "GaudiKernel/ServiceHandle.h"
23#include "GaudiKernel/IChronoSvc.h"
40 using IntegrationBase::IntegrationBase;
41 virtual StatusCode
initialize()
override final;
42 virtual StatusCode
execute(
const EventContext &ctx)
const override final;
43 virtual StatusCode
finalize()
override final;
46 std::vector<cl::Event>
getDepVector(std::vector<cl::Event> &endEvents,
size_t cu)
const;
59 Gaudi::Property<int>
m_FPGAThreads{
this,
"FPGAThreads", 1,
"number of FPGA threads to initialize"};
61 Gaudi::Property<std::string>
m_xclbin{
this,
"xclbin",
"",
"xclbin path and name"};
63 Gaudi::Property<std::string>
m_pixelEdmKernelName{
this,
"PixelEDMPrepKernelName",
"",
"Name of the FPGA kernel"};
65 Gaudi::Property<std::string>
m_stripEdmKernelName{
this,
"StripEDMPrepKernelName",
"",
"Name of the FPGA kernel"};
67 Gaudi::Property<std::string>
m_pixelClusterKernelName{
this,
"PixelClusterKernelName",
"",
"Name of the pixel clustering kernel"};
69 Gaudi::Property<std::string>
m_stripClusterKernelName{
this,
"StripClusterKernelName",
"",
"Name of the strip clustering kernel"};
71 Gaudi::Property<std::string>
m_stripL2GKernelName{
this,
"StripL2GKernelName",
"",
"Name of the strip L2G kernel"};
This is the class for the benchmark algorithm specific to the FPGA integration and output conversion.
std::vector< cl::Event > getDepVector(std::vector< cl::Event > &endEvents, size_t cu) const
Gaudi::Property< std::string > m_stripL2GKernelName
Name of the strip L2G kernelS.
SG::ReadHandleKey< std::vector< uint64_t > > m_FPGAPixelRDO
std::vector< cl::Event > m_stripClusterEndEvents ATLAS_THREAD_SAFE
SG::WriteHandleKey< std::vector< uint32_t > > m_FPGAPixelOutput
Gaudi::Property< std::string > m_pixelEdmKernelName
Name of the FPGA kernel.
std::atomic< cl_ulong > m_pixelInputTime
Time for pixel input buffer write.
virtual StatusCode initialize() override final
Detect the OpenCL devices and prepare OpenCL context.
std::atomic< cl_ulong > m_stripOutputTime
Time for strip output buffer read.
ServiceHandle< IChronoSvc > m_chronoSvc
Service for timing the algorithm.
Gaudi::Property< std::string > m_xclbin
Path and name of the xclbin file.
std::atomic< cl_ulong > m_pixelClusteringTime
Time for pixel clustering.
std::atomic< cl_ulong > m_kernelTime
Time for kernel execution.
Gaudi::Property< int > m_FPGAThreads
std::atomic< cl_ulong > m_stripInputTime
Time for strip input buffer write.
virtual StatusCode finalize() override final
SG::ReadHandleKey< int > m_FPGAStripRDOSize
cl::CommandQueue m_acc_queue
std::atomic< cl_ulong > m_pixelOutputTime
Time for pixel output buffer read.
SG::WriteHandleKey< std::vector< uint32_t > > m_FPGAStripOutput
Gaudi::Property< std::string > m_stripEdmKernelName
Name of the FPGA kernel.
std::mutex m_fpgaHandleMtx
std::atomic< cl_ulong > m_stripClusteringTime
Time for strip clustering.
Gaudi::Property< std::string > m_pixelClusterKernelName
Name of the pixel clustering kernel.
Gaudi::Property< std::string > m_stripClusterKernelName
Name of the strip clustering kernel.
std::atomic< ulonglong > m_numEvents
Number of events processed.
void getListofCUs(std::vector< std::string > &cuNames)
virtual StatusCode execute(const EventContext &ctx) const override final
Should be overriden by derived classes to perform meaningful work.
SG::ReadHandleKey< int > m_FPGAPixelRDOSize
std::atomic< cl_ulong > m_pixelEdmPrepTime
Time for pixel EDM preparation.
std::atomic< cl_ulong > m_stripL2GTime
Time for strip L2G.
std::atomic< cl_ulong > m_stripEdmPrepTime
Time for strip EDM preparation.
SG::ReadHandleKey< std::vector< uint64_t > > m_FPGAStripRDO
The base class for the EFTracking FPGA integration development.
Property holding a SG store/key/clid from which a ReadHandle is made.
Property holding a SG store/key/clid from which a WriteHandle is made.
The class for enconding RDO to FPGA format.