void testFiringStimulus(backend_t backend) { unsigned ncount = 3000; // make sure to cross partition boundaries unsigned cycles = 1000; unsigned firing = 10; // every cycle double p_fire = double(firing) / double(ncount); nemo::Network net; for(unsigned nidx = 0; nidx < ncount; ++nidx) { addExcitatoryNeuron(nidx, net); } nemo::Configuration conf; setBackend(backend, conf); boost::scoped_ptr<nemo::Simulation> sim(nemo::simulation(net, conf)); rng_t rng; urng_t random(rng, boost::uniform_real<double>(0, 1)); for(unsigned t = 0; t < cycles; ++t) { std::vector<unsigned> fstim; for(unsigned n = 0; n < ncount; ++n) { if(random() < p_fire) { fstim.push_back(n); } } const std::vector<unsigned>& fired = sim->step(fstim); /* The neurons which just fired should be exactly the ones we just stimulated */ sortAndCompare(fstim, fired); } }
void demo(int size) { printf("Shuffling arrays of size %d \n",size); printf("Time reported in number of cycles per array element.\n"); printf("Tests assume that array is in cache as much as possible.\n"); int repeat = 500; uint32_t * testvalues = create_random_array(size); uint32_t * pristinecopy = malloc(size * sizeof(uint32_t)); memcpy(pristinecopy,testvalues,sizeof(uint32_t) * size); if(sortAndCompare(testvalues, pristinecopy, size)!=0) return; BEST_TIME(shuffle_pcg(testvalues,size), array_cache_prefetch(testvalues,size), repeat, size); if(sortAndCompare(testvalues, pristinecopy, size)!=0) return; BEST_TIME(shuffle_pcg_go(testvalues,size), array_cache_prefetch(testvalues,size), repeat, size); if(sortAndCompare(testvalues, pristinecopy, size)!=0) return; BEST_TIME(shuffle_pcg_java(testvalues,size), array_cache_prefetch(testvalues,size), repeat, size); if(sortAndCompare(testvalues, pristinecopy, size)!=0) return; BEST_TIME(shuffle_pcg_divisionless(testvalues,size), array_cache_prefetch(testvalues,size), repeat, size); if(sortAndCompare(testvalues, pristinecopy, size)!=0) return; BEST_TIME(shuffle_pcg_divisionless_with_slight_bias(testvalues,size), array_cache_prefetch(testvalues,size), repeat, size); if(sortAndCompare(testvalues, pristinecopy, size)!=0) return; free(testvalues); free(pristinecopy); printf("\n"); }