SNiPER is a general purpose software framework for high energy physics experiments. During the development, we pays more attention to the requirements of neutrino and cosmic ray experiments. Now SNiPER has been successfully adopted by JUNO (Jiangmen Underground Neutrino Observatory) and LHAASO (Large High Altitude Air Shower Observatory). It has an important effect on the research and design of these projects.
The detector scale and data amount are very large for both JUNO and LHAASO. A great number of computing resources are necessary. Instead of increasing clock speed, increasing cores number became the trend in recent years in the CPU industry. It is natural to implement parallel computing to improve our data processing efficiency with multi-core CPUs. Intel TBB, as a powerful high level library, emancipates us from trivial and complex details of raw threads.
For we have taken parallel computing into account at the beginning of SNiPER’s design, it is possible to achieve multi-threads in a non-invasive way. More than one SNiPER TopTask instances can coexist without interfering between each other. We can simply map each SNiPER TopTask to a TBB task. Events are transmitted from TBB tasks to SNiPER TopTasks one by one, and all SNiPER TopTasks can be executed concurrently. In this way we implemented an event level parallel computing wrapper for SNiPER. A bright characteristic is that the SNiPER kernel module and Intel TBB are absolutely de-coupled. Threads features are transparent to most users, except a few conventions such as global variables. This approach will significantly reduce the costs of migration from serial to parallel computing. However, it is more complicated for critical resources handling, such as disk I/O and memory management. We will also present some attempts for these services, by which they are also non-invasive to the SNiPER kernel module.