         printf("Computation time in the CPU: %f seconds\n", elapsed);
 	
 	copyMatricesToGPU();
-	kernel <<< 32, 32 >>>  (A_GPU, B_GPU);
+	kernel <<< 32, 32 >>>  (A_GPU, B_GPU, C_GPU);
 
 	return 0;
 }

	}
}

__global__ void kernel(float * A_GPU, float * B_GPU) {
	int srow = 0;
	int scol = 0;
	int threadId = blockDim.x * blockIdx.x + threadIdx.x;
	const int sizeOfWork = 10;
	const int sizeOfBlock = 100;
	__shared__ float blockA[10][10]; 
	__shared__ float blockB[10][10]; 
	// copy the submatrix into shared memory
	int mIndex = threadId * sizeOfWork;
	for (int i = 0; i < sizeOfBlock; i++) {
		blockA[srow][scol] = A_GPU[mIndex];
		blockB[srow][scol] = B_GPU[mIndex];
		// Jump a row when finished copying column
		if (i == sizeOfWork) {
			srow++;
			mIndex *= sizeOfWork;
		}
		scol++;
		
	}
}



void compareHostAndGpuOutput();
void die(const char *error); 
void check_error(cudaError e);
__global__ void kernel(float * A_GPU, float * B_GPU, float * C_GPU);
//----------------------------------- CUDA function definitions -----------------------------------------


