 			
 			case 5:
 				t = clock();
-				for (int i = 0; i < 10000; i++)
+				//for (int i = 0; i < 10000; i++)
 				{
-					checkCudaErrors(cudaMemset(findArray, 0, sizeof(bool) * (2*bound + 2)));
-					checkCudaErrors(cudaMemset(primeArray, 1, sizeof(bool) * (2*bound + 2)));
+					cout << "set memory" << endl;
+					checkCudaErrors(cudaMemset(findArray, 0, sizeof(bool) * (bound + 1)));
+					checkCudaErrors(cudaMemset(primeArray, 1, sizeof(bool) * (bound + 1)));
+					cout << "part one" << endl;
 					sundPartOnePerElement<<<b_gridSize, b_blockSize>>>(bound, findArray);
 					cudaDeviceSynchronize(); checkCudaErrors(cudaGetLastError());
+					cout << "part two" << endl;
 					sundPartTwoPerElementOneD<<<t_gridSize, t_blockSize>>>(bound, findArray, primeArray);
 					cudaDeviceSynchronize(); checkCudaErrors(cudaGetLastError());
+					cout << "done" << endl;
 				}
 			break;
 			
 			case 6:
 				t = clock();
-				for (int i = 0; i < 10000; i++)
+				//for (int i = 0; i < 10000; i++)
 				{
 					sundPartOnePerElement<<<b_gridSize, b_blockSize>>>(bound, findArray);
 					cudaDeviceSynchronize(); checkCudaErrors(cudaGetLastError());

		
		if (choice >= 3) //If we've run a GPU algorithm, allocate some memory
		{
			cout << "Allocating " << 2 * sizeof(bool) * (2 * bound + 2) / 1024.0 / 1024.0 << "MB of memory" << endl;
			checkCudaErrors(cudaMalloc(&primeArray, sizeof(bool) * (2*bound + 2)));
			checkCudaErrors(cudaMalloc(&findArray, sizeof(bool) * (2*bound + 2)));
		}

		switch (choice)

			case 1:
			{
				t = clock();
				//for (int i = 0; i < 10000; i++)
				{
					cpuArray = new bool[bound + 1];
					sundaramSieve(bound, cpuArray);
