Skip to content

feat: add decoding as a multi-threaded CLARA engine#1229

Open
baltzell wants to merge 45 commits into
developmentfrom
decoder-engine
Open

feat: add decoding as a multi-threaded CLARA engine#1229
baltzell wants to merge 45 commits into
developmentfrom
decoder-engine

Conversation

@baltzell
Copy link
Copy Markdown
Collaborator

@baltzell baltzell commented Apr 27, 2026

In the past year, the decoder was sped up enough to be usable as the (single-threaded) CLARA I/O service DecoderReader. With current reconstruction speeds, that scales linearly up to about 32 threads, where it becomes I/O-bound by (single-threaded) decoding.

This PR adds the decoder as a (multi-threaded) CLARA engine DecoderEngine, based on a pool of CLASDecoder objects in lieu of a thread-safe decoder. Unlike other engines in COATJAVA, this implements CLARA's Engine class directly rather than extending ReconstructionEngine.

For CCDB, new "share" constructors for CLASDecoder and DetectorEventDecoder are added to inherit a previous instance's ConstantsManager objects and database connections, rather than initializing new ones. The maximum number of decoders sharing the same manager is currently hard-coded to 16 and may warrant some tuning.

Here's the rough performance for a 24-thread job on a farm25 node with etc/services/rgd-clarode.yml. The 12 ms/event for the DECO engine suggests some thread contention, e.g., synchronized ConstantsManager calls, since it's few-ms when run single-threaded.

READER          10000 events    total time =     0.52 s    average event time =    0.05 ms
DECO            10000 events    total time =   129.11 s    average event time =   12.91 ms
DCDN            10000 events    total time =   417.51 s    average event time =   41.75 ms
MAGFIELDS       10000 events    total time =     0.17 s    average event time =    0.02 ms
FTCAL           10000 events    total time =     0.24 s    average event time =    0.02 ms
FTHODO          10000 events    total time =     0.18 s    average event time =    0.02 ms
FTTRK           10000 events    total time =     1.25 s    average event time =    0.12 ms
FTEB            10000 events    total time =     0.19 s    average event time =    0.02 ms
RASTER          10000 events    total time =     0.26 s    average event time =    0.03 ms
DCCR            10000 events    total time =   102.01 s    average event time =   10.20 ms
MLTD            10000 events    total time =   171.65 s    average event time =   17.17 ms
DCHAI           10000 events    total time =   440.76 s    average event time =   44.08 ms
FTOFHB          10000 events    total time =    34.57 s    average event time =    3.46 ms
EC              10000 events    total time =    17.54 s    average event time =    1.75 ms
CVTFP           10000 events    total time =   938.05 s    average event time =   93.80 ms
CTOF            10000 events    total time =    18.39 s    average event time =    1.84 ms
CND             10000 events    total time =     5.45 s    average event time =    0.54 ms
BAND            10000 events    total time =     1.07 s    average event time =    0.11 ms
HTCC            10000 events    total time =     0.74 s    average event time =    0.07 ms
LTCC            10000 events    total time =     0.58 s    average event time =    0.06 ms
EBHB            10000 events    total time =    10.60 s    average event time =    1.06 ms
DCTB            10000 events    total time =  1439.13 s    average event time =  143.91 ms
FMT             10000 events    total time =    43.14 s    average event time =    4.31 ms
CVTSP           10000 events    total time =   346.16 s    average event time =   34.62 ms
FTOFTB          10000 events    total time =    25.53 s    average event time =    2.55 ms
EBTB            10000 events    total time =     9.04 s    average event time =    0.90 ms
RICH            10000 events    total time =    65.09 s    average event time =    6.51 ms
RTPC            10000 events    total time =     0.34 s    average event time =    0.03 ms
VTX             10000 events    total time =   187.63 s    average event time =   18.76 ms
CALIB           10000 events    total time =     7.27 s    average event time =    0.73 ms
WRITER          10000 events    total time =     2.84 s    average event time =    0.28 ms
TOTAL           10000 events    total time =  4417.00 s    average event time =  441.70 ms

@baltzell baltzell changed the title Decoder engine add decoder engine Apr 27, 2026
@baltzell baltzell marked this pull request as ready for review April 27, 2026 21:07
@baltzell baltzell changed the title add decoder engine feat: add decoder engine Apr 28, 2026
@baltzell baltzell added the speed label Apr 28, 2026
@baltzell baltzell requested a review from c-dilks as a code owner April 28, 2026 19:29
@baltzell
Copy link
Copy Markdown
Collaborator Author

baltzell commented Apr 28, 2026

The decoder showed high thread contention with only one ConstantsManager. Increasing that a bit gives much better performance ("DECO" is the decoder engine):

Screenshot 2026-04-28 at 18 34 20

@baltzell baltzell enabled auto-merge (squash) May 10, 2026 21:50
@baltzell baltzell marked this pull request as draft May 11, 2026 22:46
auto-merge was automatically disabled May 11, 2026 22:46

Pull request was converted to draft

@baltzell baltzell changed the title feat: add decoder engine feat: add decoder CLARA engine and a decoderless Clas12Reader I/O service May 11, 2026
@baltzell baltzell marked this pull request as ready for review May 11, 2026 23:30
@baltzell baltzell enabled auto-merge (squash) May 11, 2026 23:31
@baltzell baltzell changed the title feat: add decoder CLARA engine and a decoderless Clas12Reader I/O service feat: add decoding CLARA engine May 12, 2026
@baltzell baltzell changed the title feat: add decoding CLARA engine feat: add decoding as a multi-threaded CLARA engine May 12, 2026
@baltzell baltzell force-pushed the decoder-engine branch 2 times, most recently from f3aa485 to 40630b0 Compare May 12, 2026 20:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants