Hi,
I want to do a cholesky factorization of a matrix.
To do that, I have chosen magma_spotrf_gpu function.
For matrix dimensions up to 128 it computes cholesky factorization with no problem (because blocks size is 128). So It takes a branch where it uses lapackf77_spotrf. I have checked that resulting matrix is correct.
But for dimensions over 128, for example 1000, it takes another branch wich uses left-looking algirthm. In that algorithm, magma_ssyrk function is used. This function is returning a code error with value -30 (INVALID_VALUE).
Matrix is a matrix of float with 1000x1000 dimension. Stored in row major order. Offset is 0. Stride (i think them called it leading dimension is the same as dimension, i.e. 1000). Uplo value is magmaLower.
Calls are like that, using gdb debugger
magma_spotrf_gpu ( uplo=122,
n=1000,
dA=0x88a8c0,
dA_offset=0,
ldda=1000,
info=0x7fffffffde00,
queue=0x870820)
Inside magma_spotrf_gpu below function is called and is given the error when dimension is over 128:
magma_ssyrk ( uplo=122,
trans=111,
n=128,
k=0,
alpha=-1,
dA=0x88a8c0,
dA_offset=0,
lda=1000,
beta=1,
dC=0x88a8c0,
dC_offset=0,
ldc=1000,
queue=0x870820) at magmablas_s.cpp:230
I thing k = 0 value is very suspicious because it is supposed to be a dimension... But I have not modified source file.
Called to that function in source file is
chk( magma_ssyrk( MagmaLower,
MagmaNoTrans,
jb,
j,
m_one,
dA(j, 0),
ldda,
one,
dA(j, j),
ldda,
queue ));
call is inside this loop
for( j = 0; j < n; j += nb ) {
// apply all previous updates to diagonal block
jb = min( nb, n-j );
call ssyrk(...);
nb is the block size (128).
dA(x,y) is a macro
#define dA(i,j) dA, ( (dA_offset) + (i) + (j)*ldda )
n is the dimension (1000).
I am using OpenCL 1.1. Hardware is NVIDIA Geforce gtx 285. I have compiled clmagma to use OpenCL + amd blas instead of using cuda + cublas.
Thanks in advance.
