 __global__ void matrixMultiply(	const ecuda::matrix<T> A, const ecuda::matrix<T> B,	ecuda::matrix<T> AB ) {
 	const int x = blockIdx.x*blockDim.x+threadIdx.x; // row
 	const int y = blockIdx.y*blockDim.y+threadIdx.y; // column
-//	printf( "ECUDA x=%i y=%i cond1=%i cond2=%i\n", x, y, A.number_rows(), B.number_columns() );
 	if( x < A.number_rows() and y < B.number_columns() ) {
 		T result = 0;
 		for( std::size_t i = 0; i < A.number_columns(); ++i ) result += A[x][i] * B[i][y];
-//		printf( "ECUDA RESULT %i %i %0.5f\n", x, y, result );
 		AB[x][y] = result;
 	}
 }

	CUDA_CHECK_ERRORS();
	stop.synchronize();

	std::vector<double> hostVector( n*p );
	cudaMemcpy2D( &hostVector.front(), sizeof(double)*p, AB.data(), AB.get_pitch(), sizeof(double)*p, n, cudaMemcpyDeviceToHost );

	for( std::size_t i = 0; i < n; ++i ) {
		std::cout << "ROW[" << i << "]";
		for( std::size_t j = 0; j < p; ++j ) std::cout << " " << std::fixed << hostVector[i*p+j];
		std::cout << std::endl;
	}

	return ( stop - start );



	stop.record();

	//for( std::size_t i = 0; i < n; ++i ) {
	//	std::cout << "ROW[" << i << "]";
	//	for( std::size_t j = 0; j < p; ++j ) std::cout << " " << std::fixed << AB[i*p+j];
	//	std::cout << std::endl;
	//}

	return ( stop - start );

