brian-team / brian2genn

Brian 2 frontend to the GeNN simulator
http://brian2genn.readthedocs.io/
GNU General Public License v2.0
47 stars 16 forks source link

RNG & seeding #142

Open kernfel opened 2 years ago

kernfel commented 2 years ago

I notice that GeNN has RNG capabilities ($(gennrand_uniform) etc.) that are not being used; random number generation is instead done by a support code function (defined in genn_generator.py lines 350~390). I also notice that using seed(...) raises a NotImplementedError when used in conjunction with brian2genn. Three questions:

  1. Are there reasons other than the obvious (brian2genn's implementation predates GeNN's) for the choice of RNG here?
  2. Would it be generally desirable to migrate uses of rand(), randn() in brian2 code to GeNN's builtins?
  3. Is it possible to control seeding in GeNN? GeNN's documentation is a little sparse on details there.

Happy to work on this if it's considered a valuable feature.

tnowotny commented 2 years ago

I think regarding the RNGs it is indeed a case of historic sequence. I see no reason not to use GeNN built-in RNGs. It would likely be more efficient. As for seeding, it's probably better @neworderofjamie comments.

neworderofjamie commented 2 years ago

So, Brian2GeNN's RNG functionality predates $(gennrand_XXX) which is why it doesn't use it - fixing this is one of the things we're really hoping to get done in a GSoC project. In GeNN you control seeding via model.setSeed(X) where X=0 indicated that you should randomize the seed every run

kernfel commented 2 years ago

I see. In that case, I'll probably hack something in just to cover my particular case in a draft, and if there's a lot more to do, I'll let the GSoC cavalry clean it up properly.

tnowotny commented 2 years ago

Though we do not know yet whether we will be getting a student for it I am afraid. But we can always clean up ourselves if needed.