void Mjoin(Mjoin(PATL,trcopyU2U_N),NM) #endif (const int N, const SCALAR alpha0, const TYPE *A, const int lda, TYPE *C) /* * Copies an Upper matrix to a dense matrix with zeros below the diagonal */ { int i, j; const register TYPE alpha=alpha0; const TYPE *Ac = A; if (N > 1) { for (j=0; j != N; j++) { for (i=0; i != j; i++) C[i] = ATL_MulByALPHA(Ac[i]); #ifdef UnitDiag_ C[j] = alpha; #else C[j] = ATL_MulByALPHA(Ac[j]); #endif for (i=j+1; i < N; i++) C[i] = 0.0; C += N; Ac += lda; } } else if (N == 1) { #ifdef UnitDiag_ *C = alpha; #else *C = ATL_MulByALPHA(*A); #endif } }
void Mjoin(PATL,Mjoin(gemove,NM)) (const int M0, const int N, const SCALAR alpha0, const TYPE *A, const int lda, TYPE *C, const int ldc) /* * C <- alpha * A */ { #ifdef ALPHA0 Mjoin(PATL,gezero)(M0, N, C, ldc); #elif defined(ALPHA1) Mjoin(PATL,gecopy)(M0, N, A, lda, C, ldc); #elif defined(TREAL) || defined(ALPHAXI0) int i, j; const int n = N>>1; #ifdef TREAL #define M M0 const register TYPE alpha = alpha0; const int incA = lda<<1, incC = ldc<<1; #else const register TYPE ralpha = *alpha0; const int M = M0<<1, incA = lda<<2, incC = ldc<<2; #endif const TYPE *A0 = A, *A1 = A+(lda SHIFT); TYPE *C0 = C, *C1 = C+(ldc SHIFT); for (j=n; j; j--, A0 += incA, A1 += incA, C0 += incC, C1 += incC) { for (i=0; i != M; i++) { C0[i] = ATL_MulByALPHA(A0[i]); C1[i] = ATL_MulByALPHA(A1[i]); } } if (N != (n<<1)) for (i=0; i != M; i++) C0[i] = ATL_MulByALPHA(A0[i]); #elif defined(TCPLX) const int incA = (lda-M0)<<1, incC = (ldc-M0)<<1; int i, j; const register TYPE ralpha = *alpha0, ialpha = alpha0[1]; register TYPE rtmp, itmp; for (j=N; j; j--, A += incA, C += incC) { for(i=M0; i; i--, A += 2, C += 2) { rtmp = *A; itmp = A[1]; *C = rtmp * ralpha - itmp * ialpha; C[1] = rtmp * ialpha + itmp * ralpha; } } #endif }
void Mjoin(Mjoin(PATL,pcol2blk),NM) (const int M, const int N, const TYPE alpha, const TYPE *A, int lda, const int ldainc, TYPE *V) /* * Given a packed matrix A, copies N columns starting at A into * block-major column panel * ldainc = 0 : General * ldainc = 1 : Upper * ldainc = -1 : Lower * NOTE: specialize to alpha cases after it works! */ { const int kb = Mmin(M,NB); const int nrb = M / kb, mr = M - nrb*kb; int i, ib, j, J; const int NN = N*kb; TYPE *v = V + nrb*NN; if (ldainc) { if (ldainc == -1) lda--; ATL_assert(N <= NB); for (j=0; j != N; j++) { for (ib=nrb; ib; ib--) { for (i=0; i < kb; i++) V[i] = ATL_MulByALPHA(A[i]); V += NN; A += kb; } if (mr) { for (i=0; i < mr; i++) v[i] = ATL_MulByALPHA(A[i]); v += mr; } V += kb - nrb*NN; A += lda - nrb*kb; lda += ldainc; } } else Mjoin(Mjoin(PATL,col2blk),NM)(M, N, A, lda, V, alpha); }
void Mjoin(Mjoin(PATL,prow2blkT),NM) (const int M, const int N, const TYPE alpha, const TYPE *A, int lda, const int ldainc, TYPE *V) /* * Given a packed Upper matrix A, copies & transposes M rows starting at A into * block-major row panel * ldainc = 0 : General rectangular * ldainc = 1 : Upper * ldainc = -1 : Lower * NOTE: specialize to alpha cases after it works! */ { const int kb = Mmin(NB,N); const int ncb = N / kb, nr = N - ncb*kb; const int incV = kb*M - kb; int jb, i, j; TYPE *v; if (ldainc) { if (ldainc == -1) lda--; for (jb=ncb; jb; jb--) { for (j=kb; j; j--) { v = V++; for (i=0; i != M; i++, v += kb) *v = ATL_MulByALPHA(A[i]); A += lda; lda += ldainc; } V += incV; } for (j=nr; j; j--) { v = V++; for (i=0; i != M; i++, v += nr) *v = ATL_MulByALPHA(A[i]); A += lda; lda += ldainc; } } else Mjoin(Mjoin(PATL,row2blkT),NM)(N, M, A, lda, V, alpha); }
void Mjoin(Mjoin(PATL,trcopyU2L_N),NM) #endif (const int N, const SCALAR alpha0, const TYPE *A, const int lda, TYPE *C) #endif /* * Takes an Upper matrix, transposes it, and copies it to a dense matrix with * zeroes above the diagonal (i.e., lower form) */ { int i, j; const int ldap1 = lda+1; const register TYPE alpha=alpha0; const TYPE *Ac = A, *Ar; TYPE *rC, *cC=C; if (N > 1) { for (j=0; j != N; j++) { for (i=0; i != j; i++) C[i] = 0.0; #ifdef UnitDiag_ C[j] = alpha; #else C[j] = ATL_MulByALPHA(*Ac); #endif Ar = Ac + lda; for (i=j+1; i < N; i++, Ar += lda) C[i] = ATL_MulByALPHA(*Ar); C += N; Ac += ldap1; } } else if (N == 1) { #ifdef UnitDiag_ *C = alpha; #else *C = ATL_MulByALPHA(*A); #endif } }
void Mjoin(Mjoin(PATL,sycopyU),NM) (const int N, const SCALAR alpha0, const TYPE *A, const int lda, TYPE *C) /* * Copies a symmetric matrix stored in Upper format to a dense matrix */ { int i, j; const register TYPE alpha=alpha0; const TYPE *Ar, *Ac = A; TYPE *rC, *cC=C; if (N > 1) { for (j=0; j != N; j++) { for (i=0; i <= j; i++) C[i] = ATL_MulByALPHA(Ac[i]); Ar = Ac + j + lda; for (i=j+1; i < N; i++, Ar += lda) C[i] = ATL_MulByALPHA(*Ar); C += N; Ac += lda; } } else if (N == 1) *C = ATL_MulByALPHA(*A); }