Seeding random number generators in NEST3 #1381
Labels
I: User Interface
Users may need to change their code due to changes in function calls
S: High
Should be handled next
T: Enhancement
New functionality, model or documentation
Milestone
See also #245.
In the past, NEST has used RNGs accepting 32-bit integers as seeds. This is not sufficient: 32 bits allow for only 4.2e9 different seeds. In parallel simulations, one seed is required per VP. In NEST2 the user needs to assign seeds manually to VPs and ensure to use non-overlapping seed ranges for different simulations. This is complicated and error prone.
Another problem is the lack of seeds. Our simulations on K (Kunkel et al, 2014) used close to 7e5 VPs, so with one seed per VP, we have only about 4.2e9/7e5 = 6000 different seed sequences available, which is an unacceptably small.
We therefore need to use RNGs 64 bit seeds, as they are provided by the C++11 STL. We can then proceed as follows:
The following questions arise
Concerning 1, the size of the human brain with O(1e11) neurons poses a definite upper limit for network size. Furthermore, it seems little probable that we will simulate fewer than 100 neurons per VP in NEST, indicating at most 1e9 VPs. This number exceeds the currently largest simulations by a factor 1000 and will likely not be reached for a good number of years. Therefore, the following scheme seems sensible:
Concerning 2, I would propose the following:
2*k*pi mod 64
to obtain an even but irregular placement.Concerning 3, it is in principle conceivable (though not advisable) that a user would want per-VC seeds also at the Python level. To distinguish these seeds from internally used seeds, one could reserve 2 bits allowing one to create up to four different "seed series".
The text was updated successfully, but these errors were encountered: