 
 #include "GPUSpikingCluster.h"
 #include "ISInput.h"
+#include "MersenneTwister_d.h"
 
 // ----------------------------------------------------------------------------
 


  Cluster::setupCluster(sim_info, layout, clr_info);

  //initialize Mersenne Twister
  //assuming neuron_count >= 100 and is a multiple of 100. Note rng_mt_rng_count must be <= MT_RNG_COUNT
  int rng_blocks = 25; //# of blocks the kernel will use
  int rng_nPerRng = 4; //# of iterations per thread (thread granularity, # of rands generated per thread)
  int neuron_count = clr_info->totalClusterNeurons;
  // neuron_count must be a multiple of 100
  neuron_count = ((( neuron_count - 1 ) / 100 ) + 1 ) * 100;
  int rng_mt_rng_count = neuron_count/rng_nPerRng; //# of threads to generate for neuron_count rand #s
  int rng_threads = rng_mt_rng_count/rng_blocks; //# threads per block needed
  initMTGPU(clr_info->seed, rng_blocks, rng_threads, rng_nPerRng, rng_mt_rng_count);

#ifdef PERFORMANCE_METRICS
  cudaEventCreate( &clr_info->start );

  m_neurons->allocNeuronDeviceStruct( allNeuronsDevice, sim_info, clr_info );
  m_synapses->allocSynapseDeviceStruct( allSynapsesDevice, sim_info, clr_info );

  // Copy host neuron and synapse arrays into GPU device
  m_neurons->copyNeuronHostToDevice( *allNeuronsDevice, sim_info, clr_info );
  m_synapses->copySynapseHostToDevice( *allSynapsesDevice, sim_info, clr_info );

  // allocate synapse index map in device memory
  int neuron_count = clr_info->totalClusterNeurons;
  allocSynapseImap( neuron_count );

  DEBUG(
