 }
 
 template<typename T>
-__global__ void matrixMultiply(
-	const ecuda::matrix<T> A,
-	const ecuda::matrix<T> B,
-	ecuda::matrix<T> AB
-)
-{
+__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
 	if( x < A.number_rows() and y < B.number_columns() ) {

}

template<typename T>
__global__ void matrixMultiply(
	const T* A,
	std::size_t pitchA,
	const T* B,
	std::size_t pitchB,
	std::size_t n, std::size_t m, std::size_t p,
	T* AB,
	std::size_t pitchAB
)
{
	const int x = blockIdx.x*blockDim.x+threadIdx.x; // row
	const int y = blockIdx.y*blockDim.y+threadIdx.y; // column
	if( x < n and y < p ) {

	std::size_t pitch;
	cudaMallocPitch( &matrix, &pitch, n*sizeof(double), n );

	dim3 grid( n, (n+numThreads-1)/numThreads ), threads( 1, numThreads );
	matrixTranspose<<<grid,threads>>>( matrix, pitch, n );

	stop.record();
