Transposed cases with zgetrs and cgetrs
Posted: Tue Mar 29, 2011 4:35 pm
The header for MAGMA zgetrs_gpu.cpp contains the following information about the definition of the character describing use of the transpose:
The implication of this is that the Transpose and Conjugate transpose cases are the same, and this is what is implemented in the code. Unfortunately this is not the case, as is indicated by the following from the NAG description at
http://www.nag.co.uk/numeric/Fl/manual2 ... f07asf.pdf
I have tested this on MAGMA zgetrs_gpu.cpp from RC4 and it is indeed incorrect.
The T and C cases are very similar and the solution is that, once the N cases has been identified, to modify the code to pass the character from the call directly to the calls to ztrsm.
I have tested this using an extension of testing_zgetrf_gpu_f.f and testing a small case which I have also solved using LAPACK.
Copies of the codes available on request.
Best wishes
John
Code: Select all
TRANS (input) CHARACTER*1
Specifies the form of the system of equations:
= 'N': A * X = B (No transpose)
= 'T': A'* X = B (Transpose)
= 'C': A'* X = B (Conjugate transpose = Transpose)
http://www.nag.co.uk/numeric/Fl/manual2 ... f07asf.pdf
Code: Select all
TRANS – CHARACTER*1 Input
On entry: indicates the form of the equations as follows:
if TRANS == ’N’, AX = B is solved for X;
if TRANS == ’T’, ATX = B is solved for X;
if TRANS == ’C’, AHX = B is solved for X.
Constraint: TRANS == ’N’; ’T’ or ’C’.
The T and C cases are very similar and the solution is that, once the N cases has been identified, to modify the code to pass the character from the call directly to the calls to ztrsm.
Code: Select all
cublasZtrsm(MagmaLeft, MagmaUpper, trans, MagmaNonUnit, n, nrhs, c_one, dA, ldda, dB, lddb );
cublasZtrsm(MagmaLeft, MagmaLower, trans, MagmaUnit, n, nrhs, c_one, dA, ldda, dB, lddb );
Copies of the codes available on request.
Best wishes
John