Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.

Intel MKL ERROR: Parameter 2 was incorrect on entry to MKL_DCSRGEMV.

Maggie_m_
初学者
7,876 次查看

Not sure why I got such error message for the code below.  Any suggestions ? Thanks

 

0 项奖励
1 解答
Ying_H_Intel
主持人
7,876 次查看

Hi Maggie, 

i try you code.  and can't get the error, but other error. 

 >source /opt/intel/composer_xe_2015.2.164/bin/iccvars.sh intel64

 

>icc main.c LinearSolver.c -mkl

and the error is like below. 

 
matrix column indexes are not in increasing order.
From error message, it seems there are two problems in your programs:

1. mkl_dcsrgemv  and dcsrilu0 supports only one-based indexing of the input arrays  and matrix column indexes must be in increasing order.  

why you have code to change this?

for(i=0; i<*N; i++) --ia;
        for(i=0; i<*NNZ; i++) --ja;

2. the key problem, as alex mentioned,  what model do you want,  ILP64 or LP64.  If ILP64.  Then it is better to use MKL_INT  to replace the int where needed. 

20803 0.000037 1583 -1.288940

 20809 0.000635 1584 -0.294387
 20815 0.000056 433 -1.870527
 20821 -0.000022 1009 -0.125222
 dcsrgemv
Linear Solver begins
sizetmpi= 27474718
N=3314, NNZ= 20820
LinearSolver: Line 48
dfgmres_init
dfgmres_end
ilu begin

------------------------------------------------------------------------------
Intel MKL DCSRILU0 ERROR:
Cannot proceed with calculations as input
matrix column indexes are not in increasing order.
ilu end
Preconditioner dcsrilu0 has returned the ERROR code -106-------------------------------------------------------------------
Unfortunately, FGMRES+ILU0 C example has FAILED
-------------------------------------------------------------------
The error is 2

Best Regards,

Ying

在原帖中查看解决方案

0 项奖励
7 回复数
mecej4
名誉分销商 III
7,876 次查看

I have not looked at the details of your problem, but here is something that can be a problem if you have not already provided for it. When you store a matrix in the three array CSR scheme (iA,jA,A), there is a restriction in many routines that use such matrices as arguments, especially when factorizing A: you should not skip creating an entry for the diagonal element even when the value of that element is zero.

0 项奖励
Maggie_m_
初学者
7,876 次查看

The problem is about   mkl_dcsrgemv(&cvar,&ivar, A, ia, ja, Sol, rhs); 

Parameter 2 was incorrect on entry to MKL_DCSRGEMV.

int ivar = N;
    char cvar ='N';
    for (i=0; i<N; i++) Sol = 1.0;
        printf("dcsrgemv\n");
    mkl_dcsrgemv(&cvar,&ivar, A, ia, ja, Sol, rhs); 

I have tried to print the beginning and the end part of array A, ia, ja, rhs before calling this function.  They are exactly as the input. So dont know why get such error. 

0 项奖励
Alexander_K_Intel2
7,876 次查看

Hi,

Have you link with ilp64 or lp64 MKL libraries? Try to changed your link line - the problem will fixed

Thanks,

Alex

0 项奖励
Ying_H_Intel
主持人
7,877 次查看

Hi Maggie, 

i try you code.  and can't get the error, but other error. 

 >source /opt/intel/composer_xe_2015.2.164/bin/iccvars.sh intel64

 

>icc main.c LinearSolver.c -mkl

and the error is like below. 

 
matrix column indexes are not in increasing order.
From error message, it seems there are two problems in your programs:

1. mkl_dcsrgemv  and dcsrilu0 supports only one-based indexing of the input arrays  and matrix column indexes must be in increasing order.  

why you have code to change this?

for(i=0; i<*N; i++) --ia;
        for(i=0; i<*NNZ; i++) --ja;

2. the key problem, as alex mentioned,  what model do you want,  ILP64 or LP64.  If ILP64.  Then it is better to use MKL_INT  to replace the int where needed. 

20803 0.000037 1583 -1.288940

 20809 0.000635 1584 -0.294387
 20815 0.000056 433 -1.870527
 20821 -0.000022 1009 -0.125222
 dcsrgemv
Linear Solver begins
sizetmpi= 27474718
N=3314, NNZ= 20820
LinearSolver: Line 48
dfgmres_init
dfgmres_end
ilu begin

------------------------------------------------------------------------------
Intel MKL DCSRILU0 ERROR:
Cannot proceed with calculations as input
matrix column indexes are not in increasing order.
ilu end
Preconditioner dcsrilu0 has returned the ERROR code -106-------------------------------------------------------------------
Unfortunately, FGMRES+ILU0 C example has FAILED
-------------------------------------------------------------------
The error is 2

Best Regards,

Ying

0 项奖励
Maggie_m_
初学者
7,876 次查看

Thank you, Ying and Alex. I do use ilp64 in my makefile. And I have attached my makefile. 

for(i=0; i<*N; i++) --ia;
        for(i=0; i<*NNZ; i++) --ja;

These two lines are because the input ia, ja are from the output of fortran code, the array of which begins from 1. 

 

FC = ifort -check bounds -g -traceback
CC = icc -g -traceback

MKLDIR = /nas02/apps/intel-15.0/cc/mkl

FFLAGS = -i8 -openmp -w -fast -DMKL_ILP64 -m64  \
     -I$(MKLDIR)/include/intel64/ilp64 \
     -I$(MKLDIR)/include 

CFLAGS = -i8 -openmp -w -fast -DMKL_ILP64 -m64 \
     -I$(MKLDIR)/include/intel64/ilp64 \
     -I$(MKLDIR)/include


#INCLUDES = -I$(MKLDIR)/include/intel64/ilp64 -I$(MKLDIR)/include

LFLAGS = -L$(MKLDIR)/lib/intel64 -lmkl_intel_ilp64 \
     -lmkl_intel_thread -lmkl_blas95_ilp64 -lmkl_lapack95_ilp64 \
         -liomp5 -lmkl_core  -lm -lpthread

OBJS =  main.o LinearSolver.o

ALL_OBJ = $(OBJS)

%.o: %.f
    $(FC) $(FFLAGS) -c $<
%.o:%.c
    $(CC) $(FFLAGS) -c $<

ds:  $(ALL_OBJ)
    $(CC) $(ALL_OBJ) $(LFLAGS) -o ds 

clean:
    rm -rf *.o *.mod *.out *.chk ds

0 项奖励
mecej4
名誉分销商 III
7,876 次查看

If you call MKL routines from C or Fortran 77, you do not need " -lmkl_blas95_ilp64 -lmkl_lapack95_ilp64 ". You need those libraries only if you call from Fortran 90+ and you call the F95 interface names rather than the F77 names.

0 项奖励
Maggie_m_
初学者
7,876 次查看

Also,  I have changed all the int to MKL_INT. However, I still got the error:

 dcsrgemv
Linear Solver begins
sizetmpi= 27474718
N=3314, NNZ= 20820
LinearSolver: Line 48
dfgmres_init
dfgmres_end
ilu begin

------------------------------------------------------------------------------
Intel MKL DCSRILU0 ERROR: 
Cannot proceed with calculations as input
matrix column indexes are not in increasing order.
ilu end
Preconditioner dcsrilu0 has returned the ERROR code -106-------------------------------------------------------------------
Unfortunately, FGMRES+ILU0 C example has FAILED
-------------------------------------------------------------------
The error is 0

0 项奖励
回复