- Code: Select all
...
if (notran) {
inc = 1;
/* Solve A * X = B. */
cublasGetMatrix( n, nrhs, sizeof(float), dB, lddb, work, n);
lapackf77_slaswp(&nrhs, work, &n, &i1, &i2, ipiv, &inc);
cublasSetMatrix( n, nrhs, sizeof(float), work, n, dB, lddb);
if ( nrhs == 1) {
cublasStrsv(MagmaLower, MagmaNoTrans, MagmaUnit, n, dA, ldda, dB, 1 );
cublasStrsv(MagmaUpper, MagmaNoTrans, MagmaNonUnit, n, dA, ldda, dB, 1 );
} else {
cublasStrsm(MagmaLeft, MagmaLower, MagmaNoTrans, MagmaUnit, n, nrhs, c_one, dA, ldda, dB, lddb );
cublasStrsm(MagmaLeft, MagmaUpper, MagmaNoTrans, MagmaNonUnit, n, nrhs, c_one, dA, ldda, dB, lddb );
}
} else {
inc = -1;
/* Solve A' * X = B. */
if ( nrhs == 1) {
cublasStrsv(MagmaUpper, trans, MagmaNonUnit, n, dA, ldda, dB, 1 );
cublasStrsv(MagmaLower, trans, MagmaUnit, n, dA, ldda, dB, 1 );
} else {
cublasStrsm(MagmaLeft, MagmaUpper, trans, MagmaNonUnit, n, nrhs, c_one, dA, ldda, dB, lddb );
cublasStrsm(MagmaLeft, MagmaLower, trans, MagmaUnit, n, nrhs, c_one, dA, ldda, dB, lddb );
}
cublasGetMatrix( n, nrhs, sizeof(float), dB, lddb, work, n );
lapackf77_slaswp(&nrhs, work, &n, &i1, &i2, ipiv, &inc);
cublasSetMatrix( n, nrhs, sizeof(float), work, n, dB, lddb);
}
Stan
