Strategy for testing models using thread-specific RNGs ------------------------------------------------------ Key requirement: Identical results for fixed VP number, independent of number of MPI processes. Affected devices and models per r10038 (models, precise): * gamma_sup_generator (A.1, B.1) * mip_generator (A.1, B.1; see also #143) * noise_generator (A.1, B.1) * poisson_generator (A.1, B.1) * poisson_generator_ps (A.1, B.1) * ppd_sup_generator (A.1, B.1) + ginzburg_neuron (A.2, B.2) + pp_psc_delta (A.2, B.2) + pulsepacket_generator (A.2, B.2) */+ sinusoidal_poisson_generator (A.2, B.2) For {A,B}.{1,2} classification see below. We have the following cases: Case * ------ Separate generator instance on each VP, separate random event sequence to each target. Test: 1. Create one device 2. Create one target (ordinary node) per VP. 3. Each target must receive different sequence of events. 4. Sequence of events for each target must be identical irrespective of VP-split. Note: in MPI tests, we test only 4., not 3. Case + ------ One instance in entire network, same sequence of events to all targets. Test: 1. Create one node per VP. 2. Create one target per VP (ordinary node) and connect 1-to-1. 3. Each target must receive different sequence of events. 4. Sequence of events for each target must be identical irrespective of VP-split. Note: in MPI tests, we test only 4., not 3. A. Proxy -- We cannot query from the SLI level whether a node has proxies or not A.1 Nodes without proxies: -- separate instance on each thread/vp -- different RNG on each thread -- RNG for each thread must be the same for given VP, independent of process/thread split A.2 Nodes with proxies: -- one instance only -- only RNG for the thread of the instance matters -- must be same RNG for given VP, independent of process/thread split B. Target-specific random output -- We cannot query from the SLI level whether a node generates target-specific output B.1 Target-specific output: -- each target receives a different sequence of random events -- implemented using event_hook() -- B.1 requires A.1 B.2 Common output: -- all targets receive the same sequence of random events -- B.2 requires A.2