 #include <omp.h>
 
 #define TBS 256 //this is the threads per block for the jackknife reduction kernel
-#define ELS 1048576 //number of elements
+#define ELS 10240000 //number of elements
 #define NTHREADS 13 //only valid for Open MP Jackknife, dependent on the system number of cores available
 #define EPB 128 //elements per bin in bootstrap
 #define ELPB 128 //threads per block (elements per bootstrap) in bootstrap
-#define BOOTS 4096 //number of bootstraps
+#define BOOTS 16384 //number of bootstraps
 // see main() below for what happens when each of the following is 0/1
-#define CPU_JACK 1
+#define CPU_JACK 0
 #define OMP_JACK 0
 #define GPU_JACK 0
-#define CPU_BOOT 0
+#define CPU_BOOT 1
 #define LOOP_BOOT 0 //loop_boot=1 and gpu_boot=1 causes us to loop over different bin sizes
-#define GPU_BOOT 0
+#define GPU_BOOT 1
+#define BSTRAP 1 //this is which bootstrap method we run, 1 is the quickest but has some bias, 3 is slowest and has no bias, 2 is between 1 and 3.
 
 
 

    h_data[i] = floorf(1000*(rand()/(float)RAND_MAX));
//    h_data[i] = 1.0f;
  }

  data_time = elapsed_time(&timer);
  printf("Time to create data array:\t%f \n",data_time);

	  cudaSafeCall(cudaMemcpy(d_odata2, bin_array, sizeof(float)*num_bins, cudaMemcpyHostToDevice));

	cudaSafeCall( cudaDeviceSynchronize() );
if (BSTRAP==1) bootstrap<<<num_blocks,num_threadsperblock>>>(d_idata2,d_odata2,d_irand);
if (BSTRAP==2) bootstrap2<<<num_blocks,num_threadsperblock>>>(d_idata2,d_odata2,d_irand);
if (BSTRAP==3) bootstrap3<<<num_blocks,num_threadsperblock>>>(d_idata2,d_odata2,d_irand);
	cudaCheckMsg("bootstrap kernel execution failed");
	cudaSafeCall( cudaDeviceSynchronize() );
	gpu_calcs = elapsed_time(&gpu_timer);
