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

ERROR during symbolic factorization: -1. Even in runing the example code like pardiso_sym.c

kaihuang
Novice
1,033 Views

My CMakeLists.text:

cmake_minimum_required(VERSION 3.17)
project(test)

set(CMAKE_CXX_STANDARD 14)

FIND_PACKAGE( OpenMP REQUIRED)
if(OPENMP_FOUND)
message("OPENMP FOUND")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
endif()

#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0")

#set(CMAKE_BUILD_TYPE "Release" )

include_directories( "/usr/include/eigen3" )

include_directories(/opt/intel/oneapi/mkl/2023.1.0/include)
link_directories(/opt/intel/oneapi/mkl/2023.1.0/lib/intel64)

include_directories(/opt/intel/oneapi/compiler/2023.1.0/linux/include)
link_directories(/opt/intel/oneapi/compiler/2023.1.0/linux/lib/intel64)


include_directories(/home/chenkaihuang/sycl_workspace/llvm/build/install/include)
link_directories(/home/chenkaihuang/sycl_workspace/llvm/build/install/lib)

add_executable(test pardiso_sym.c)

target_link_libraries(test -Wl,--start-group /opt/intel/oneapi/mkl/2023.1.0/lib/intel64/libmkl_intel_ilp64.a /opt/intel/oneapi/mkl/2023.1.0/lib/intel64/libmkl_gnu_thread.a /opt/intel/oneapi/mkl/2023.1.0/lib/intel64/libmkl_core.a -Wl,--end-group -lgomp -lpthread -lm -ldl)
 
 
 
-----------------------------------------------------
-----------------------------------------------------
-----------------------------------------------------
-----------------------------------------------------
-----------------------------------------------------
-----------------------------------------------------
-----------------------------------------------------
-----------------------------------------------------
 
 
 
My pardiso_sym.c:
/*******************************************************************************
* Copyright 2004-2022 Intel Corporation.
*
* This software and the related documents are Intel copyrighted materials, and
* your use of them is governed by the express license under which they were
* provided to you (License). Unless the License provides otherwise, you may not
* use, modify, copy, publish, distribute, disclose or transmit this software or
* the related documents without Intel's prior written permission.
*
* This software and the related documents are provided as is, with no express
* or implied warranties, other than those that are expressly stated in the
* License.
*******************************************************************************/

/*
* Content : Intel(R) oneAPI Math Kernel Library (oneMKL) PARDISO C example
*
********************************************************************************
*/
/* -------------------------------------------------------------------- */
/* Example program to show the use of the "PARDISO" routine */
/* on symmetric linear systems */
/* -------------------------------------------------------------------- */
/* This program can be downloaded from the following site: */
/* www.pardiso-project.org */
/* */
/* (C) Olaf Schenk, Department of Computer Science, */
/* University of Basel, Switzerland. */
/* Email: olaf.schenk@unibas.ch */
/* -------------------------------------------------------------------- */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#include "mkl_pardiso.h"
#include "mkl_types.h"

// Define the format to printf MKL_INT values
#if !defined(MKL_ILP64)
#define IFORMAT "%i"
#else
#define IFORMAT "%lli"
#endif

