cmssw icon indicating copy to clipboard operation
cmssw copied to clipboard

SiStripClusterizer, an Alpaka port of the CUDA ClustersFromRawProducerGPU

Open pietroGru opened this issue 9 months ago • 83 comments

PR 47629

Description

Pull request to merge an heterogeneous implementation of the silicon strip unpacker/clusterizer SiStripClusterizerFromRaw module (legacy), whose purpose is producing strip clusters from raw FED data.

Legacy and heterogeneous implementations of the unpacker/clusterizer share both unpacking and clustering algorithms, with the heter. version having the needed generalizations to allow for parallel implementation.

Overview of the implementation

Details of the heterogeneous implementation can be found in here[1], while a summary is presented below. The parallel implementation consists of:

  • the ESProducer called SiStripClusterizerConditionsESProducerAlpaka. It is analogous to the legacy SiStripClusterizerConditionsESProducer. It has the purpose of reshuffling the strip conditions (good strips, cabling, etc.) in a more convenient portable format for the parallel algo;
  • the SiStripRawToCluster (alpaka stream::SynchronizingEDProducer). It takes the input RawFEDCollection and unpacks the fed raw bytes into pairs of (strip, ADC) - henceforth referred as strip digi. It performs the clusterization of the strip digi according to the ThreeThreshold algo. Finally, the resulting digi and cluster data are exported as SoA collections;
  • the SiStripClustersToLegacy (edm global::EDProducer) EDProducer, which is a cpu producer converting the clusters and digi SoA collections into the legacy format used downstream by other modules (DetSetVector<SiStripCluster>, with digi amplitudes as SiStripCluster members).

The two DataFormats are introduced:

  • SiStripClusterSoA, which contains the data members of SiStripCluster legacy class reshuffled into a PortableCollection SoA;
  • SiStripDigiSoA, as above but for the SiStripDigi class.

MaxSeedStrips As explained in [1], the clusterizer's parallel implementation requires to pre-allocate the cluster candidate collection (host operation) at a time where the total number of cluster candidates is not known. Therefore, the MaxSeedStrips parameter is introduced in the parallel version. It determines the maximum number of cluster candidates per event that can be produced.

It is configurable during module setup. The sensitivity of clusters produced as a function of this parameter is investigated with PU MC run [2]. The default value is set to $2e5$. The parameter can be personalized with

process.hltSiStripRawToClustersFacilityAlpaka.Clusterizer.MaxSeedStrips = cms.uint32(200000)

Physics validation

The heterogeneous module is validated by comparing the track quality with respect to legacy, and by looking at the strip DQM plots [7], using 9400 events from the dataset /RelValTTbar_14TeV/CMSSW_15_0_0-PU_142X_mcRun3_2025_realistic_v7_STD_2025_PU-v3/GEN-SIM-DIGI-RAW with the menu /dev/CMSSW_15_0_0/GRun/V76 running MC_ReducedIterativeTracking_v24 path only in CMSSW_15_0_6.

Validation plots are available here [8], with the recipe to reproduce (and files) reported in the accordion below.

Recipe
Steps

Preparation of step 1 (hltx_trackingOnly_MC_1.py) configuration files:

hltGetConfiguration /dev/CMSSW_15_0_0/GRun/V76 --globaltag 142X_mcRun3_2025_realistic_v7 --mc --unprescale --output minimal --eras Run3_2025 --l1-emulator uGT --paths MC_ReducedIterativeTracking_v24 --max-events 1000 --input /store/relval/CMSSW_15_0_0/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU_142X_mcRun3_2025_realistic_v7_STD_2025_PU-v3/2580000/067c3ad3-f8cf-493a-9511-57ec6d2ff29e.root &> hltx_trackingOnly_MC_1.py

The step 2 for the HLTRACKVALIDATOR process is available in [9].

The step 3 is the standard harvester for hltMerged [10].

For example, the following script is used to generate legacy/alpakaGPU/alpakaSerial files

#!/bin/bash
for i in {1..10}; do
  echo ">>> Iteration $i"

  cp hltx_trackingOnly_MC_$i.py hltx_trackingOnly_MC.py
  ## Legacy
  cmsRun hltx_trackingOnly_MC_legacy.py &> step1_legacy.log$i
  cmsRun hltValidation_default.py --appendStr _legacy &> step2_legacy.log$i
  cmsRun Harvesting.py --appendStr _legacy &> step3_legacy.log$i
  mv DQM_V0001_R000000001__Global__CMSSW_X_Y_Z__RECO.root step3_legacy.$i.root
  rm step1_legacy.root
  mv step2_legacy_DQMoutput.root step2_legacy_DQMoutput.$i.root

  ## Alpaka GPU
  cmsRun hltx_trackingOnly_MC_alpaka.py --moduleBackend cuda_async &> step1_alpakaGPU.log$i
  cmsRun hltValidation_default.py --appendStr _alpakaGPU &> step2_alpakaGPU.log$i
  cmsRun Harvesting.py --appendStr _alpakaGPU &> step3_alpakaGPU.log$i
  mv DQM_V0001_R000000001__Global__CMSSW_X_Y_Z__RECO.root step3_alpakaGPU.$i.root
  rm step1_alpakaGPU.root
  mv step2_alpakaGPU_DQMoutput.root step2_alpakaGPU_DQMoutput.$i.root

  ## Alpaka CPU
  cmsRun hltx_trackingOnly_MC_alpaka.py --moduleBackend serial_sync &> step1_alpakaCPU.log$i
  cmsRun hltValidation_default.py --appendStr _alpakaCPU &> step2_alpakaCPU.log$i
  cmsRun Harvesting.py --appendStr _alpakaCPU &> step3_alpakaCPU.log$i
  mv DQM_V0001_R000000001__Global__CMSSW_X_Y_Z__RECO.root step3_alpakaCPU.$i.root
  rm step1_alpakaCPU.root
  mv step2_alpakaCPU_DQMoutput.root step2_alpakaCPU_DQMoutput.$i.root
