|  | 
|  | 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 | +## Key steps undertaken include: | 
|  | 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)) | 
|  | 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. **Automatic Modules Map Generation:** Using relative paths, the CMake system was modified to | 
|  | 51 | +automate module map creation, ensuring smooth integration with BioDynaMo's libraries. | 
|  | 52 | + | 
|  | 53 | +### Promising Results | 
|  | 54 | +The results have been promising, showcasing significant performance gains. Benchmarking revealed  | 
|  | 55 | +improvements ranging from 18% reduction in peak memory usage with the default modules.idx to 25% with the | 
|  | 56 | +updated one. | 
|  | 57 | + | 
|  | 58 | + | 
|  | 59 | + | 
|  | 60 | +Moreover, the startup phase saw an impressive 80% reduction in time, thanks to the optimized | 
|  | 61 | +handling of header parsing. That highlights the efficiency of C++ Modules in minimizing | 
|  | 62 | +Cling’s parsing overhead | 
|  | 63 | + | 
|  | 64 | + | 
|  | 65 | +As expected, the simulation time did not show an appreciable improvement. However, in the | 
|  | 66 | +unit tests, the time was 33% lower. I believe this is because unit tests involve a lot of parsing and Cling calls. | 
|  | 67 | + | 
|  | 68 | +### Future Steps and Challenges Ahead | 
|  | 69 | +Despite these advances, several challenges remain. For instance, memory leaks have been observed when using the new | 
|  | 70 | +`ROOT_GENERATE_DICTIONARY`, even with C++ Modules disabled. Additionally, the build system for individual demos has | 
|  | 71 | +caused compatibility issues with the main build system. Resolving these issues and finalizing the integration of C++ | 
|  | 72 | +Modules will be essential for ensuring long-term stability and reliability. | 
|  | 73 | + | 
|  | 74 | +Looking ahead, further optimizations are planned, including potential module-based optimizations for BioDynaMo’s | 
|  | 75 | +core components. Collaboration with the BioDynaMo team continues, with upcoming meetings scheduled | 
|  | 76 | +to align efforts and resolve outstanding issues. | 
|  | 77 | + | 
|  | 78 | +### Conclusion | 
|  | 79 | +The integration of C++ Modules has proven effective in reducing memory usage and startup time, although some hurdles remain. | 
|  | 80 | +Continued collaboration and testing will be crucial to fully realize the performance potential of BioDynaMo, | 
|  | 81 | +enabling more efficient simulations for researchers in computational biology. | 
|  | 82 | + | 
|  | 83 | +### Related Links | 
|  | 84 | + | 
|  | 85 | +- [ROOT website](https://root.cern) | 
|  | 86 | +- [BioDynaMo website](https://www.biodynamo.org/) | 
|  | 87 | +- [My GitHub Profile](https://github.com/imorlxs) | 
|  | 88 | + | 
|  | 89 | + | 
0 commit comments