 
 	CUDA_CHECK_ERRORS();
 	stop.synchronize();
+
+	std::vector<double> hostVector( n*p );
+	cudaMemcpy2D( &hostVector.front(), sizeof(double)*p, AB, pitchAB, 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;
+	}
 
 	cudaFree( A );
 	cudaFree( B );

	}
}

float cudaMatrixMultiply( const int numThreads, const std::size_t n, const std::size_t m, const std::size_t p ) {

	ecuda::event start, stop;



	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 );

