@@ -1747,6 +1747,111 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst {
17471747 if (miniDoublet3Index != outerInnerInnerMiniDoubletIndex)
17481748 continue ;
17491749
1750+ // If densely connected, do not attempt parallel processing to avoid truncation
1751+ if (nInnerTriplets >= kNTripletThreshold || nOuterTriplets >= kNTripletThreshold ) {
1752+ uint16_t lowerModule2 = triplets.lowerModuleIndices ()[innerTripletIndex][1 ];
1753+ uint16_t lowerModule4 = triplets.lowerModuleIndices ()[outerTripletIndex][1 ];
1754+ uint16_t lowerModule5 = triplets.lowerModuleIndices ()[outerTripletIndex][2 ];
1755+
1756+ float innerRadius, outerRadius, bridgeRadius, regressionCenterX, regressionCenterY, regressionRadius,
1757+ rzChiSquared, chiSquared, nonAnchorChiSquared, dBeta1, dBeta2; // required for making distributions
1758+
1759+ float t5Embed[Params_T5::kEmbed ] = {0 .f };
1760+
1761+ bool tightCutFlag = false ;
1762+
1763+ bool success = runQuintupletDefaultAlgo (acc,
1764+ modules,
1765+ mds,
1766+ segments,
1767+ triplets,
1768+ lowerModule1,
1769+ lowerModule2,
1770+ lowerModule3,
1771+ lowerModule4,
1772+ lowerModule5,
1773+ innerTripletIndex,
1774+ outerTripletIndex,
1775+ innerRadius,
1776+ outerRadius,
1777+ bridgeRadius,
1778+ regressionCenterX,
1779+ regressionCenterY,
1780+ regressionRadius,
1781+ rzChiSquared,
1782+ chiSquared,
1783+ nonAnchorChiSquared,
1784+ dBeta1,
1785+ dBeta2,
1786+ tightCutFlag,
1787+ t5Embed,
1788+ ptCut);
1789+ if (success) {
1790+ int totOccupancyQuintuplets =
1791+ alpaka::atomicAdd (acc,
1792+ &quintupletsOccupancy.totOccupancyQuintuplets ()[lowerModule1],
1793+ 1u ,
1794+ alpaka::hierarchy::Threads{});
1795+ if (totOccupancyQuintuplets >= ranges.quintupletModuleOccupancy ()[lowerModule1]) {
1796+ #ifdef WARNINGS
1797+ printf (" Quintuplet excess alert! Module index = %d, Occupancy = %d\n " ,
1798+ lowerModule1,
1799+ totOccupancyQuintuplets);
1800+ #endif
1801+ } else {
1802+ int quintupletModuleIndex = alpaka::atomicAdd (
1803+ acc, &quintupletsOccupancy.nQuintuplets ()[lowerModule1], 1u , alpaka::hierarchy::Threads{});
1804+ // this if statement should never get executed!
1805+ if (ranges.quintupletModuleIndices ()[lowerModule1] == -1 ) {
1806+ #ifdef WARNINGS
1807+ printf (" Quintuplets : no memory for module at module index = %d\n " , lowerModule1);
1808+ #endif
1809+ } else {
1810+ unsigned int quintupletIndex =
1811+ ranges.quintupletModuleIndices ()[lowerModule1] + quintupletModuleIndex;
1812+ float phi = mds.anchorPhi ()[segments.mdIndices ()[triplets.segmentIndices ()[innerTripletIndex][0 ]]
1813+ [layer2_adjustment]];
1814+ float eta = mds.anchorEta ()[segments.mdIndices ()[triplets.segmentIndices ()[innerTripletIndex][0 ]]
1815+ [layer2_adjustment]];
1816+ float pt = (innerRadius + outerRadius) * k2Rinv1GeVf;
1817+ float scores = chiSquared + nonAnchorChiSquared;
1818+ addQuintupletToMemory (triplets,
1819+ quintuplets,
1820+ innerTripletIndex,
1821+ outerTripletIndex,
1822+ lowerModule1,
1823+ lowerModule2,
1824+ lowerModule3,
1825+ lowerModule4,
1826+ lowerModule5,
1827+ innerRadius,
1828+ bridgeRadius,
1829+ outerRadius,
1830+ regressionCenterX,
1831+ regressionCenterY,
1832+ regressionRadius,
1833+ rzChiSquared,
1834+ chiSquared,
1835+ nonAnchorChiSquared,
1836+ dBeta1,
1837+ dBeta2,
1838+ pt,
1839+ eta,
1840+ phi,
1841+ scores,
1842+ layer,
1843+ quintupletIndex,
1844+ t5Embed,
1845+ tightCutFlag);
1846+
1847+ triplets.partOfT5 ()[quintuplets.tripletIndices ()[quintupletIndex][0 ]] = true ;
1848+ triplets.partOfT5 ()[quintuplets.tripletIndices ()[quintupletIndex][1 ]] = true ;
1849+ }
1850+ }
1851+ }
1852+ continue ;
1853+ }
1854+
17501855 // Match inner Sg and Outer Sg
17511856 int mIdx = alpaka::atomicAdd (acc, &matchCount, 1 , alpaka::hierarchy::Threads{});
17521857 unsigned int quintupletIndex = ranges.quintupletModuleIndices ()[lowerModule1] + mIdx ;
@@ -1892,10 +1997,12 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst {
18921997 struct CountTripletConnections {
18931998 ALPAKA_FN_ACC void operator ()(Acc3D const & acc,
18941999 ModulesConst modules,
2000+ MiniDoubletsConst mds,
18952001 SegmentsConst segments,
18962002 Triplets triplets,
18972003 TripletsOccupancyConst tripletsOcc,
1898- ObjectRangesConst ranges) const {
2004+ ObjectRangesConst ranges,
2005+ const float ptCut) const {
18992006 // The atomicAdd below with hierarchy::Threads{} requires one block in x, y dimensions.
19002007 ALPAKA_ASSERT_ACC ((alpaka::getWorkDiv<alpaka::Grid, alpaka::Blocks>(acc)[1 ] == 1 ) &&
19012008 (alpaka::getWorkDiv<alpaka::Grid, alpaka::Blocks>(acc)[2 ] == 1 ));
@@ -1929,7 +2036,50 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst {
19292036 const unsigned int thirdMDInner = mdIndices[thirdSegIdx][0 ];
19302037
19312038 if (secondMDOuter == thirdMDInner) {
1932- alpaka::atomicAdd (acc, &triplets.connectedMax ()[innerTripletIndex], 1u , alpaka::hierarchy::Threads{});
2039+ // Will only perform runQuintupletDefaultAlgorithm() checks if densely connected
2040+ if (nInnerTriplets < kNTripletThreshold && nOuterTriplets < kNTripletThreshold ) {
2041+ alpaka::atomicAdd (acc, &triplets.connectedMax ()[innerTripletIndex], 1u , alpaka::hierarchy::Threads{});
2042+ } else {
2043+ const uint16_t lowerModule2 = lmIdx[innerTripletIndex][1 ];
2044+ const uint16_t lowerModule4 = lmIdx[outerTripletIndex][1 ];
2045+ const uint16_t lowerModule5 = lmIdx[outerTripletIndex][2 ];
2046+
2047+ float innerRadius, outerRadius, bridgeRadius;
2048+ float regCx, regCy, regR;
2049+ float rzChi2, chi2, nonAnchorChi2, dBeta1, dBeta2;
2050+ float t5Embed[Params_T5::kEmbed ] = {0 .f };
2051+ bool tightFlag = false ;
2052+
2053+ const bool ok = runQuintupletDefaultAlgo (acc,
2054+ modules,
2055+ mds,
2056+ segments,
2057+ triplets,
2058+ lowerModule1,
2059+ lowerModule2,
2060+ lowerModule3,
2061+ lowerModule4,
2062+ lowerModule5,
2063+ innerTripletIndex,
2064+ outerTripletIndex,
2065+ innerRadius,
2066+ outerRadius,
2067+ bridgeRadius,
2068+ regCx,
2069+ regCy,
2070+ regR,
2071+ rzChi2,
2072+ chi2,
2073+ nonAnchorChi2,
2074+ dBeta1,
2075+ dBeta2,
2076+ tightFlag,
2077+ t5Embed,
2078+ ptCut);
2079+ if (ok) {
2080+ alpaka::atomicAdd (acc, &triplets.connectedMax ()[innerTripletIndex], 1u , alpaka::hierarchy::Threads{});
2081+ }
2082+ }
19332083 }
19342084 }
19352085 }
0 commit comments