13         std::string full_cu_name = kernel_name + 
":{" + kernel_name + 
"_" + 
std::to_string(cu) + 
"}";
 
   20         for (
size_t i = 0; 
i < dataLen; 
i++) {
 
   47         cl_int 
err = CL_SUCCESS;
 
   56         for (
int i = 0; 
i < 1; ++
i) {
 
   67         if (
err != CL_SUCCESS) {
 
   68           return StatusCode::FAILURE;
 
   76         return StatusCode::SUCCESS;
 
   83         size = std::filesystem::file_size(filepath);
 
   90         std::ifstream file_in;
 
   91         std::string line_in = 
"";
 
   96         file_in.open(filepath);
 
   97         if (file_in.is_open()) {
 
   99                 std::getline (file_in, line_in);
 
  100                 data[
i] = std::stoul(line_in.c_str(), NULL, 16);
 
  103             ATH_MSG_INFO(
"ERROR! Unable to open data file: " + filepath);
 
  116         int n_inside_out_words = 4 * 1024;
 
  118         ATH_MSG_DEBUG(
"Pixel Clustering TV words = " << n_pixel_words << 
" (64b)");
 
  119         ATH_MSG_DEBUG(
"Pixel GHITZ TV words = " << n_pixel_ghitz_words << 
" (64b)");
 
  120         ATH_MSG_DEBUG(
"Pixel Sliced TV words = " << n_pixel_first_sliced_words << 
" (64b)");
 
  122         uint64_t pixel_cls_input_data[n_pixel_words];
 
  123         uint64_t pixel_ghitz_data[n_pixel_ghitz_words];
 
  124         uint64_t pixel_first_sliced_data[n_pixel_first_sliced_words];
 
  130         std::unique_lock 
lock(m_fpgaHandleMtx);
 
  133         size_t pixel_size_bytes = n_pixel_words * 
sizeof(
uint64_t);
 
  134         size_t pixel_ghitz_size_bytes = n_pixel_ghitz_words * 
sizeof(
uint64_t);
 
  135         size_t pixel_first_sliced_size_bytes = n_pixel_first_sliced_words * 
sizeof(
uint64_t);
 
  136         size_t inside_out_size_bytes = n_inside_out_words * 
sizeof(
uint64_t);
 
  139         m_pixelClusterL2GInputBufferList.push_back(cl::Buffer(
m_context, CL_MEM_READ_WRITE, pixel_size_bytes, NULL, &
err));
 
  141         m_pixelClusterL2GOutputBufferList.push_back(cl::Buffer(
m_context, CL_MEM_READ_WRITE, pixel_ghitz_size_bytes, NULL, &
err));
 
  143         m_pixelClusterL2GEDMOutputBufferList.push_back(cl::Buffer(
m_context, CL_MEM_READ_WRITE, pixel_ghitz_size_bytes, NULL, &
err));
 
  145         m_pixelFirstStageSlicingInputBufferList.push_back(cl::Buffer(
m_context, CL_MEM_READ_WRITE, pixel_ghitz_size_bytes, NULL, &
err));
 
  147         m_pixelFirstStageSlicingOutputBufferList.push_back(cl::Buffer(
m_context, CL_MEM_READ_WRITE, pixel_first_sliced_size_bytes, NULL, &
err));
 
  148         ATH_MSG_DEBUG(
"Allocating Inside PR Input Buffer in Global Memory");
 
  149         m_insideOutInputBufferList.push_back(cl::Buffer(
m_context, CL_MEM_READ_WRITE, pixel_first_sliced_size_bytes, NULL, &
err));
 
  150         ATH_MSG_DEBUG(
"Allocating Inside PR Output Buffer in Global Memory");
 
  151         m_insideOutOutputBufferList.push_back(cl::Buffer(
m_context, CL_MEM_READ_WRITE, inside_out_size_bytes, NULL, &
err));
 
  155         m_pixelClusterL2GKernels[0].setArg(0, m_pixelClusterL2GInputBufferList[0]);
 
  157         m_pixelClusterL2GKernels[0].setArg(1, m_pixelClusterL2GOutputBufferList[0]);
 
  159         m_pixelClusterL2GKernels[0].setArg(2, m_pixelClusterL2GEDMOutputBufferList[0]);
 
  162         m_pixelFirstStageSlicingInputKernels[0].setArg(0, m_pixelFirstStageSlicingInputBufferList[0]);
 
  164         m_pixelFirstStageSlicingInputKernels[0].setArg(1, n_pixel_ghitz_words);
 
  167         m_pixelFirstStageSlicingOutputKernels[0].setArg(0, m_pixelFirstStageSlicingOutputBufferList[0]);
 
  169         m_pixelFirstStageSlicingOutputKernels[0].setArg(1, n_pixel_first_sliced_words);
 
  171         ATH_MSG_DEBUG(
"Setting buffer for Input kernel run INSIDE OUT.");
 
  172         m_insideOutInputKernels[0].setArg(0, m_insideOutInputBufferList[0]);
 
  174         ATH_MSG_DEBUG(
"Setting buffer for Output kernel run INSIDE OUT.");
 
  175         m_insideOutOutputKernels[0].setArg(0, m_insideOutOutputBufferList[0]);
 
  179         ATH_MSG_DEBUG(
"Loading input data to pixel clustering kernel...");
 
  180         m_queue.enqueueWriteBuffer(m_pixelClusterL2GInputBufferList[0], CL_TRUE, 0, pixel_size_bytes, &pixel_cls_input_data, NULL, NULL);
 
  183         outputHexData(n_pixel_words, pixel_cls_input_data, 
"Pixel Clustering Input");
 
  187         m_queue.enqueueTask(m_pixelClusterL2GKernels[0]);
 
  192         uint64_t cls_out_data[n_pixel_ghitz_words];
 
  193         m_queue.enqueueReadBuffer(m_pixelClusterL2GOutputBufferList[0], CL_TRUE, 0, pixel_ghitz_size_bytes, &cls_out_data);
 
  195         outputHexData(n_pixel_ghitz_words, cls_out_data, 
"Real Pixel Clustering Output");
 
  199         uint64_t cls_out_edm_data[n_pixel_ghitz_words];
 
  200         m_queue.enqueueReadBuffer(m_pixelClusterL2GEDMOutputBufferList[0], CL_TRUE, 0, pixel_ghitz_size_bytes, &cls_out_edm_data);
 
  202         outputHexData(n_pixel_ghitz_words, cls_out_edm_data, 
"Real Pixel Clustering EDM Output");
 
  206         m_queue.enqueueWriteBuffer(m_pixelFirstStageSlicingInputBufferList[0], CL_TRUE, 0, pixel_ghitz_size_bytes, &pixel_ghitz_data, NULL, NULL);
 
  208         outputHexData(n_pixel_ghitz_words, pixel_ghitz_data, 
"Ideal Pixel Clustering Output");
 
  213         ATH_MSG_DEBUG(
"------------------------------------------------------------------------------------------------");
 
  217         m_queue.enqueueTask(m_pixelFirstStageSlicingInputKernels[0]);
 
  219         m_queue.enqueueTask(m_pixelFirstStageSlicingOutputKernels[0]);
 
  223         ATH_MSG_DEBUG(
"Synchronize output buffer data from device global memory");
 
  224         uint64_t se_out_data[n_pixel_first_sliced_words];
 
  225         m_queue.enqueueReadBuffer(m_pixelFirstStageSlicingOutputBufferList[0], CL_TRUE, 0, pixel_first_sliced_size_bytes, &se_out_data);
 
  227         outputHexData(n_pixel_first_sliced_words, se_out_data, 
"Slicing Engine Output");
 
  229         ATH_MSG_DEBUG(
"Write SE output to inside out input (cross DDR banks)");
 
  230         m_queue.enqueueWriteBuffer(m_insideOutInputBufferList[0], CL_TRUE, 0, pixel_first_sliced_size_bytes, &pixel_first_sliced_data, NULL, NULL);
 
  233         m_queue.enqueueTask(m_insideOutInputKernels[0]);
 
  236         m_queue.enqueueTask(m_insideOutOutputKernels[0]);
 
  241         ATH_MSG_DEBUG(
"------------------------------------------------------------------------------------------------");
 
  244         return StatusCode::SUCCESS;
 
  250       return StatusCode::SUCCESS;