done

mv ./*.root ./data/
mv ./*.log* ./logs/
Files
/store/relval/CMSSW_15_0_0/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU_142X_mcRun3_2025_realistic_v7_STD_2025_PU-v3/2580000/067c3ad3-f8cf-493a-9511-57ec6d2ff29e.root
/store/relval/CMSSW_15_0_0/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU_142X_mcRun3_2025_realistic_v7_STD_2025_PU-v3/2580000/067c3ad3-f8cf-493a-9511-57ec6d2ff29e.root
/store/relval/CMSSW_15_0_0/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU_142X_mcRun3_2025_realistic_v7_STD_2025_PU-v3/2580000/067c3ad3-f8cf-493a-9511-57ec6d2ff29e.root
/store/relval/CMSSW_15_0_0/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU_142X_mcRun3_2025_realistic_v7_STD_2025_PU-v3/2580000/067c3ad3-f8cf-493a-9511-57ec6d2ff29e.root
/store/relval/CMSSW_15_0_0/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU_142X_mcRun3_2025_realistic_v7_STD_2025_PU-v3/2580000/067c3ad3-f8cf-493a-9511-57ec6d2ff29e.root
/store/relval/CMSSW_15_0_0/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU_142X_mcRun3_2025_realistic_v7_STD_2025_PU-v3/2580000/067c3ad3-f8cf-493a-9511-57ec6d2ff29e.root
/store/relval/CMSSW_15_0_0/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU_142X_mcRun3_2025_realistic_v7_STD_2025_PU-v3/2580000/067c3ad3-f8cf-493a-9511-57ec6d2ff29e.root
/store/relval/CMSSW_15_0_0/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU_142X_mcRun3_2025_realistic_v7_STD_2025_PU-v3/2580000/067c3ad3-f8cf-493a-9511-57ec6d2ff29e.root
/store/relval/CMSSW_15_0_0/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU_142X_mcRun3_2025_realistic_v7_STD_2025_PU-v3/2580000/067c3ad3-f8cf-493a-9511-57ec6d2ff29e.root
/store/relval/CMSSW_15_0_0/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU_142X_mcRun3_2025_realistic_v7_STD_2025_PU-v3/2580000/067c3ad3-f8cf-493a-9511-57ec6d2ff29e.root
Early validation (in CMSSW_15_1_0_pre1)

An early validation was done on a smaller number of events (731) from /store/mc/Run3Winter25Digi/TT_TuneCP5_13p6TeV_powheg-pythia8/GEN-SIM-DIGI-RAW/TrkFEVT_142X_mcRun3_2025_realistic_v7-v2/910002/0157fbd9-e915-4a10-bfe2-11db61e2b70d.root of PU MC data, in CMSSW_15_1_0_pre1 with /dev/CMSSW_15_1_0/GRun/V3 running only MC_ReducedIterativeTracking_v22 path [5].

Deviations were found between the legacy and heterogeneous (i.e. see [5.1]) and discussed on Tracking POG meeting [6]. A cluster excess O(1) is found in the heterogeneous with respect to legacy having occurrence of O(12/500) events. The deviation legacy-heterogeneous was considered to have negligible impact on the performance by tracking experts during [6].


Timing

The most recent timing measurement is reported below, using Run2025 data Run392642 with L1 L1Menu_Collisions2025_v1_1_1-d2 and HLT /dev/CMSSW_15_0_0/GRun/V76, GlobalTag 150X_dataRun3_HLT_v1 in CMSSW_15_0_6 release

configuration throughput (time/ev)_avg =
unpacking+clustering (+legacy conversion)
ECAL-GPU
legacy[D] 545.9 ± 2.7 evt/s 34.2 ms =
hltSiStripRawToClustersFacility (34.2 ms)
4.0 ms
heterogeneous[E] 556.5 ± 0.9 evt/s 13.5 ms =
hltSiStripRawToClustersFacilityAlpaka (6.0 ms) + hltSiStripRawToClustersFacility (7.5 ms)
9.3 ms
heterogeneous (serial)[F] 509 ± 2.2 evt/s 68.6 ms =
hltSiStripRawToClustersFacilityAlpaka (59.5 ms) + hltSiStripRawToClustersFacility (9.1 ms)
3.2 ms

The measures have been done on the timing server one after the other, launching the jobs in area mode from lxplus8 from a fresh CMSSW area with the PR rebased on 15_0_6.

Previous measurements (Run2024)

using Run2024 data Run392642 with L1 L1Menu_Collisions2024_v1_3_0-d1_xml and HLT /dev/CMSSW_15_0_0/GRun/V79, GlobalTag 150X_dataRun3_HLT_v1 in CMSSW_15_0_6 release:

configuration throughput (time/ev)_avg =
unpacking+clustering (+legacy conversion)
ECAL-GPU
legacy global unpacking[A] 529.6 ± 2.5 evt/s 32.1 ms =
hltSiStripRawToClustersFacility (32.1 ms)
5.7 ms
alpaka global unpacking on CPU[B] 506.8 ± 2.7 evt/s 54.9 ms =
hltSiStripRawToClustersFacilityAlpaka (46.9 ms) + hltSiStripRawToClustersFacility (7.9 ms)
4.6 ms
alpaka global unpacking on GPU[C] 534.5 ± 2.9 evt/s 13.5 ms =
hltSiStripRawToClustersFacilityAlpaka (5.8 ms) + hltSiStripRawToClustersFacility (7.7 ms)
15.8 ms

Usage and customizer

Compilation

To create a CMSSW_15_0_1_pre1 area

scram project CMSSW_15_0_1_pre1
cd CMSSW_15_0_1_pre1/src
cmsenv
git cms-merge-topic pietroGru:47629
scram b

Timing measurements were done after rebase in CMSSW_15_0_6

scram project CMSSW_15_0_6
cd CMSSW_15_0_6/src
cmsenv
git cms-merge-topic --old-base CMSSW_15_0_1_pre1 pietroGru:47629
scram b

Customizer

A customizer called customizeHLTStripClustersFromRaw_alpaka performs the following operations to replace the legacy module with the heterogeneous one: (a) it attaches to process the SiStripClusterizerConditionsESProducerAlpaka ESProducer generating device conditions; (b) it attaches to process the cluster producer (process.hltSiStripRawToClustersFacilityAlpaka) which inherits all the arguments of the legacy module from process.hltSiStripRawToClustersFacility; (c) it replaces the legacy process.hltSiStripRawToClustersFacility with the module converting the cluster SoA into the legacy format (i.e., what the legacy module outputs).

For example

hltGetConfiguration [...] \
  --customise RecoLocalTracker/SiStripClusterizer/customizeStripClustersFromRaw.customizeHLTStripClustersFromRaw_alpaka
To run the module serially on CPU

The following can be appended to the hlt.py

process.hltSiStripRawToClustersFacilityAlpaka.alpaka = cms.untracked.PSet(
  # ("serial_sync" or "cuda_async" or "rocm_async")
  backend = cms.untracked.string("serial_sync")
)

History

  • This work was on top of an Alpaka porting of the CUDA unpacker/clusterizer [3]
  • Originally based on CMSSW_14_2_0, then moved to CMSSW_15_0_1_pre1
  • The PR stayed in draft and then was opened, resulting in a large number of commits (71). After [11], it was decided to squash them in order to cleanout the repository. The three main commits containing the dataformats, ES/EDProducer and converter were made. The description of the PR was updated for more clarity, accordingly.
  • A backup of the repository before squashing [12], as well as a dump of the PR page with all comments [13]

References

[1] https://indico.cern.ch/event/1554466/#68-update-on-alpaka-strip-unpa [2] using /store/mc/Run3Winter25Digi/TT_TuneCP5_13p6TeV_powheg-pythia8 https://pgrutta.web.cern.ch/siStripClusterizer_1510pre1/validation_v4_compare/clustersMonitor.html [3] https://github.com/cms-sw/cmssw/pull/34618 [4] https://mattermost.web.cern.ch/cms-exp/channels/sistrip-unpacking-on-gpu [5] https://pgrutta.web.cern.ch/siStripClusterizer_1510pre1/validation_v2/ [5.1] https://pgrutta.web.cern.ch/siStripClusterizer_1510pre1/validation_v2/plots_hlt_hltMerged/effandfakePtEtaPhi.pdf [6] https://indico.cern.ch/event/1549492/#66-strip-detector-unpacking-on [7] DQM/HLTEvF/python/HLTSiStripMonitoring_cff.py [8] https://pgrutta.web.cern.ch/siStripClusterizer_1510pre1/validation_v4.2 [9] https://pgrutta.web.cern.ch/siStripClusterizer_1510pre1/config/hltValidation_default.py [10] https://pgrutta.web.cern.ch/siStripClusterizer_1510pre1/config/Harvesting.py, https://pgrutta.web.cern.ch/siStripClusterizer_1510pre1/config/Harvesting_all.py [11] https://indico.cern.ch/event/1567945/ [12] https://github.com/pietroGru/cmssw/tree/backup/siStripClusterizer_1510pre1_preSquash [13] https://pgrutta.web.cern.ch/siStripClusterizer_1510pre1/backup_47629.pdf

[A] https://cmshlttiming.app.cern.ch/display/pgrutta/CMSSW_15_0_6_LegacyGlobal_16.20250528_183634 [B] https://cmshlttiming.app.cern.ch/display/pgrutta/CMSSW_15_0_6_Heterogeneous_Serial_16.20250528_163330 [C] https://cmshlttiming.app.cern.ch/display/pgrutta/CMSSW_15_0_6_Heterogeneous_16.20250528_163207 [D] https://cmshlttiming.app.cern.ch/display/pgrutta/CMSSW_15_0_6_LegacyBaseline.20250725_151017 [E] https://cmshlttiming.app.cern.ch/display/pgrutta/CMSSW_15_0_6_Heterogeneous.20250725_150923 [F] https://cmshlttiming.app.cern.ch/display/pgrutta/CMSSW_15_0_6_Heterogeneous_serial.20250725_150820

pietroGru avatar Mar 19 '25 18:03 pietroGru

cms-bot internal usage

cmsbuild avatar Mar 19 '25 18:03 cmsbuild

+code-checks

Logs: https://cmssdt.cern.ch/SDT/code-checks/cms-sw-PR-47629/44152

  • There are other open Pull requests which might conflict with changes you have proposed:
    • File RecoLocalTracker/SiStripClusterizer/python/customizeStripClustersFromRaw.py modified in PR(s): #46076

cmsbuild avatar Mar 19 '25 18:03 cmsbuild

sorry, a very naive first trial of this via:

#!/bin/bash -ex

# cmsrel CMSSW_15_1_X_2025-03-18-2300
# cd CMSSW_15_1_X_2025-03-18-2300/src/
# cmsenv
# git cms-merge-topic 47629
# scram b -j 20

hltGetConfiguration /dev/CMSSW_15_0_0/GRun \
   --globaltag 150X_dataRun3_HLT_v1 \
   --data \
   --unprescale \
   --output minimal \
   --max-events 100 \
   --eras Run3_2024 --l1-emulator uGT --l1 L1Menu_Collisions2024_v1_3_0_xml \
   --customise RecoLocalTracker/SiStripClusterizer/customizeStripClustersFromRaw.customizeHLTStripClustersFromRaw_alpaka \
   --input /store/data/Run2024I/EphemeralHLTPhysics0/RAW/v1/000/386/593/00000/91a08676-199e-404c-9957-f72772ef1354.root \
   > hltData.py

cmsRun hltData.py >& hltData.log

leads me to:

----- Begin Fatal Exception 19-Mar-2025 21:44:08 CET-----------------------
An exception of category 'RawToDigi' occurred while
   [0] Processing  Event run: 386593 lumi: 235 event: 535750267 stream: 2
   [1] Running path 'MC_ReducedIterativeTracking_v22'
   [2] Calling method for module SiStripRawToCluster@alpaka/'hltSiStripRawToClustersFacilityAlpaka'
Exception Message:
Unsupported readout mode: Zero suppressed lite (8 bit, top-stripped)
----- End Fatal Exception -------------------------------------------------

was this ever tested in recent Run 3 real data? @cms-sw/trk-dpg-l2 FYI

mmusich avatar Mar 19 '25 20:03 mmusich

sorry, a very naive first trial of this leads me to:

----- Begin Fatal Exception 19-Mar-2025 21:44:08 CET-----------------------
An exception of category 'RawToDigi' occurred while
   [0] Processing  Event run: 386593 lumi: 235 event: 535750267 stream: 2
   [1] Running path 'MC_ReducedIterativeTracking_v22'
   [2] Calling method for module SiStripRawToCluster@alpaka/'hltSiStripRawToClustersFacilityAlpaka'
Exception Message:
Unsupported readout mode: Zero suppressed lite (8 bit, top-stripped)
----- End Fatal Exception -------------------------------------------------

was this ever tested in recent Run 3 real data? @cms-sw/trk-dpg-l2 FYI

This is the same behaviour that we found when running on real data today. After this independent check (thank you) I am afraid that another bullet point should be inserted, in order to allow for the raw->digi kernel to unpack the ZS_LITE8, at the very least.

When I ran tests, I always used MC data as for example /RelValTTbar_14TeV/CMSSW_14_2_0-PU_142X_mcRun3_2025_realistic_v4_Winter25_PU_RV255-v2/GEN-SIM-DIGI-RAW. I will double check with some more recent MC but I guess it is possible that the MC still produce FEDcollections which are ZS 10-bit packed.

pietroGru avatar Mar 19 '25 22:03 pietroGru

This is the same behaviour that we found when running on real data today. After this independent check (thank you) I am afraid that another bullet point should be inserted, in order to allow for the raw->digi kernel to unpack the ZS_LITE8, at the very least.

When I ran tests, I always used MC data as for example /RelValTTbar_14TeV/CMSSW_14_2_0-PU_142X_mcRun3_2025_realistic_v4_Winter25_PU_RV255-v2/GEN-SIM-DIGI-RAW . I will double check with some more recent MC but I guess it is possible that the MC still produce FEDcollections which are ZS 10-bit packed.

As far as I know (all of this information has been cross-checked with Tracker Ops):

  • the normal operations mode since beginning of Run 2 (in pp and cosmics during pp interfills data-taking) for packing the Strip Tracker data is ZS lite 8 bits with 2 highest bits being stripped (in principle we have another 2 modes for 8 bits with one high one / low strips and two low stripped, basically losing resolution instead of dynamic range);
  • in Heavy Ion data we use ZS 10 bits;
  • last year for a brief period of time we had been running without realizing in ZS normal but due to high dead-time on the FEDs most populated in TIB Layer 1 this was reverted and we've been running in ZS lite again since then (in Run 1 we were limited to 80 kHz when running in ZS Normal)
  • In MC simulation the Strip packer module, as far as I know has always been and still uses Standard ZS:

https://github.com/cms-sw/cmssw/blob/8fd36f394766629116ffa00185e35b1579ec2f0b/EventFilter/SiStripRawToDigi/python/SiStripDigiToRaw_cfi.py#L3-L7

mmusich avatar Mar 20 '25 07:03 mmusich

Hi @dan131riley , can you comment on the motivation you had the ZS readout mode in your original PR with cuda implementation?

Thank you! Pietro

pietroGru avatar Mar 20 '25 18:03 pietroGru

https://mattermost.web.cern.ch/cms-exp/channels/sistrip-unpacking-on-gpu

this is in Italian, not very useful

slava77 avatar Mar 21 '25 15:03 slava77

https://mattermost.web.cern.ch/cms-exp/channels/sistrip-unpacking-on-gpu

this is in Italian, not very useful

It is true: former discussion on the mattermost channel, as you noted, is in italian. This is about the stages from the cuda version to the alpaka one, leading to the 1:1 match of the cuda product in alpaka. This module is the subject of the PR.

However, the PR is in draft mode because - as clearly emerged from the previous comments - in order to integrate this module one has to go beyond 1:1 port of the cuda code. In fact, implementation of fed raw unpacking shall include at the very least the 8-bit ZS mode.

On the premise that (a) the material in the channel so far - indeed in italian - concers the "relatively-trivial" stages of the cuda-alpaka porting, I directly shared the link to the channel. Giving for granted that once this discussion on the additional features to append to the PR with you experts would have been by default in english.

Now that this background is more clear, would you recommend to create a fresh channel from scratch?

pietroGru avatar Mar 21 '25 15:03 pietroGru

Now that this background is more clear, would you recommend to create a fresh channel from scratch?

I think that it's more practical to discuss code specifics for what needs updates in an available PR thread (here).

Maybe for some future discussion the MM can be still useful

slava77 avatar Mar 21 '25 15:03 slava77

assign heterogeneous

fwyzard avatar Mar 23 '25 13:03 fwyzard

New categories assigned: heterogeneous

@fwyzard,@makortel you have been requested to review this Pull request/Issue and eventually sign? Thanks

cmsbuild avatar Mar 23 '25 13:03 cmsbuild

+code-checks

Logs: https://cmssdt.cern.ch/SDT/code-checks/cms-sw-PR-47629/44214

  • Found files with invalid states:

    • CondFormats/SiStripObjects/interface/SiStripClusterizerConditionsSoA.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/README.md:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/TestSiStripMappingSoA.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripMappingDevice.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/src/alpaka/T_EventSetup_SiStrip.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/alpaka/SiStripMappingDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripClusterizerConditionsDevice.dev.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripClusterizerConditionsDevice.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripClusterizerConditionsDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripMappingDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripMappingDevice.dev.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/TestSiStripClusterizerConditionsSoA.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/SiStripClusterizerConditionsHost.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/SiStripMappingHost.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/alpaka/SiStripClusterizerConditionsDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/SiStripMappingSoA.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
  • There are other open Pull requests which might conflict with changes you have proposed:

    • File RecoLocalTracker/SiStripClusterizer/python/customizeStripClustersFromRaw.py modified in PR(s): #46076

cmsbuild avatar Mar 24 '25 18:03 cmsbuild

Pull request #47629 was updated.

cmsbuild avatar Mar 24 '25 18:03 cmsbuild

-code-checks

Logs: https://cmssdt.cern.ch/SDT/code-checks/cms-sw-PR-47629/44224

  • Found files with invalid states:

    • CondFormats/SiStripObjects/interface/SiStripClusterizerConditionsSoA.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/README.md:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/TestSiStripMappingSoA.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripMappingDevice.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/src/alpaka/T_EventSetup_SiStrip.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/alpaka/SiStripMappingDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripClusterizerConditionsDevice.dev.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripClusterizerConditionsDevice.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripClusterizerConditionsDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripMappingDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripMappingDevice.dev.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/TestSiStripClusterizerConditionsSoA.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/SiStripClusterizerConditionsHost.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/SiStripMappingHost.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/alpaka/SiStripClusterizerConditionsDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/SiStripMappingSoA.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
  • There are other open Pull requests which might conflict with changes you have proposed:

    • File RecoLocalTracker/SiStripClusterizer/python/customizeStripClustersFromRaw.py modified in PR(s): #46076

Code check has found code style and quality issues which could be resolved by applying following patch(s)

  • code-format: https://cmssdt.cern.ch/SDT/code-checks/cms-sw-PR-47629/44224/code-format.patch e.g. curl -k https://cmssdt.cern.ch/SDT/code-checks/cms-sw-PR-47629/44224/code-format.patch | patch -p1 You can also run scram build code-format to apply code format directly

cmsbuild avatar Mar 25 '25 14:03 cmsbuild

+code-checks

Logs: https://cmssdt.cern.ch/SDT/code-checks/cms-sw-PR-47629/44226

  • Found files with invalid states:

    • CondFormats/SiStripObjects/interface/SiStripClusterizerConditionsSoA.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/README.md:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/TestSiStripMappingSoA.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripMappingDevice.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/src/alpaka/T_EventSetup_SiStrip.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/alpaka/SiStripMappingDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripClusterizerConditionsDevice.dev.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripClusterizerConditionsDevice.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripClusterizerConditionsDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripMappingDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripMappingDevice.dev.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/TestSiStripClusterizerConditionsSoA.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/SiStripClusterizerConditionsHost.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/SiStripMappingHost.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/alpaka/SiStripClusterizerConditionsDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/SiStripMappingSoA.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
  • There are other open Pull requests which might conflict with changes you have proposed:

    • File RecoLocalTracker/SiStripClusterizer/python/customizeStripClustersFromRaw.py modified in PR(s): #46076

cmsbuild avatar Mar 25 '25 14:03 cmsbuild

Pull request #47629 was updated.

cmsbuild avatar Mar 25 '25 14:03 cmsbuild

@mmasciov and @slava77 can you please comment on the consistency check for mode in https://github.com/cms-sw/cmssw/blob/master/RecoLocalTracker/SiStripClusterizer/plugins/SiStripRawToClusterGPUKernel.cc#L65-L68

In particular,

  • is the readout mode expected to be consistent between one buffer and another?
  • Or it was only a way to ensure that in (case the mode was not consistent) AND (not one of the envisaged two) the module would have stopped? [1]

[1] The envisaged two are READOUT_MODE_ZERO_SUPPRESSED and READOUT_MODE_ZERO_SUPPRESSED_LITE10 as from https://github.com/cms-sw/cmssw/blob/master/RecoLocalTracker/SiStripClusterizer/plugins/SiStripRawToClusterGPUKernel.cc#L76-L78


What about the len == 0 case? Why does this happen? https://github.com/cms-sw/cmssw/blob/master/RecoLocalTracker/SiStripClusterizer/plugins/SiStripRawToClusterGPUKernel.cc#L99

pietroGru avatar Mar 26 '25 14:03 pietroGru

@mmasciov and @slava77 can you please comment on the consistency check for mode in https://github.com/cms-sw/cmssw/blob/master/RecoLocalTracker/SiStripClusterizer/plugins/SiStripRawToClusterGPUKernel.cc#L65-L68

In particular,

  • is the readout mode expected to be consistent between one buffer and another?
  • Or it was only a way to ensure that in (case the mode was not consistent) AND (not one of the envisaged two) the module would have stopped? [1]

[1] The envisaged two are READOUT_MODE_ZERO_SUPPRESSED and READOUT_MODE_ZERO_SUPPRESSED_LITE10 as from https://github.com/cms-sw/cmssw/blob/master/RecoLocalTracker/SiStripClusterizer/plugins/SiStripRawToClusterGPUKernel.cc#L76-L78

What about the len == 0 case? Why does this happen? https://github.com/cms-sw/cmssw/blob/master/RecoLocalTracker/SiStripClusterizer/plugins/SiStripRawToClusterGPUKernel.cc#L99

Let me tag @dan131riley, since he wrote this and knows best.

mmasciov avatar Mar 27 '25 11:03 mmasciov

+code-checks

Logs: https://cmssdt.cern.ch/SDT/code-checks/cms-sw-PR-47629/44296

  • Found files with invalid states:

    • CondFormats/SiStripObjects/interface/SiStripClusterizerConditionsSoA.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/README.md:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/TestSiStripMappingSoA.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripMappingDevice.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/src/alpaka/T_EventSetup_SiStrip.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/alpaka/SiStripMappingDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripClusterizerConditionsDevice.dev.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripClusterizerConditionsDevice.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripClusterizerConditionsDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • RecoLocalTracker/SiStripClusterizer/plugins/alpaka/SiStripClustersToLegacy.cc:
      • Added: 9593e53c1267d7676de9d883a5e787b3aeb41b86
      • Modified: 8c79c7c3feb85831eca4bff355da38a7a5f8daf5, 9fe439a4025eae782fdfbef706167dda573653f4
      • Deleted: 112bdc42c31a90d8acf0b17a0569ed1b519a3692
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripMappingDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripMappingDevice.dev.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/TestSiStripClusterizerConditionsSoA.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/SiStripClusterizerConditionsHost.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/SiStripMappingHost.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/alpaka/SiStripClusterizerConditionsDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/SiStripMappingSoA.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
  • There are other open Pull requests which might conflict with changes you have proposed:

    • File RecoLocalTracker/SiStripClusterizer/python/customizeStripClustersFromRaw.py modified in PR(s): #46076

cmsbuild avatar Mar 28 '25 14:03 cmsbuild

Pull request #47629 was updated.

cmsbuild avatar Mar 28 '25 14:03 cmsbuild

Hi @dan131riley , I noted a detail in the ZS unpacking in your cuda core, which I would like to have clarified.

In the unpacked Digi, there are invalidStrip at the beginning of each FEDChannel. The part in the cuda code responsible for this is here: https://github.com/pietroGru/cmssw/blob/siStripClusterizer_1510pre1/RecoLocalTracker/SiStripClusterizer/plugins/SiStripRawToClusterGPUKernel.cu#L58-L61 The resulting unpacked strips have the form

%MSG-d unpackStrips:   sistrip::SiStripRawToCluster@alpaka:hltSiStripRawToClustersFacilityAlpaka  30-Mar-2025 17:22:10 CEST Run: 386593 Event: 536206491 SiStripRawToClusterAlgo.dev.cc:867
Allocated 643879 strips
i       adc     chan    stripId
0       0 65535
1       0 65535
2       20 71
3       110 72
4       128 73
5       0 65535
6       0 65535
7       104 129
8       20 130
9       0 65535
10      0 65535
11      16 215
12      89 216
13      40 217
14      15 218
15      0 65535
16      0 65535
17      58 261

Where the two entries with invalidStrip are due to the two lines of your code https://github.com/pietroGru/cmssw/blob/siStripClusterizer_1510pre1/RecoLocalTracker/SiStripClusterizer/plugins/SiStripRawToClusterGPUKernel.cu#L58-L61 responsible for shifting the aoff index.

I believe that such a choice was to align the structures produced by the "standard" cpu unpacker https://github.com/pietroGru/cmssw/blob/siStripClusterizer_1510pre1/EventFilter/SiStripRawToDigi/interface/SiStripFEDBuffer.h#L288-L290 in which the first byte of the FEDChannel data contains the information on how many strips this object is storing: https://github.com/pietroGru/cmssw/blob/siStripClusterizer_1510pre1/EventFilter/SiStripRawToDigi/interface/SiStripFEDBuffer.h#L289C13-L289C24

In accounting for the amount of bytes needed in the unpacked digi structure https://github.com/pietroGru/cmssw/blob/siStripClusterizer_1510pre1/RecoLocalTracker/SiStripClusterizer/plugins/SiStripRawToClusterGPUKernel.cc#L99-L104 the headerLen is already subtracted in the calculation of the bytes https://github.com/pietroGru/cmssw/blob/siStripClusterizer_1510pre1/RecoLocalTracker/SiStripClusterizer/plugins/SiStripRawToClusterGPUKernel.cc#L116 needed for the strips - as this is not relevant and its memory can be saved.

However, there are these two entries of the unpacked object you are filling https://github.com/pietroGru/cmssw/blob/siStripClusterizer_1510pre1/RecoLocalTracker/SiStripClusterizer/plugins/SiStripRawToClusterGPUKernel.cu#L58-L66 which are eventually masked out https://github.com/pietroGru/cmssw/blob/siStripClusterizer_1510pre1/RecoLocalTracker/SiStripClusterizer/plugins/SiStripRawToClusterGPUKernel.cu#L93 and not being used.

Can you explain in detail what is the purpose of this? Thank you!

pietroGru avatar Mar 30 '25 15:03 pietroGru

+code-checks

Logs: https://cmssdt.cern.ch/SDT/code-checks/cms-sw-PR-47629/44309

  • Found files with invalid states:

    • CondFormats/SiStripObjects/interface/SiStripClusterizerConditionsSoA.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/README.md:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/TestSiStripMappingSoA.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripMappingDevice.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/src/alpaka/T_EventSetup_SiStrip.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/alpaka/SiStripMappingDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripClusterizerConditionsDevice.dev.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripClusterizerConditionsDevice.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripClusterizerConditionsDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • RecoLocalTracker/SiStripClusterizer/plugins/alpaka/SiStripClustersToLegacy.cc:
      • Added: 9593e53c1267d7676de9d883a5e787b3aeb41b86
      • Modified: 8c79c7c3feb85831eca4bff355da38a7a5f8daf5, 9fe439a4025eae782fdfbef706167dda573653f4
      • Deleted: 112bdc42c31a90d8acf0b17a0569ed1b519a3692
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripMappingDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripMappingDevice.dev.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/TestSiStripClusterizerConditionsSoA.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/SiStripClusterizerConditionsHost.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/SiStripMappingHost.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/alpaka/SiStripClusterizerConditionsDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/SiStripMappingSoA.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
  • There are other open Pull requests which might conflict with changes you have proposed:

    • File RecoLocalTracker/SiStripClusterizer/python/customizeStripClustersFromRaw.py modified in PR(s): #46076

cmsbuild avatar Mar 30 '25 17:03 cmsbuild

Pull request #47629 was updated.

cmsbuild avatar Mar 30 '25 17:03 cmsbuild

Hi @dan131riley , I noted a detail in the ZS unpacking in your cuda core, which I would like to have clarified.

In the unpacked Digi, there are invalidStrip at the beginning of each FEDChannel. The part in the cuda code responsible for this is here:

For the ZS unpacking, there's two levels of data containers. There's an outer container for each channel, which gets parsed in the CPU code (in the CUDA version) and is not copied to the GPU. Then within the channel, in the zero suppressed mode the data are run length encoded--for every run of consecutive strips that aren't zero supporessed, there's a byte for the starting strip within the channel and a length of the run. I believe optimizing those two bytes out would require introducing a serial step that maps out where the clusters start, which I was trying to avoid.

Where the two entries with invalidStrip are due to the two lines of your code https://github.com/pietroGru/cmssw/blob/siStripClusterizer_1510pre1/RecoLocalTracker/SiStripClusterizer/plugins/SiStripRawToClusterGPUKernel.cu#L58-L61 responsible for shifting the aoff index.

Those two bytes are in the incoming data stream, setting them to invalidStrip tells the rest of the algorithm to ignore these without requiring an additional serial pass to map out the individual clusters.

In accounting for the amount of bytes needed in the unpacked digi structure https://github.com/pietroGru/cmssw/blob/siStripClusterizer_1510pre1/RecoLocalTracker/SiStripClusterizer/plugins/SiStripRawToClusterGPUKernel.cc#L99-L104 the headerLen is already subtracted in the calculation of the bytes https://github.com/pietroGru/cmssw/blob/siStripClusterizer_1510pre1/RecoLocalTracker/SiStripClusterizer/plugins/SiStripRawToClusterGPUKernel.cc#L116 needed for the strips - as this is not relevant and its memory can be saved.

The FED channel header is subtracted out, but those two bytes/cluster are not the channel header.

However, there are these two entries of the unpacked object you are filling https://github.com/pietroGru/cmssw/blob/siStripClusterizer_1510pre1/RecoLocalTracker/SiStripClusterizer/plugins/SiStripRawToClusterGPUKernel.cu#L58-L66 which are eventually masked out https://github.com/pietroGru/cmssw/blob/siStripClusterizer_1510pre1/RecoLocalTracker/SiStripClusterizer/plugins/SiStripRawToClusterGPUKernel.cu#L93 and not being used.

Can you explain in detail what is the purpose of this? Thank you!

Those two entries are used to set the stripId array. That and the channel array could be reduced in size by using the run length encoding again, but it gets tricky doing that in parallel as you don't know how many clusters there are in any channel.

dan131riley avatar Mar 31 '25 19:03 dan131riley

Thanks Dan! (and thank you all for your valuable comments) There are a few open point left to be addressed: they mostly include the "unresolved" comments. During the Short Joint Tracker DPG / Tracking POG meeting we covered all remaning open points (included here).

It has been recommended to request a test run, during cosmics, in which we request to change the readout mode of a fed channel - i.e., during data taking. We are discussing this today and planning for the request and coordination with ops.

pietroGru avatar Apr 03 '25 10:04 pietroGru

+code-checks

Logs: https://cmssdt.cern.ch/SDT/code-checks/cms-sw-PR-47629/44556

  • Found files with invalid states:

    • CondFormats/SiStripObjects/interface/SiStripClusterizerConditionsSoA.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/README.md:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/TestSiStripMappingSoA.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripMappingDevice.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/src/alpaka/T_EventSetup_SiStrip.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/alpaka/SiStripMappingDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripClusterizerConditionsDevice.dev.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripClusterizerConditionsDevice.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripClusterizerConditionsDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • RecoLocalTracker/SiStripClusterizer/plugins/alpaka/SiStripClustersToLegacy.cc:
      • Added: 9593e53c1267d7676de9d883a5e787b3aeb41b86
      • Modified: 8c79c7c3feb85831eca4bff355da38a7a5f8daf5, 9fe439a4025eae782fdfbef706167dda573653f4
      • Deleted: 112bdc42c31a90d8acf0b17a0569ed1b519a3692
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripMappingDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripMappingDevice.dev.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/TestSiStripClusterizerConditionsSoA.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/SiStripClusterizerConditionsHost.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/SiStripMappingHost.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/alpaka/SiStripClusterizerConditionsDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/SiStripMappingSoA.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
  • There are other open Pull requests which might conflict with changes you have proposed:

    • File DataFormats/Common/src/classes_def.xml modified in PR(s): #47793
    • File RecoLocalTracker/SiStripClusterizer/python/customizeStripClustersFromRaw.py modified in PR(s): #46076

cmsbuild avatar Apr 18 '25 07:04 cmsbuild

Pull request #47629 was updated.

cmsbuild avatar Apr 18 '25 07:04 cmsbuild

-code-checks

Logs: https://cmssdt.cern.ch/SDT/code-checks/cms-sw-PR-47629/45061

ERROR: Unable to merge PR.

See log https://cmssdt.cern.ch/SDT/code-checks/cms-sw-PR-47629/45061/cms-checkout-topic.log

cmsbuild avatar Jun 05 '25 10:06 cmsbuild

+code-checks

Logs: https://cmssdt.cern.ch/SDT/code-checks/cms-sw-PR-47629/45062

  • Found files with invalid states:

    • CondFormats/SiStripObjects/interface/SiStripClusterizerConditionsSoA.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/README.md:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/TestSiStripMappingSoA.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripMappingDevice.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/src/alpaka/T_EventSetup_SiStrip.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/alpaka/SiStripMappingDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripClusterizerConditionsDevice.dev.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripClusterizerConditionsDevice.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripClusterizerConditionsDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • RecoLocalTracker/SiStripClusterizer/plugins/alpaka/SiStripClustersToLegacy.cc:
      • Added: 9593e53c1267d7676de9d883a5e787b3aeb41b86
      • Modified: 8c79c7c3feb85831eca4bff355da38a7a5f8daf5, 9fe439a4025eae782fdfbef706167dda573653f4
      • Deleted: 112bdc42c31a90d8acf0b17a0569ed1b519a3692
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripMappingDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/alpaka/TestSiStripMappingDevice.dev.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/test/TestSiStripClusterizerConditionsSoA.cc:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/SiStripClusterizerConditionsHost.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/SiStripMappingHost.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/alpaka/SiStripClusterizerConditionsDevice.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
    • CondFormats/SiStripObjects/interface/SiStripMappingSoA.h:
      • Added: dc0e229accc7ca37899571ef42a54db91ba35c36
      • Deleted: f504f95c69b74c490a37aefdc13ce94036dc04ed
  • There are other open Pull requests which might conflict with changes you have proposed:

    • File RecoLocalTracker/SiStripClusterizer/python/customizeStripClustersFromRaw.py modified in PR(s): #46076

cmsbuild avatar Jun 05 '25 10:06 cmsbuild

Pull request #47629 was updated.

cmsbuild avatar Jun 05 '25 10:06 cmsbuild