Example #1
0
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");
}