int main (void)
{
/* Matrix data. */
MKL_INT n = 8;
MKL_INT ia[9] = { 1, 5, 8, 10, 12, 15, 17, 18, 19};
MKL_INT ja[18] =
{ 1, 3, 6, 7,
2, 3, 5,
3, 8,
4, 7,
5, 6, 7,
6, 8,
7,
8
};
double a[18] =
{ 7.0, 1.0, 2.0, 7.0,
-4.0, 8.0, 2.0,
1.0, 5.0,
7.0, 9.0,
5.0, 1.0, 5.0,
-1.0, 5.0,
11.0,
5.0
};
MKL_INT mtype = -2; /* Real symmetric matrix */
/* RHS and solution vectors. */
double b[8], x[8];
MKL_INT nrhs = 1; /* Number of right hand sides. */
/* Internal solver memory pointer pt, */
/* 32-bit: int pt[64]; 64-bit: long int pt[64] */
/* or void *pt[64] should be OK on both architectures */
void *pt[64];
/* Pardiso control parameters. */
MKL_INT iparm[64];
MKL_INT maxfct, mnum, phase, error, msglvl;
/* Auxiliary variables. */
MKL_INT i;
double ddum; /* Double dummy */
MKL_INT idum; /* Integer dummy. */
/* -------------------------------------------------------------------- */
/* .. Setup Pardiso control parameters. */
/* -------------------------------------------------------------------- */
for ( i = 0; i < 64; i++ )
{
iparm[i] = 0;
}
iparm[0] = 1; /* No solver default */
iparm[1] = 2; /* Fill-in reordering from METIS */
iparm[3] = 0; /* No iterative-direct algorithm */
iparm[4] = 0; /* No user fill-in reducing permutation */
iparm[5] = 0; /* Write solution into x */
iparm[6] = 0; /* Not in use */
iparm[7] = 2; /* Max numbers of iterative refinement steps */
iparm[8] = 0; /* Not in use */
iparm[9] = 13; /* Perturb the pivot elements with 1E-13 */
iparm[10] = 1; /* Use nonsymmetric permutation and scaling MPS */
iparm[11] = 0; /* Not in use */
iparm[12] = 0; /* Maximum weighted matching algorithm is switched-off (default for symmetric). Try iparm[12] = 1 in case of inappropriate accuracy */
iparm[13] = 0; /* Output: Number of perturbed pivots */
iparm[14] = 0; /* Not in use */
iparm[15] = 0; /* Not in use */
iparm[16] = 0; /* Not in use */
iparm[17] = -1; /* Output: Number of nonzeros in the factor LU */
iparm[18] = -1; /* Output: Mflops for LU factorization */
iparm[19] = 0; /* Output: Numbers of CG Iterations */
maxfct = 1; /* Maximum number of numerical factorizations. */
mnum = 1; /* Which factorization to use. */
msglvl = 1; /* Print statistical information in file */
error = 0; /* Initialize error flag */
/* -------------------------------------------------------------------- */
/* .. Initialize the internal solver memory pointer. This is only */
/* necessary for the FIRST call of the PARDISO solver. */
/* -------------------------------------------------------------------- */
for ( i = 0; i < 64; i++ )
{
pt[i] = 0;
}
/* -------------------------------------------------------------------- */
/* .. Reordering and Symbolic Factorization. This step also allocates */
/* all memory that is necessary for the factorization. */
/* -------------------------------------------------------------------- */
phase = 11;
PARDISO (pt, &maxfct, &mnum, &mtype, &phase,
&n, a, ia, ja, &idum, &nrhs, iparm, &msglvl, &ddum, &ddum, &error);
if ( error != 0 )
{
printf ("\nERROR during symbolic factorization: " IFORMAT, error);
exit (1);
}
printf ("\nReordering completed ... ");
printf ("\nNumber of nonzeros in factors = " IFORMAT, iparm[17]);
printf ("\nNumber of factorization MFLOPS = " IFORMAT, iparm[18]);
/* -------------------------------------------------------------------- */
/* .. Numerical factorization. */
/* -------------------------------------------------------------------- */
phase = 22;
PARDISO (pt, &maxfct, &mnum, &mtype, &phase,
&n, a, ia, ja, &idum, &nrhs, iparm, &msglvl, &ddum, &ddum, &error);
if ( error != 0 )
{
printf ("\nERROR during numerical factorization: " IFORMAT, error);
exit (2);
}
printf ("\nFactorization completed ... ");
/* -------------------------------------------------------------------- */
/* .. Back substitution and iterative refinement. */
/* -------------------------------------------------------------------- */
phase = 33;
iparm[7] = 2; /* Max numbers of iterative refinement steps. */
/* Set right hand side to one. */
for ( i = 0; i < n; i++ )
{
b[i] = 1;
}
PARDISO (pt, &maxfct, &mnum, &mtype, &phase,
&n, a, ia, ja, &idum, &nrhs, iparm, &msglvl, b, x, &error);
if ( error != 0 )
{
printf ("\nERROR during solution: " IFORMAT, error);
exit (3);
}
printf ("\nSolve completed ... ");
printf ("\nThe solution of the system is: ");
for ( i = 0; i < n; i++ )
{
printf ("\n x [" IFORMAT "] = % f", i, x[i]);
}
printf ("\n");
/* -------------------------------------------------------------------- */
/* .. Termination and release of memory. */
/* -------------------------------------------------------------------- */
phase = -1; /* Release internal memory. */
PARDISO (pt, &maxfct, &mnum, &mtype, &phase,
&n, &ddum, ia, ja, &idum, &nrhs,
iparm, &msglvl, &ddum, &ddum, &error);
return 0;
}
 
 
 
RESULT: 

/home/chenkaihuang/programming/test_mkl/cmake-build-debug/test

ERROR during symbolic factorization: -1
Process finished with exit code 1

0 Kudos
1 Solution
mecej4
Honored Contributor III
1,017 Views

To be consistent when you link against libmkl_intel_ilp64.a, you should have chosen preprocessor definitions/compiler options to make the integer variables in your MKL calls to be treated as 64 bit integers.

Alternatively, let the integer arguments be the default 32-bit integer type, and use libmkl_intel_lp64.a when linking.

View solution in original post

7 Replies
mecej4
Honored Contributor III
1,018 Views

To be consistent when you link against libmkl_intel_ilp64.a, you should have chosen preprocessor definitions/compiler options to make the integer variables in your MKL calls to be treated as 64 bit integers.

Alternatively, let the integer arguments be the default 32-bit integer type, and use libmkl_intel_lp64.a when linking.

kaihuang
Novice
1,014 Views
Thanks for the reply. Can I understand like I should set the integer to be 64bit under current linking. I'm not sure I understand you totally due to the word "libmkl_intel_lp64.a" in your last sentence. Guess it should be 32bit library? Thank you.
0 Kudos
mecej4
Honored Contributor III
1,008 Views

In the context of choosing between the LP64 and ILP64 versions of MKL, the issue is whether integer arguments to MKL routines are 4-byte or 8-byte integers. In contrast, when we use phrases such as "32-bit library", we are distinguishing between 32-bit addresses and 64-bit addresses. Please read this article for more details.

0 Kudos
VarshaS_Intel
Moderator
900 Views

Hi,


Has the information provided earlier helped you?


Could you please let us know if you have any other queries?


Thanks & Regards,

Varsha


0 Kudos
VarshaS_Intel
Moderator
840 Views

Hi,


We have not heard back from you. Could you please provide us with an update on your issue?


Thanks & Regards,

Varsha


0 Kudos
kaihuang
Novice
822 Views
0 Kudos
VarshaS_Intel
Moderator
801 Views

Hi,


>>Solved by the first answer.

It’s great to know that the issue has been resolved, in case you run into any other issues please feel free to create a new thread.


Have a Good Day!


Thanks & Regards,

Varsha


0 Kudos
Reply