Using a DSL to read ROOT TTrees faster in Uproot

Read full text
Authors: Aryan Roy, Jim Pivarski
Cited by: 0
References: 6

Abstract

Abstract Uproot reads ROOT TTrees using pure Python. For numerical and (singly) jagged arrays, this is fast because a whole block of data can be interpreted as an array without modifying the data. For other cases, such as arrays of std :: vector < std :: vector < float >> , numerical data are interleaved with structure, and the only way to deserialize them is with a sequential algorithm. When written in Python, such algorithms are very slow. We solve this problem by writing the same logic in a language that can be executed quickly. AwkwardForth is a Domain Specific Language (DSL), based on Standard Forth with I/O extensions for making Awkward Arrays, and it can be interpreted as a fast virtual machine without requiring LLVM as a dependency. We generate code as late as possible to take advantage of optimization opportunities. All ROOT types previously implemented with Python have been converted to AwkwardForth. Double and triple-jagged arrays, for example, are 400× faster in AwkwardForth than in Python, with multithreaded scaling up to 1 second/GB because AwkwardForth releases the Python GIL. We also investigate the possibility of JIT-compiling the generated AwkwardForth code using LLVM to increase the performance gains. In this paper, we describe design aspects, performance studies, and future directions in accelerating Uproot with AwkwardForth.

Fields of Study & Subjects

Antenna Design and Optimization Structural Analysis and Optimization

Publication details

Journal / source
Journal of Physics Conference Series
Publisher
IOP Publishing
Volume
3206
Issue
1
Pages
012042–012042
Publication date
1 April 2026
Language
EN