#include #include #include #include #include #include #include void initMatrix(size_t m, size_t n, double *A, ptrdiff_t incRow, ptrdiff_t incCol) { for (size_t i=0; i fabs(x[iMax*incX])) { iMax = i; } } return iMax; } void dcopy(size_t n, const double *x, ptrdiff_t incX, double *y, ptrdiff_t incY) { for (size_t i=0; ij) ? LU[i*incRowLU+j*incColLU] : (i==j) ? 1 : 0; } } for (j=0; j0; --i) { if (i-1 != P[(i-1)*incP]) { dswap(n, &LU[(i-1)*incRowLU], incColLU, &LU[P[(i-1)*incP]*incRowLU], incColLU); } } for (j=0; jn) ? m : n; double ops = minMN*minMN*maxMN -(minMN*minMN*minMN/3.) -(minMN*minMN/2.); ptrdiff_t incRowA = (ROWMAJOR==1) ? n : 1; ptrdiff_t incColA = (ROWMAJOR==1) ? 1 : m; printf(" %9zu %9zu %9td %9td", m, n, incRowA, incColA); t = 0; runs = 0; do { dgecopy(m, n, A_, 1, MAX_M, A_0, incRowA, incColA); dt = walltime(); lu_unblk(m, n, A_0, incRowA, incColA, P_0, 1); dt = walltime() - dt; t += dt; ++runs; } while (t<0.3); t /= runs; err = err_lu(m, n, A_, 1, MAX_M, A_0, incRowA, incColA, P_0, 1); printf(" %12.2e %12.2lf %12.2e %4s", t, ops/(1000*1000*t), err, (err