From c6fdfe24ea59c7cdba87bbc6427bec453163f15e Mon Sep 17 00:00:00 2001 From: Scott Straughan Date: Wed, 5 Mar 2025 09:06:47 +0000 Subject: [PATCH] Addds the GenVectorX update. --- .../2025-03-05-syclops-genvector-x.md | 41 ++++++++++++++++++ .../2025-03-05-syclops-genvector-x/image.webp | Bin 0 -> 37116 bytes 2 files changed, 41 insertions(+) create mode 100644 _collections/_updates/2025-03-05-syclops-genvector-x.md create mode 100644 static/images/updates/2025-03-05-syclops-genvector-x/image.webp diff --git a/_collections/_updates/2025-03-05-syclops-genvector-x.md b/_collections/_updates/2025-03-05-syclops-genvector-x.md new file mode 100644 index 0000000..b6b7b9a --- /dev/null +++ b/_collections/_updates/2025-03-05-syclops-genvector-x.md @@ -0,0 +1,41 @@ +--- +title: "SYCLOPS GenVectorX" +date: 2025-03-05 +layout: update +tags: + - syclops + - GenVectorX +--- + + +CERN hosts the world's largest particle accelerator, the LHC, where beams of particles are accelerated and made to +collide to study the fundamental structures of our universe. The LHC produces petabytes of physics data regarding +particle collisions that need to be analysed efficiently. These collisions are expressed as operations on particles, +represented as 4-dimensional time-space vectors, also known as Lorentz Vectors. Analysing these massive amounts of data +naturally requires highly efficient and complex software solutions. ROOT is an open-source platform-independent C++ data +analysis framework designed and developed for this purpose. The [ROOT project](https://root.cern) provides the core +ingredients for high energy physics (HEP) analysis tasks, including optimised data storage, a user-friendly and +interactive interface, math libraries, and visualisation capabilities. ROOT’s high-level data analysis +interface, [RDataFrame](https://root.cern/doc/master/classROOT_1_1RDataFrame.html), currently contains +support for implicit parallelism in multi-threaded and multi-node distributed environments, but GPU parallelism has not +been attempted before this work. Given the increasing heterogeneity in computing facilities, it becomes crucial to +efficiently support GPGPUs to take advantage of the available resources. SYCL allows for a single-source implementation, +which enables support for different architectures. + +![Image 1](/static/images/updates/2025-03-05-syclops-genvector-x/image.webp) + +Within ROOT, the GenVector is a large package intended to provide classes and functionalities to represent physical +vectors and transformations (such as rotations and Lorentz transformations) in 2, 3, and 4 dimensions, according to the +needs of High Energy Physics researchers. [GenVectorX](https://arxiv.org/abs/2312.02756) extends GenVector, providing a +SYCL implementation of the Lorentz Vector classes that facilitate computations with physical vectors. We leverage SYCL +as a performance portable framework to migrate and modernize the fundamental GenVector package. Typically, in a HEP +analysis the data are first read from disk and decompressed; then irrelevant data are filtered out, new quantities +are defined by processing the remaining particles, possibly more data are filtered out, and last the results are +aggregated, e.g. by computing an histogram. The GenVectorX package addresses the define action, even if the histogram +computation has been ported. An extensive test campaign shows that SYCL can achieve competitive performance with +respect to native CUDA on NVIDIA GPUs with near-one code similarity, meaning that the codebase is more sustainable +in terms of development efforts and less error-prone as a single source needs to be maintained. Moreover, we acquire +support for accelerators beyond NVIDIA GPUs - before SYCL, RDataFrame only supported multithreaded execution across +bulks. These features haven’t been put in production yet, but if you’re curious you can take a look at the +related [development branch!](https://github.com/mdessole/root/tree/genvectorx_gpu_histogram_bulk-2.0) + diff --git a/static/images/updates/2025-03-05-syclops-genvector-x/image.webp b/static/images/updates/2025-03-05-syclops-genvector-x/image.webp new file mode 100644 index 0000000000000000000000000000000000000000..79ea7c9ebaa9a47a887e7c9153d8e5ea432b910b GIT binary patch literal 37116 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 literal 0 HcmV?d00001