24 for (
int i = 0;
i < 6;
i++) {
41 for (
int i = 0;
i < 6;
i++) {
76 std::vector<float>
const& y,
77 std::vector<float>
const& z,
78 std::vector<unsigned int>
const&
detId,
79 std::vector<unsigned int>
const& idxInNtuple) {
81 unsigned int nHits =
x.size();
85 std::array<int, 2>
const hits_sizes{{
static_cast<int>(
nHits), static_cast<int>(
nModules_)}};
91 auto hitRangesLower_view =
93 auto hitRangesUpper_view =
95 auto hitRangesnLower_view =
97 auto hitRangesnUpper_view =
99 alpaka::memset(
queue_, hitRanges_view, 0xff);
100 alpaka::memset(
queue_, hitRangesLower_view, 0xff);
101 alpaka::memset(
queue_, hitRangesUpper_view, 0xff);
102 alpaka::memset(
queue_, hitRangesnLower_view, 0xff);
103 alpaka::memset(
queue_, hitRangesnUpper_view, 0xff);
126 Vec3D const threadsPerBlock1{1, 1, 256};
130 alpaka::exec<Acc3D>(
queue_,
143 Vec3D const threadsPerBlock2{1, 1, 256};
147 alpaka::exec<Acc3D>(
queue_,
148 module_ranges_workdiv,
156 std::vector<unsigned int>
const& hitIndices1,
157 std::vector<unsigned int>
const& hitIndices2,
158 std::vector<unsigned int>
const& hitIndices3,
159 std::vector<float>
const& dPhiChange,
160 std::vector<float>
const& ptIn,
161 std::vector<float>
const&
ptErr,
162 std::vector<float>
const&
px,
163 std::vector<float>
const&
py,
164 std::vector<float>
const& pz,
165 std::vector<float>
const&
eta,
166 std::vector<float>
const& etaErr,
167 std::vector<float>
const&
phi,
168 std::vector<int>
const&
charge,
169 std::vector<unsigned int>
const& seedIdx,
170 std::vector<int>
const& superbin,
171 std::vector<PixelType>
const& pixelType,
172 std::vector<char>
const& isQuad) {
173 unsigned int size = ptIn.size();
177 "*********************************************************\n" 178 "* Warning: Pixel line segments will be truncated. *\n" 179 "* You need to increase n_max_pixel_segments_per_module. *\n" 180 "*********************************************************\n");
184 unsigned int mdSize = 2 * size;
189 auto rangesOccupancy =
rangesDC_->view();
190 auto dst_view_miniDoubletModuleOccupancy =
194 auto pixelMaxMDs_buf_h = cms::alpakatools::make_host_buffer<int>(
queue_);
197 alpaka::memcpy(
queue_, dst_view_miniDoubletModuleOccupancy, pixelMaxMDs_buf_h);
199 WorkDiv1D const createMDArrayRangesGPU_workDiv = createWorkDiv<Vec1D>({1}, {1024}, {1});
201 alpaka::exec<Acc1D>(
queue_,
202 createMDArrayRangesGPU_workDiv,
207 auto nTotalMDs_buf_h = cms::alpakatools::make_host_buffer<unsigned int>(
queue_);
209 alpaka::memcpy(
queue_, nTotalMDs_buf_h, nTotalMDs_buf_d);
213 unsigned int nTotalMDs = *nTotalMDs_buf_h.data();
215 std::array<int, 2>
const mds_sizes{{
static_cast<int>(nTotalMDs), static_cast<int>(
nLowerModules_ + 1)}};
220 auto totOccupancyMDs_view =
222 alpaka::memset(
queue_, nMDs_view, 0u);
223 alpaka::memset(
queue_, totOccupancyMDs_view, 0u);
229 WorkDiv1D const createSegmentArrayRanges_workDiv = createWorkDiv<Vec1D>({1}, {1024}, {1});
231 alpaka::exec<Acc1D>(
queue_,
232 createSegmentArrayRanges_workDiv,
238 auto rangesOccupancy =
rangesDC_->view();
241 alpaka::memcpy(
queue_, nTotalSegments_view_h, nTotalSegments_view_d);
246 std::array<int, 3>
const segments_sizes{{
static_cast<int>(
nTotalSegments_),
252 auto nSegments_view =
255 queue_, segmentsOccupancy.totOccupancySegments(), segmentsOccupancy.metadata().size());
256 alpaka::memset(
queue_, nSegments_view, 0u);
257 alpaka::memset(
queue_, totOccupancySegments_view, 0u);
260 auto hitIndices0_dev = cms::alpakatools::make_device_buffer<unsigned int[]>(
queue_, size);
261 auto hitIndices1_dev = cms::alpakatools::make_device_buffer<unsigned int[]>(
queue_, size);
262 auto hitIndices2_dev = cms::alpakatools::make_device_buffer<unsigned int[]>(
queue_, size);
263 auto hitIndices3_dev = cms::alpakatools::make_device_buffer<unsigned int[]>(
queue_, size);
264 auto dPhiChange_dev = cms::alpakatools::make_device_buffer<float[]>(
queue_, size);
266 alpaka::memcpy(
queue_, hitIndices0_dev, hitIndices0, size);
267 alpaka::memcpy(
queue_, hitIndices1_dev, hitIndices1, size);
268 alpaka::memcpy(
queue_, hitIndices2_dev, hitIndices2, size);
269 alpaka::memcpy(
queue_, hitIndices3_dev, hitIndices3, size);
270 alpaka::memcpy(
queue_, dPhiChange_dev, dPhiChange, size);
293 alpaka::memcpy(
queue_, dst_view_segments, src_view_size);
295 auto dst_view_totOccupancySegments =
297 alpaka::memcpy(
queue_, dst_view_totOccupancySegments, src_view_size);
301 alpaka::memcpy(
queue_, dst_view_nMDs, src_view_mdSize);
303 auto dst_view_totOccupancyMDs =
305 alpaka::memcpy(
queue_, dst_view_totOccupancyMDs, src_view_mdSize);
309 Vec3D const threadsPerBlock{1, 1, 256};
313 alpaka::exec<Acc3D>(
queue_,
314 addPixelSegmentToEvent_workdiv,
322 hitIndices0_dev.data(),
323 hitIndices1_dev.data(),
324 hitIndices2_dev.data(),
325 hitIndices3_dev.data(),
326 dPhiChange_dev.data(),
333 auto rangesOccupancy =
rangesDC_->view();
334 auto dst_view_miniDoubletModuleOccupancy =
338 auto pixelMaxMDs_buf_h = cms::alpakatools::make_host_buffer<int>(
queue_);
341 alpaka::memcpy(
queue_, dst_view_miniDoubletModuleOccupancy, pixelMaxMDs_buf_h);
343 WorkDiv1D const createMDArrayRangesGPU_workDiv = createWorkDiv<Vec1D>({1}, {1024}, {1});
345 alpaka::exec<Acc1D>(
queue_,
346 createMDArrayRangesGPU_workDiv,
351 auto nTotalMDs_buf_h = cms::alpakatools::make_host_buffer<unsigned int>(
queue_);
353 alpaka::memcpy(
queue_, nTotalMDs_buf_h, nTotalMDs_buf_d);
357 unsigned int nTotalMDs = *nTotalMDs_buf_h.data();
360 std::array<int, 2>
const mds_sizes{{
static_cast<int>(nTotalMDs), static_cast<int>(
nLowerModules_ + 1)}};
365 auto totOccupancyMDs_view =
367 alpaka::memset(
queue_, nMDs_view, 0u);
368 alpaka::memset(
queue_, totOccupancyMDs_view, 0u);
371 Vec3D const threadsPerBlockCreateMD{1, 16, 32};
373 WorkDiv3D const createMiniDoublets_workDiv =
376 alpaka::exec<Acc3D>(
queue_,
377 createMiniDoublets_workDiv,
386 WorkDiv1D const addMiniDoubletRangesToEventExplicit_workDiv = createWorkDiv<Vec1D>({1}, {1024}, {1});
388 alpaka::exec<Acc1D>(
queue_,
389 addMiniDoubletRangesToEventExplicit_workDiv,
403 std::array<int, 3>
const segments_sizes{{
static_cast<int>(
nTotalSegments_),
409 auto nSegments_view =
412 queue_, segmentsOccupancy.totOccupancySegments(), segmentsOccupancy.metadata().size());
413 alpaka::memset(
queue_, nSegments_view, 0u);
414 alpaka::memset(
queue_, totOccupancySegments_view, 0u);
417 Vec3D const threadsPerBlockCreateSeg{1, 1, 64};
422 alpaka::exec<Acc3D>(
queue_,
423 createSegments_workDiv,
432 WorkDiv1D const addSegmentRangesToEventExplicit_workDiv = createWorkDiv<Vec1D>({1}, {1024}, {1});
434 alpaka::exec<Acc1D>(
queue_,
435 addSegmentRangesToEventExplicit_workDiv,
448 WorkDiv1D const createTripletArrayRanges_workDiv = createWorkDiv<Vec1D>({1}, {1024}, {1});
450 alpaka::exec<Acc1D>(
queue_,
451 createTripletArrayRanges_workDiv,
458 auto rangesOccupancy =
rangesDC_->view();
459 auto maxTriplets_buf_h = cms::alpakatools::make_host_buffer<unsigned int>(
queue_);
461 alpaka::memcpy(
queue_, maxTriplets_buf_h, maxTriplets_buf_d);
464 std::array<int, 2>
const triplets_sizes{
465 {
static_cast<int>(*maxTriplets_buf_h.data()), static_cast<int>(
nLowerModules_)}};
469 auto nTriplets_view =
471 alpaka::memset(
queue_, nTriplets_view, 0u);
473 queue_, tripletsOccupancy.totOccupancyTriplets(), tripletsOccupancy.metadata().size());
474 alpaka::memset(
queue_, totOccupancyTriplets_view, 0u);
477 alpaka::memset(
queue_, partOfPT5_view, 0u);
479 alpaka::memset(
queue_, partOfT5_view, 0u);
481 alpaka::memset(
queue_, partOfPT3_view, 0u);
484 uint16_t nonZeroModules = 0;
485 unsigned int max_InnerSeg = 0;
488 auto nSegments_buf_h = cms::alpakatools::make_host_buffer<unsigned int[]>(
queue_,
nLowerModules_);
496 auto module_nConnectedModules_buf_h = cms::alpakatools::make_host_buffer<uint16_t[]>(
queue_,
nLowerModules_);
497 auto module_nConnectedModules_buf_d =
499 alpaka::memcpy(
queue_, module_nConnectedModules_buf_h, module_nConnectedModules_buf_d,
nLowerModules_);
503 auto const* nSegments = nSegments_buf_h.data();
504 auto const* module_nConnectedModules = module_nConnectedModules_buf_h.data();
508 auto*
index = index_buf_h.data();
510 for (uint16_t innerLowerModuleIndex = 0; innerLowerModuleIndex <
nLowerModules_; innerLowerModuleIndex++) {
511 uint16_t nConnectedModules = module_nConnectedModules[innerLowerModuleIndex];
512 unsigned int nInnerSegments = nSegments[innerLowerModuleIndex];
513 if (nConnectedModules != 0 and nInnerSegments != 0) {
514 index[nonZeroModules] = innerLowerModuleIndex;
517 max_InnerSeg =
std::max(max_InnerSeg, nInnerSegments);
522 alpaka::memcpy(
queue_, index_gpu_buf, index_buf_h, nonZeroModules);
524 Vec3D const threadsPerBlockCreateTrip{1, 16, 16};
529 alpaka::exec<Acc3D>(
queue_,
530 createTriplets_workDiv,
539 index_gpu_buf.data(),
542 WorkDiv1D const addTripletRangesToEventExplicit_workDiv = createWorkDiv<Vec1D>({1}, {1024}, {1});
544 alpaka::exec<Acc1D>(
queue_,
545 addTripletRangesToEventExplicit_workDiv,
563 Vec3D const threadsPerBlock_crossCleanpT3{1, 16, 64};
564 Vec3D const blocksPerGrid_crossCleanpT3{1, 4, 20};
568 alpaka::exec<Acc3D>(
queue_,
569 crossCleanpT3_workDiv,
577 WorkDiv1D const addpT3asTrackCandidates_workDiv = createWorkDiv<Vec1D>({1}, {512}, {1});
579 alpaka::exec<Acc1D>(
queue_,
580 addpT3asTrackCandidates_workDiv,
589 auto rangesOccupancy =
rangesDC_->view();
590 auto nEligibleModules_buf_h = cms::alpakatools::make_host_buffer<uint16_t>(
queue_);
592 alpaka::memcpy(
queue_, nEligibleModules_buf_h, nEligibleModules_buf_d);
594 auto const nEligibleModules = *nEligibleModules_buf_h.data();
596 Vec3D const threadsPerBlockRemoveDupQuints{1, 16, 32};
597 Vec3D const blocksPerGridRemoveDupQuints{1,
std::max(nEligibleModules / 16, 1),
std::max(nEligibleModules / 32, 1)};
598 WorkDiv3D const removeDupQuintupletsBeforeTC_workDiv =
601 alpaka::exec<Acc3D>(
queue_,
602 removeDupQuintupletsBeforeTC_workDiv,
608 Vec3D const threadsPerBlock_crossCleanT5{32, 1, 32};
609 Vec3D const blocksPerGrid_crossCleanT5{(13296 / 32) + 1, 1,
max_blocks};
613 alpaka::exec<Acc3D>(
queue_,
614 crossCleanT5_workDiv,
623 Vec3D const threadsPerBlock_addT5asTrackCandidate{1, 8, 128};
624 Vec3D const blocksPerGrid_addT5asTrackCandidate{1, 8, 10};
625 WorkDiv3D const addT5asTrackCandidate_workDiv =
628 alpaka::exec<Acc3D>(
queue_,
629 addT5asTrackCandidate_workDiv,
637 if (!no_pls_dupclean) {
638 Vec3D const threadsPerBlockCheckHitspLS{1, 16, 16};
643 alpaka::exec<Acc3D>(
queue_,
644 checkHitspLS_workDiv,
652 Vec3D const threadsPerBlock_crossCleanpLS{1, 16, 32};
653 Vec3D const blocksPerGrid_crossCleanpLS{1, 4, 20};
657 alpaka::exec<Acc3D>(
queue_,
658 crossCleanpLS_workDiv,
671 Vec3D const threadsPerBlock_addpLSasTrackCandidate{1, 1, 384};
673 WorkDiv3D const addpLSasTrackCandidate_workDiv =
676 alpaka::exec<Acc3D>(
queue_,
677 addpLSasTrackCandidate_workDiv,
686 auto nTrackCanpT5Host_buf = cms::alpakatools::make_host_buffer<unsigned int>(
queue_);
687 auto nTrackCanpT3Host_buf = cms::alpakatools::make_host_buffer<unsigned int>(
queue_);
688 auto nTrackCanpLSHost_buf = cms::alpakatools::make_host_buffer<unsigned int>(
queue_);
689 auto nTrackCanT5Host_buf = cms::alpakatools::make_host_buffer<unsigned int>(
queue_);
691 nTrackCanpT5Host_buf,
694 nTrackCanpT3Host_buf,
697 nTrackCanpLSHost_buf,
704 auto nTrackCandidatespT5 = *nTrackCanpT5Host_buf.data();
705 auto nTrackCandidatespT3 = *nTrackCanpT3Host_buf.data();
706 auto nTrackCandidatespLS = *nTrackCanpLSHost_buf.data();
707 auto nTrackCandidatesT5 = *nTrackCanT5Host_buf.data();
711 "****************************************************************************************************\n" 712 "* Warning: Track candidates were possibly truncated. *\n" 713 "* You may need to increase either n_max_pixel_track_candidates or n_max_nonpixel_track_candidates. *\n" 714 "* Run the code with the WARNINGS flag activated for more details. *\n" 715 "****************************************************************************************************\n");
723 alpaka::memset(
queue_, nPixelTriplets_view, 0u);
724 auto totOccupancyPixelTriplets_view =
726 alpaka::memset(
queue_, totOccupancyPixelTriplets_view, 0u);
741 auto const* superbins = superbins_buf.data();
742 auto const* pixelTypes = pixelTypes_buf.data();
744 unsigned int nInnerSegments;
750 alpaka::memcpy(
queue_, nInnerSegments_src_view, dev_view_nSegments);
753 auto connectedPixelSize_host_buf = cms::alpakatools::make_host_buffer<unsigned int[]>(
queue_, nInnerSegments);
754 auto connectedPixelIndex_host_buf = cms::alpakatools::make_host_buffer<unsigned int[]>(
queue_, nInnerSegments);
755 auto connectedPixelSize_dev_buf = cms::alpakatools::make_device_buffer<unsigned int[]>(
queue_, nInnerSegments);
756 auto connectedPixelIndex_dev_buf = cms::alpakatools::make_device_buffer<unsigned int[]>(
queue_, nInnerSegments);
758 unsigned int* connectedPixelSize_host = connectedPixelSize_host_buf.data();
759 unsigned int* connectedPixelIndex_host = connectedPixelIndex_host_buf.data();
761 int pixelIndexOffsetPos =
768 for (
unsigned int i = 0;
i < nInnerSegments;
i++) {
770 int superbin = superbins[
i];
774 connectedPixelSize_host[
i] = 0;
775 connectedPixelIndex_host[
i] = 0;
785 connectedPixelSize_host[
i] =
pixelMapping_.connectedPixelsSizes[superbin];
787 connectedPixelIndex_host[
i] =
pixelMapping_.connectedPixelsIndex[superbin];
791 connectedPixelSize_host[
i] =
pixelMapping_.connectedPixelsSizesPos[superbin];
793 connectedPixelIndex_host[
i] =
pixelMapping_.connectedPixelsIndexPos[superbin] + pixelIndexOffsetPos;
797 connectedPixelSize_host[
i] =
pixelMapping_.connectedPixelsSizesNeg[superbin];
799 connectedPixelIndex_host[
i] =
pixelMapping_.connectedPixelsIndexNeg[superbin] + pixelIndexOffsetNeg;
804 alpaka::memcpy(
queue_, connectedPixelSize_dev_buf, connectedPixelSize_host_buf, nInnerSegments);
805 alpaka::memcpy(
queue_, connectedPixelIndex_dev_buf, connectedPixelIndex_host_buf, nInnerSegments);
807 Vec3D const threadsPerBlock{1, 4, 32};
808 Vec3D const blocksPerGrid{16 , 4096, 1};
811 alpaka::exec<Acc3D>(
queue_,
812 createPixelTripletsFromMap_workDiv,
823 connectedPixelSize_dev_buf.data(),
824 connectedPixelIndex_dev_buf.data(),
828 auto nPixelTriplets_buf = cms::alpakatools::make_host_buffer<unsigned int>(
queue_);
834 std::cout <<
"number of pixel triplets = " << *nPixelTriplets_buf.data() << std::endl;
838 Vec3D const threadsPerBlockDupPixTrip{1, 16, 16};
840 Vec3D const blocksPerGridDupPixTrip{1, 40, 1};
841 WorkDiv3D const removeDupPixelTripletsFromMap_workDiv =
849 WorkDiv1D const createEligibleModulesListForQuintuplets_workDiv = createWorkDiv<Vec1D>({1}, {1024}, {1});
851 alpaka::exec<Acc1D>(
queue_,
852 createEligibleModulesListForQuintuplets_workDiv,
858 auto nEligibleT5Modules_buf = cms::alpakatools::make_host_buffer<uint16_t>(
queue_);
859 auto nTotalQuintuplets_buf = cms::alpakatools::make_host_buffer<unsigned int>(
queue_);
860 auto rangesOccupancy =
rangesDC_->view();
863 alpaka::memcpy(
queue_, nEligibleT5Modules_buf, nEligibleT5Modules_view_d);
864 alpaka::memcpy(
queue_, nTotalQuintuplets_buf, nTotalQuintuplets_view_d);
867 auto nEligibleT5Modules = *nEligibleT5Modules_buf.data();
868 auto nTotalQuintuplets = *nTotalQuintuplets_buf.data();
871 std::array<int, 2>
const quintuplets_sizes{{
static_cast<int>(nTotalQuintuplets), static_cast<int>(
nLowerModules_)}};
875 queue_, quintupletsOccupancy.nQuintuplets(), quintupletsOccupancy.metadata().size());
876 alpaka::memset(
queue_, nQuintuplets_view, 0u);
878 queue_, quintupletsOccupancy.totOccupancyQuintuplets(), quintupletsOccupancy.metadata().size());
879 alpaka::memset(
queue_, totOccupancyQuintuplets_view, 0u);
882 alpaka::memset(
queue_, isDup_view, 0u);
883 auto tightCutFlag_view =
885 alpaka::memset(
queue_, tightCutFlag_view, 0u);
886 auto partOfPT5_view =
888 alpaka::memset(
queue_, partOfPT5_view, 0u);
891 Vec3D const threadsPerBlockQuints{1, 8, 32};
892 Vec3D const blocksPerGridQuints{
std::max((
int)nEligibleT5Modules, 1), 1, 1};
893 WorkDiv3D const createQuintuplets_workDiv =
896 alpaka::exec<Acc3D>(
queue_,
897 createQuintuplets_workDiv,
909 Vec3D const threadsPerBlockDupQuint{1, 16, 16};
911 WorkDiv3D const removeDupQuintupletsAfterBuild_workDiv =
914 alpaka::exec<Acc3D>(
queue_,
915 removeDupQuintupletsAfterBuild_workDiv,
922 WorkDiv1D const addQuintupletRangesToEventExplicit_workDiv = createWorkDiv<Vec1D>({1}, {1024}, {1});
924 alpaka::exec<Acc1D>(
queue_,
925 addQuintupletRangesToEventExplicit_workDiv,
937 if (!no_pls_dupclean) {
938 Vec3D const threadsPerBlockCheckHitspLS{1, 16, 16};
943 alpaka::exec<Acc3D>(
queue_,
944 checkHitspLS_workDiv,
956 auto nPixelQuintuplets_view =
958 alpaka::memset(
queue_, nPixelQuintuplets_view, 0u);
959 auto totOccupancyPixelQuintuplets_view =
961 alpaka::memset(
queue_, totOccupancyPixelQuintuplets_view, 0u);
981 auto const* superbins = superbins_buf.data();
982 auto const* pixelTypes = pixelTypes_buf.data();
984 unsigned int nInnerSegments;
992 alpaka::memcpy(
queue_, nInnerSegments_src_view, dev_view_nSegments);
995 auto connectedPixelSize_host_buf = cms::alpakatools::make_host_buffer<unsigned int[]>(
queue_, nInnerSegments);
996 auto connectedPixelIndex_host_buf = cms::alpakatools::make_host_buffer<unsigned int[]>(
queue_, nInnerSegments);
997 auto connectedPixelSize_dev_buf = cms::alpakatools::make_device_buffer<unsigned int[]>(
queue_, nInnerSegments);
998 auto connectedPixelIndex_dev_buf = cms::alpakatools::make_device_buffer<unsigned int[]>(
queue_, nInnerSegments);
1000 auto* connectedPixelSize_host = connectedPixelSize_host_buf.data();
1001 auto* connectedPixelIndex_host = connectedPixelIndex_host_buf.data();
1009 for (
unsigned int i = 0;
i < nInnerSegments;
i++) {
1011 int superbin = superbins[
i];
1015 connectedPixelSize_host[
i] = 0;
1016 connectedPixelIndex_host[
i] = 0;
1021 switch (pixelType) {
1026 connectedPixelSize_host[
i] =
pixelMapping_.connectedPixelsSizes[superbin];
1028 connectedPixelIndex_host[
i] =
pixelMapping_.connectedPixelsIndex[superbin];
1032 connectedPixelSize_host[
i] =
pixelMapping_.connectedPixelsSizesPos[superbin];
1034 connectedPixelIndex_host[
i] =
pixelMapping_.connectedPixelsIndexPos[superbin] + pixelIndexOffsetPos;
1038 connectedPixelSize_host[
i] =
pixelMapping_.connectedPixelsSizesNeg[superbin];
1040 connectedPixelIndex_host[
i] =
pixelMapping_.connectedPixelsIndexNeg[superbin] + pixelIndexOffsetNeg;
1045 alpaka::memcpy(
queue_, connectedPixelSize_dev_buf, connectedPixelSize_host_buf, nInnerSegments);
1046 alpaka::memcpy(
queue_, connectedPixelIndex_dev_buf, connectedPixelIndex_host_buf, nInnerSegments);
1048 Vec3D const threadsPerBlockCreatePixQuints{1, 16, 16};
1050 WorkDiv3D const createPixelQuintupletsFromMap_workDiv =
1053 alpaka::exec<Acc3D>(
queue_,
1054 createPixelQuintupletsFromMap_workDiv,
1065 connectedPixelSize_dev_buf.data(),
1066 connectedPixelIndex_dev_buf.data(),
1070 Vec3D const threadsPerBlockDupPix{1, 16, 16};
1072 WorkDiv3D const removeDupPixelQuintupletsFromMap_workDiv =
1075 alpaka::exec<Acc3D>(
queue_,
1076 removeDupPixelQuintupletsFromMap_workDiv,
1080 WorkDiv1D const addpT5asTrackCandidate_workDiv = createWorkDiv<Vec1D>({1}, {256}, {1});
1082 alpaka::exec<Acc1D>(
queue_,
1083 addpT5asTrackCandidate_workDiv,
1092 auto nPixelQuintuplets_buf = cms::alpakatools::make_host_buffer<unsigned int>(
queue_);
1095 nPixelQuintuplets_buf,
1099 std::cout <<
"number of pixel quintuplets = " << *nPixelQuintuplets_buf.data() << std::endl;
1114 auto module_subdets_view =
1119 auto module_layers_view =
1123 auto module_hitRanges_buf = cms::alpakatools::make_host_buffer<ArrayIx2[]>(
queue_,
nLowerModules_);
1125 auto hitRanges_view =
1131 auto const* nMDsCPU = nMDsCPU_buf.data();
1134 auto const* module_hitRanges = module_hitRanges_buf.data();
1137 if (!(nMDsCPU[
i] == 0
or module_hitRanges[
i][0] == -1)) {
1148 auto nSegmentsCPU_buf = cms::alpakatools::make_host_buffer<unsigned int[]>(
queue_,
nLowerModules_);
1157 auto module_subdets_view =
1162 auto module_layers_view =
1168 auto const* nSegmentsCPU = nSegmentsCPU_buf.data();
1173 if (!(nSegmentsCPU[
i] == 0)) {
1185 auto nQuintuplets_view =
1187 auto nQuintupletsCPU_buf = cms::alpakatools::make_host_buffer<unsigned int[]>(
queue_,
nLowerModules_);
1188 alpaka::memcpy(
queue_, nQuintupletsCPU_buf, nQuintuplets_view);
1195 alpaka::memcpy(
queue_, module_subdets_buf, module_subdets_view,
nModules_);
1198 auto module_layers_view =
1202 auto module_quintupletModuleIndices_buf = cms::alpakatools::make_host_buffer<int[]>(
queue_,
nLowerModules_);
1203 auto rangesOccupancy =
rangesDC_->view();
1204 auto quintupletModuleIndices_view_d =
1206 alpaka::memcpy(
queue_, module_quintupletModuleIndices_buf, quintupletModuleIndices_view_d);
1210 auto const* nQuintupletsCPU = nQuintupletsCPU_buf.data();
1213 auto const* module_quintupletModuleIndices = module_quintupletModuleIndices_buf.data();
1216 if (!(nQuintupletsCPU[
i] == 0
or module_quintupletModuleIndices[
i] == -1)) {
1229 auto nTripletsCPU_buf = cms::alpakatools::make_host_buffer<unsigned int[]>(
queue_,
nLowerModules_);
1230 alpaka::memcpy(
queue_, nTripletsCPU_buf, nTriplets_view);
1236 auto module_subdets_view =
1241 auto module_layers_view =
1247 auto const* nTripletsCPU = nTripletsCPU_buf.data();
1252 if (nTripletsCPU[
i] != 0) {
1263 unsigned int miniDoublets = 0;
1271 return miniDoublets;
1290 unsigned int segments = 0;
1317 unsigned int triplets = 0;
1344 auto nPixelTriplets_buf_h = cms::alpakatools::make_host_buffer<unsigned int>(
queue_);
1350 return *nPixelTriplets_buf_h.data();
1354 auto nPixelQuintuplets_buf_h = cms::alpakatools::make_host_buffer<unsigned int>(
queue_);
1357 nPixelQuintuplets_buf_h,
1361 return *nPixelQuintuplets_buf_h.data();
1365 unsigned int quintuplets = 0;
1392 auto nTrackCandidates_buf_h = cms::alpakatools::make_host_buffer<unsigned int>(
queue_);
1395 nTrackCandidates_buf_h,
1399 return *nTrackCandidates_buf_h.data();
1403 auto nTrackCandidatesPT5_buf_h = cms::alpakatools::make_host_buffer<unsigned int>(
queue_);
1406 nTrackCandidatesPT5_buf_h,
1410 return *nTrackCandidatesPT5_buf_h.data();
1414 auto nTrackCandidatesPT3_buf_h = cms::alpakatools::make_host_buffer<unsigned int>(
queue_);
1417 nTrackCandidatesPT3_buf_h,
1421 return *nTrackCandidatesPT3_buf_h.data();
1425 auto nTrackCandidatesPLS_buf_h = cms::alpakatools::make_host_buffer<unsigned int>(
queue_);
1428 nTrackCandidatesPLS_buf_h,
1432 return *nTrackCandidatesPLS_buf_h.data();
1436 auto nTrackCandidates_buf_h = cms::alpakatools::make_host_buffer<unsigned int>(
queue_);
1437 auto nTrackCandidatesT5_buf_h = cms::alpakatools::make_host_buffer<unsigned int>(
queue_);
1440 nTrackCandidates_buf_h,
1443 nTrackCandidatesT5_buf_h,
1447 return (*nTrackCandidates_buf_h.data()) - (*nTrackCandidatesT5_buf_h.data());
1451 auto nTrackCandidatesT5_buf_h = cms::alpakatools::make_host_buffer<unsigned int>(
queue_);
1454 nTrackCandidatesT5_buf_h,
1458 return *nTrackCandidatesT5_buf_h.data();
1461 template <
typename TSoA,
typename TDev>
1463 if constexpr (std::is_same_v<TDev, DevHost>) {
1464 return hitsDC_->const_view<TSoA>();
1469 auto nHits = hits_d.metadata().size();
1470 std::array<int, 2>
const hits_sizes{{
static_cast<int>(
nHits), static_cast<int>(
nModules_)}};
1475 alpaka::memcpy(
queue_, idxs_h, idxs_d);
1483 return hitsHC_->const_view<TSoA>();
1489 template <
typename TDev>
1491 if constexpr (std::is_same_v<TDev, DevHost>) {
1505 template <
typename TSoA,
typename TDev>
1507 if constexpr (std::is_same_v<TDev, DevHost>) {
1524 template <
typename TSoA,
typename TDev>
1526 if constexpr (std::is_same_v<TDev, DevHost>) {
1544 template <
typename TSoA,
typename TDev>
1546 if constexpr (std::is_same_v<TDev, DevHost>) {
1563 template <
typename TSoA,
typename TDev>
1565 if constexpr (std::is_same_v<TDev, DevHost>) {
1582 template <
typename TDev>
1584 if constexpr (std::is_same_v<TDev, DevHost>) {
1599 template <
typename TDev>
1601 if constexpr (std::is_same_v<TDev, DevHost>) {
1620 auto nTrackCanHost_buf_h = cms::alpakatools::make_host_buffer<unsigned int>(
queue_);
1622 nTrackCanHost_buf_h,
1626 auto const nTrackCanHost = *nTrackCanHost_buf_h.data();
1629 (*trackCandidatesHC_)->nTrackCandidates() = nTrackCanHost;
1632 Params_pT5::kHits * nTrackCanHost),
1634 queue_, (*trackCandidatesDC_)->hitIndices()->data(), Params_pT5::kHits * nTrackCanHost));
1641 Params_pT5::kLayers * nTrackCanHost),
1643 queue_, (*trackCandidatesDC_)->logicalLayers()->data(), Params_pT5::kLayers * nTrackCanHost));
1652 queue_, (*trackCandidatesDC_)->objectIndices()->data(), 2 * nTrackCanHost));
1664 template <
typename TSoA,
typename TDev>
1666 if constexpr (std::is_same_v<TDev, DevHost>) {
1667 return modules_.const_view<TSoA>();
constexpr unsigned int n_max_pixel_md_per_modules
unsigned int getNumberOfMiniDoubletsByLayerBarrel(unsigned int layer)
void createPixelTriplets()
unsigned int getNumberOfMiniDoublets()
constexpr unsigned int n_max_nonpixel_track_candidates
PixelQuintupletsConst getPixelQuintuplets(bool sync=true)
const TrackCandidatesConst & getTrackCandidates(bool inCMSSW=false, bool sync=true)
void createSegmentsWithModuleMap()
std::optional< TripletsHostCollection > tripletsHC_
unsigned int getNumberOfTripletsByLayerEndcap(unsigned int layer)
void addMiniDoubletsToEventExplicit()
TSoA::ConstView getQuintuplets(bool sync=true)
std::array< unsigned int, 6 > n_triplets_by_layer_barrel_
int getNumberOfT5TrackCandidates()
ModulesSoALayout<> ModulesSoA
const unsigned int nEndCapMap_
constexpr unsigned int max_blocks
TSoA::ConstView getTriplets(bool sync=true)
ModulesDeviceCollection const & modules_
std::optional< PixelQuintupletsDeviceCollection > pixelQuintupletsDC_
void addQuintupletsToEventExplicit()
std::optional< PixelTripletsHostCollection > pixelTripletsHC_
::PortableCollection< T, Device > PortableCollection
const uint16_t nLowerModules_
std::optional< TrackCandidatesDeviceCollection > trackCandidatesDC_
PixelTripletsSoA::ConstView PixelTripletsConst
TripletsOccupancySoALayout<> TripletsOccupancySoA
void addPixelSegmentToEvent(std::vector< unsigned int > const &hitIndices0, std::vector< unsigned int > const &hitIndices1, std::vector< unsigned int > const &hitIndices2, std::vector< unsigned int > const &hitIndices3, std::vector< float > const &dPhiChange, std::vector< float > const &ptIn, std::vector< float > const &ptErr, std::vector< float > const &px, std::vector< float > const &py, std::vector< float > const &pz, std::vector< float > const &eta, std::vector< float > const &etaErr, std::vector< float > const &phi, std::vector< int > const &charge, std::vector< unsigned int > const &seedIdx, std::vector< int > const &superbin, std::vector< PixelType > const &pixelType, std::vector< char > const &isQuad)
constexpr unsigned int n_max_pixel_segments_per_module
SegmentsOccupancySoALayout<> SegmentsOccupancySoA
std::array< unsigned int, 5 > n_triplets_by_layer_endcap_
std::array< unsigned int, 6 > n_segments_by_layer_barrel_
ALPAKA_ACCELERATOR_NAMESPACE::Device Device
typename traits::PortableMultiCollectionTrait< TDev, T0, Args... >::CollectionType PortableMultiCollection
std::optional< QuintupletsDeviceCollection > quintupletsDC_
std::optional< ModulesHostCollection > modulesHC_
std::array< unsigned int, 5 > n_quintuplets_by_layer_endcap_
std::array< unsigned int, 5 > n_segments_by_layer_endcap_
void pixelLineSegmentCleaning(bool no_pls_dupclean)
int getNumberOfPixelTriplets()
unsigned int getNumberOfQuintuplets()
constexpr unsigned int n_max_pixel_triplets
Vec3D constexpr elementsPerThread(Vec3D::all(static_cast< Idx >(1)))
ObjectRangesConst getRanges(bool sync=true)
unsigned int getNumberOfQuintupletsByLayer(unsigned int layer)
unsigned int getNumberOfMiniDoubletsByLayerEndcap(unsigned int layer)
int getNumberOfPixelQuintuplets()
void addHitToEvent(std::vector< float > const &x, std::vector< float > const &y, std::vector< float > const &z, std::vector< unsigned int > const &detId, std::vector< unsigned int > const &idxInNtuple)
SegmentsOccupancySoA::View SegmentsOccupancy
ALPAKA_ACCELERATOR_NAMESPACE::Queue Queue
std::optional< PixelTripletsDeviceCollection > pixelTripletsDC_
TSoA::ConstView getModules(bool sync=true)
WorkDiv< Dim1D > WorkDiv1D
SegmentsSoALayout<> SegmentsSoA
PixelMap const & pixelMapping_
unsigned int getNumberOfMiniDoubletsByLayer(unsigned int layer)
unsigned int getNumberOfTripletsByLayer(unsigned int layer)
TripletsSoA::ConstView TripletsConst
ModulesPixelSoALayout<> ModulesPixelSoA
int getNumberOfPixelTrackCandidates()
QuintupletsSoALayout<> QuintupletsSoA
TrackCandidatesSoA::ConstView TrackCandidatesConst
void createMiniDoublets()
TSoA::ConstView getMiniDoublets(bool sync=true)
ALPAKA_FN_HOST_ACC ALPAKA_FN_INLINE float phi(TAcc const &acc, float x, float y)
int getNumberOfPT3TrackCandidates()
ModulesPixelSoA::ConstView ModulesPixelConst
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
SegmentsPixelSoA::View SegmentsPixel
ALPAKA_ACCELERATOR_NAMESPACE::Acc3D Acc3D
MiniDoubletsOccupancySoALayout<> MiniDoubletsOccupancySoA
TSoA::ConstView getSegments(bool sync=true)
HitsRangesSoALayout<> HitsRangesSoA
void copyAsync(device::unique_ptr< T > &dst, const host::unique_ptr< T > &src, cudaStream_t stream)
unsigned int getNumberOfSegmentsByLayerEndcap(unsigned int layer)
unsigned int getNumberOfSegmentsByLayerBarrel(unsigned int layer)
MiniDoubletsSoA::ConstView MiniDoubletsConst
HitsSoA::ConstView HitsConst
EndcapGeometryDevDeviceCollection const & endcapGeometry_
int getNumberOfPT5TrackCandidates()
ModulesSoA::ConstView ModulesConst
void createPixelQuintuplets()
HitsRangesSoA::ConstView HitsRangesConst
const std::vector< int > & module_layers()
MiniDoubletsSoALayout<> MiniDoubletsSoA
std::array< unsigned int, 6 > n_quintuplets_by_layer_barrel_
SegmentsPixelSoALayout<> SegmentsPixelSoA
std::optional< ObjectRangesHostCollection > rangesHC_
unsigned int nTotalSegments_
SegmentsPixelSoA::ConstView SegmentsPixelConst
std::optional< SegmentsHostCollection > segmentsHC_
constexpr unsigned int n_max_pixel_track_candidates
const std::vector< int > & module_subdets()
PixelTripletsConst getPixelTriplets(bool sync=true)
TSoA::ConstView getHits(bool inCMSSW=false, bool sync=true)
PixelQuintupletsSoA::ConstView PixelQuintupletsConst
std::optional< ObjectRangesDeviceCollection > rangesDC_
std::optional< TripletsDeviceCollection > tripletsDC_
std::optional< HitsDeviceCollection > hitsDC_
SegmentsOccupancySoA::ConstView SegmentsOccupancyConst
QuintupletsSoA::ConstView QuintupletsConst
void createTrackCandidates(bool no_pls_dupclean, bool tc_pls_triplets)
std::array< unsigned int, 6 > n_minidoublets_by_layer_barrel_
unsigned int getNumberOfSegmentsByLayer(unsigned int layer)
TripletsOccupancySoA::ConstView TripletsOccupancyConst
ObjectRangesSoA::ConstView ObjectRangesConst
std::optional< PixelQuintupletsHostCollection > pixelQuintupletsHC_
WorkDiv< Dim3D > WorkDiv3D
std::optional< QuintupletsHostCollection > quintupletsHC_
SegmentsSoA::ConstView SegmentsConst
unsigned int getNumberOfSegments()
std::optional< SegmentsDeviceCollection > segmentsDC_
QuintupletsOccupancySoA::ConstView QuintupletsOccupancyConst
std::optional< MiniDoubletsHostCollection > miniDoubletsHC_
constexpr unsigned int n_max_pixel_quintuplets
void addTripletsToEventExplicit()
std::array< unsigned int, 5 > n_minidoublets_by_layer_endcap_
int getNumberOfTrackCandidates()
std::optional< HitsHostCollection > hitsHC_
TupleMultiplicity< TrackerTraits > const *__restrict__ uint32_t nHits
TripletsSoALayout<> TripletsSoA
std::optional< TrackCandidatesHostCollection > trackCandidatesHC_
unsigned int getNumberOfQuintupletsByLayerBarrel(unsigned int layer)
MiniDoubletsOccupancySoA::ConstView MiniDoubletsOccupancyConst
ALPAKA_ACCELERATOR_NAMESPACE::Acc1D Acc1D
QuintupletsOccupancySoALayout<> QuintupletsOccupancySoA
unsigned int getNumberOfTriplets()
constexpr unsigned int size_superbins
unsigned int getNumberOfTripletsByLayerBarrel(unsigned int layer)
void addSegmentsToEventExplicit()
int getNumberOfPLSTrackCandidates()
ALPAKA_FN_HOST ALPAKA_FN_INLINE WorkDiv< typename Vec::Dim > createWorkDiv(const Vec &blocksPerGrid, const Vec &threadsPerBlock, const Vec &elementsPerThreadArg)
std::optional< MiniDoubletsDeviceCollection > miniDoubletsDC_
unsigned int getNumberOfQuintupletsByLayerEndcap(unsigned int layer)
ALPAKA_FN_HOST_ACC ALPAKA_FN_INLINE float eta(TAcc const &acc, float x, float y, float z)