 	}
 
 	std::cout << "cuda col major speedup of " << elapsedTime_serial/elapsedTime_cuda << std::endl;
-	*/
+	
 	std::cout << "trying cuda row major" << std::endl;
 	//Now try the cuda version, start with warmup
-	cudaDoContractDataDataScalar(cudaOut,cudaLeftRowMajor,cudaRightRowMajor, c, p, 0);
+	cudaDoContractDataDataScalar(cudaOut,cudaLeftRowMajor,cudaRightRowMajor, c, p, false);
 
 	clock_gettime(CLOCK_MONOTONIC, &tic);
-	for(int i = 0; i < 5; ++i){
-		cudaDoContractDataDataScalar(cudaOut,cudaLeftRowMajor,cudaRightRowMajor, c, p, 0);
+	for(int i = 0; i < numRepeats; ++i){
+		cudaDoContractDataDataScalar(cudaOut,cudaLeftRowMajor,cudaRightRowMajor, c, p, false);
 	}
 
 	clock_gettime(CLOCK_MONOTONIC, &toc);

	std::cout << "cuda row major speedup of " << elapsedTime_serial/elapsedTime_cudaRow << std::endl;
	

#if 0
	//Warmpup
	contractDataDataScalarKokkos<Kokkos::OpenMP, omp_input_view_t, omp_output_view_t, omp_input_host_t, omp_output_host_t>
		(omp_hostOut, omp_hostLeft, omp_hostRight, omp_kokkosOut,
		 omp_kokkosLeft,omp_kokkosRight); clock_gettime(CLOCK_MONOTONIC, &tic);

	//repeat the calculation 5 times so we can average out some randomness
	for(int i = 0; i < 5; ++i){
		contractDataDataScalarKokkos<Kokkos::OpenMP, omp_input_view_t, omp_output_view_t, omp_input_host_t, omp_output_host_t>
			(omp_hostOut, omp_hostLeft, omp_hostRight, omp_kokkosOut, omp_kokkosLeft,
			 omp_kokkosRight);
	}

	clock_gettime(CLOCK_MONOTONIC, &toc);
	const double elapsedTime_kokkos = getElapsedTime(tic, toc);

	// Copy out from kokkos output view (NOT timing this)
	for (int cl = 0; cl < c; ++cl) {
		for (int lbf = 0; lbf < l; ++lbf) {
			for (int rbf = 0; rbf < r; ++rbf) {
				out1_c_l_r(cl, lbf, rbf) = omp_hostOut(cl, lbf, rbf);
			}
		}
	}
#endif

	return 0;
}

			_outputFields(elementIndex) = tmpVal;
		}
};


// Serial contractDataDataScalar.  Contracts FieldContainers of doubles.
