The current code base makes use of two allocated vectors for mutation keys. Currently, they are only used to store the results of recombination events. Then, when mutation happens, a new set of vectors is allocated.
However, it is possible to make more efficient use of these "intermediate" containers. The branch dev_fewer_allocations is currently working on this.
The result is a big reduction in peak RAM use and run time for the case where mutation and recombination rates are both > 1 (per diploid, per generation).
Con: this requires changing the order in which the random number generator is called. Thus, the output will change for a given RNG seed.
The current code base makes use of two allocated vectors for mutation keys. Currently, they are only used to store the results of recombination events. Then, when mutation happens, a new set of vectors is allocated.
However, it is possible to make more efficient use of these "intermediate" containers. The branch dev_fewer_allocations is currently working on this.
The result is a big reduction in peak RAM use and run time for the case where mutation and recombination rates are both > 1 (per diploid, per generation).
Con: this requires changing the order in which the random number generator is called. Thus, the output will change for a given RNG seed.