v2.2.0
Version 2.2.0 of libroadrunner has a variety of updates, including:
- Now uses LLVM13, providing faster compilation and execution of models.
- In addition to the old MCJit system, we provide support for an entirely new Jit system called LLJit which uses llvm-13's Orc Jit v2 api. LLJit has user configurable optimization flags "none", "less", 'default" and "aggressive". Aggressive optimization provides faster Jit compiled sbml models, but takes longer to compile whereas bypassing optimizations with "none" compiles faster but simulates slower.
- The LLJit system in our hands has proved faster than the previous MC-JIT. MC-JIT is still the default, but switching to ORC-JIT can be enabled in the options; in future releases, ORC-JIT will likely become the new default, once we're sure that no unexpected problems emerge. When this happens, we will deprecate the MCJit and eventually remove it. Meanwhile, we have constructed the switchable jit compiler feature using dependency injection which makes for easier additions of new jit engines in future, such as lazy compilation.
- Various speedups have been incorporated to increase the speed of model loading, including streamlined parsing of the SBML, and using a new version of libSBML for model access for some functions.
- It is now possible to parallelize roadrunner without data races since critical sections are locked with std::mutex.
- A hashmap-like container called
RoadRunnerMap
has been built for handling parallel model loading, which is the most computationally intensive part of roadrunner. Parallelism is abstracted away from the user and is presented with a dict-like interface in python #925 . - Roadrunner objects in Python are now picklable, enabling users to use roadrunner with python parallel processing libraries like
multiprocessing
. - Support for sbml distrib package
- Support for integrating models at user specified specific time points, rather than needing to simulate at regular intervals.
- The model saving/loading feature is now more robust. The save state version is connected to roadrunner's version, which allows users to load and save state from roadrunner versions with the different micro versions, but not major or minor versions.
- A bug was fixed (#910) where the calculated Jacobian would sometimes be incorrect if the initial compartment volumes were changed.
- A bug was fixed where roadrunner would incorrectly refuse to calculate certain elasticities.
- A bug in the install tree was fixed, whereby missing header files prevented using roadrunner as a C++ library.