|
| 1 | +--- |
| 2 | +title: "Wrapping up GSoC'24: Improving performance of BioDynaMo using ROOT C++ Modules" |
| 3 | +layout: post |
| 4 | +excerpt: "This project, part of Google Summer of Code 2024, aims to reduce the header parsing in BioDynaMo using the ROOT C++ Modules" |
| 5 | +sitemap: false |
| 6 | +author: Isaac Morales Santana |
| 7 | +permalink: blogs/gsoc24_isaac_morales_wrapup_blog/ |
| 8 | +banner_image: /images/blog/gsoc-banner.png |
| 9 | +date: 2024-10-17 |
| 10 | +tags: gsoc root cmake c++ |
| 11 | +--- |
| 12 | + |
| 13 | +### Introduction |
| 14 | + |
| 15 | +I am Isaac Morales, a Computer Engineering student at the University of Granada, Spain. |
| 16 | +This summer I had the opportunity to participate in Google Summer of Code 2024. My project |
| 17 | +revolved around enhancing BioDynaMo's performance using the ROOT C++ Modules. |
| 18 | + |
| 19 | +**Mentors**: Vassil Vassilev, Lukas Breitwieser. |
| 20 | + |
| 21 | + |
| 22 | +### Project overview |
| 23 | + |
| 24 | +BioDynaMo is an agent-based simulation platform designed to facilitate complex simulations, |
| 25 | +particularly in fields like cancer research, epidemiology, and social sciences. It leverages |
| 26 | +ROOT—a framework widely used in high-energy physics—for statistical analysis, random number |
| 27 | +generation, C++ Jupyter notebooks, and I/O operations. However, enhancing BioDynaMo’s performance |
| 28 | +remains a key challenge. This is where this Google Summer of Code 2024 (GSoC ‘24) project comes |
| 29 | +into play, focusing on optimizing the platform through ROOT C++ Modules. |
| 30 | + |
| 31 | +### The Challenge: Performance Bottlenecks in BioDynaMo |
| 32 | +BioDynaMo’s reflection system, which utilizes Cling (an interactive C++ interpreter from ROOT), |
| 33 | +experiences significant runtime performance and memory usage issues. The repeated parsing of library |
| 34 | +descriptors by Cling introduces inefficiencies that slow down the startup phase and consume excessive |
| 35 | +memory. These bottlenecks are especially evident in simulations with a low number of time steps, as |
| 36 | +a substantial portion of the time is spent on parsing rather than on actual computations. |
| 37 | + |
| 38 | +### The Solution: Integrating ROOT C++ Modules. |
| 39 | +The primary goal of the GSoC project was to integrate ROOT’s C++ Modules into BioDynaMo to minimize |
| 40 | +these performance issues. C++ Modules offer an efficient on-disk representation of C++ code, |
| 41 | +reducing the need for repeated parsing of invariant code. By implementing these modules, |
| 42 | +the project aimed to optimize runtime memory usage and improve overall performance |
| 43 | + |
| 44 | +## What I did?: |
| 45 | +1. **Reworking CMake Rules:** The project incorporated ROOT and another packages |
| 46 | +efficiently using FetchContent, modifying CMake rules accordingly (e.g., PR [#365](https://github.com/BioDynaMo/biodynamo/pull/365) |
| 47 | +and [#387](https://github.com/BioDynaMo/biodynamo/pull/387), both merged) |
| 48 | +2. **Replacing genreflex with rootcling:** This switch was crucial to enable C++ Modules and |
| 49 | +streamline the generation of reflection information (PR [#379](https://github.com/BioDynaMo/biodynamo/pull/379)) |
| 50 | +3. **C++ Modules changes** Among other things, I used automatic generation for the module map with relative paths, |
| 51 | +modified the `selection.xml` file to support the new dictionaries and fixed headers with missing includes (PR [#385](https://github.com/BioDynaMo/biodynamo/pull/385). |
| 52 | +4. **Updated some CI workflows** I fixed some failing workflows in PR [#377](https://github.com/BioDynaMo/biodynamo/pull/377). |
| 53 | +Also, I did some minor changes in some flags in PR's [#378](https://github.com/BioDynaMo/biodynamo/pull/378) and [#367](https://github.com/BioDynaMo/biodynamo/pull/367) |
| 54 | + |
| 55 | +### Promising Results |
| 56 | +The results have been promising, showcasing significant performance gains. Benchmarking revealed |
| 57 | +improvements ranging from 18% reduction in peak memory usage with the default modules.idx to 25% with the |
| 58 | +updated one. |
| 59 | + |
| 60 | + |
| 61 | + |
| 62 | +Moreover, the startup phase saw an impressive 80% reduction in time, thanks to the optimized |
| 63 | +handling of header parsing. That highlights the efficiency of C++ Modules in minimizing |
| 64 | +Cling’s parsing overhead |
| 65 | + |
| 66 | + |
| 67 | +As expected, the simulation time did not show an appreciable improvement. However, in the |
| 68 | +unit tests, the time was 33% lower. I believe this is because unit tests involve a lot of parsing and Cling calls. |
| 69 | + |
| 70 | +### Future Steps and Challenges Ahead |
| 71 | +Despite these advances, several challenges remain. PR's #365 is ready to merge and #385 needs some changes. For instance, memory leaks have been observed when using the new |
| 72 | +`ROOT_GENERATE_DICTIONARY`, even with C++ Modules disabled. Additionally, the build system for individual demos has |
| 73 | +caused compatibility issues with the main build system. Also, there is a problem with the Jupyter notebooks. |
| 74 | +Resolving these issues and finalizing the integration of C++ Modules will be essential for ensuring long-term stability and reliability. |
| 75 | + |
| 76 | +Looking ahead, further optimizations are planned, including potential module-based optimizations for BioDynaMo’s |
| 77 | +core components. Collaboration with the BioDynaMo team continues, with upcoming meetings scheduled |
| 78 | +to align efforts and resolve outstanding issues. |
| 79 | + |
| 80 | +### Conclusion |
| 81 | +The integration of C++ Modules has proven effective in reducing memory usage and startup time, although some hurdles remain. |
| 82 | +Continued collaboration and testing will be crucial to fully realize the performance potential of BioDynaMo, |
| 83 | +enabling more efficient simulations for researchers in computational biology. |
| 84 | + |
| 85 | +### Acknowledges |
| 86 | +First of all, I would like to thank Google Summer of Code for the opportunity to work on this project. |
| 87 | +But above all, my most sincere gratitude goes to Vassil. He has been an exceptional mentor, always attentive |
| 88 | +and ready to help with anything I needed. His encouragement during weekly meetings and his constant support in all areas, |
| 89 | +from soft skills to technical expertise, have truly inspired me and earned my admiration. |
| 90 | + |
| 91 | +Many thanks also to the BioDynaMo team: to Lukas Breitweiser for guiding me through the final stages and helping |
| 92 | +me understand the complexities of BioDynaMo; to Tobias Duswald for reviewing my PRs and assisting me in analyzing |
| 93 | +my results; and to Fons Rademakers for his support when I faced challenges compiling ROOT in debug mode. |
| 94 | + |
| 95 | +Lastly, a special thanks to my colleagues from Compiler Research, particularly David, Atel and Maksym, whom I had |
| 96 | +the pleasure of meeting at the Fourth MODE in Valencia, for making this experience unforgettable. |
| 97 | + |
| 98 | +### Related Links |
| 99 | + |
| 100 | +- [ROOT website](https://root.cern) |
| 101 | +- [BioDynaMo website](https://www.biodynamo.org/) |
| 102 | +- [My GitHub Profile](https://github.com/imorlxs) |
| 103 | + |
| 104 | + |
0 commit comments