English

Using a DSL to read ROOT TTrees faster in Uproot

High Energy Physics - Experiment 2023-03-07 v1 Performance

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 400x 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.

Cite

@article{arxiv.2303.02202,
  title  = {Using a DSL to read ROOT TTrees faster in Uproot},
  author = {Aryan Roy and Jim Pivarski},
  journal= {arXiv preprint arXiv:2303.02202},
  year   = {2023}
}

Comments

6 pages, 3 figures; submitted to ACAT 2022 proceedings

R2 v1 2026-06-28T09:00:39.671Z