Turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

- Intel Community
- Software
- Software Development SDKs and Libraries
- Intel® oneAPI Math Kernel Library
- Need some advice on the parameters of MKL's Pardiso

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page

Antoine__A_

Beginner

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

12-10-2012
07:01 AM

114 Views

Need some advice on the parameters of MKL's Pardiso

Hi,

I sent a post a couple of weeks ago, but I would like to specify my problem.

I want to solve a linear system of type Ax = b, for a common matrix A ( nonsymmetric, not positive-definite...), and b, x vectors.

Pardiso perfectly works in most of cases, but for my set of input data (see attached), it doesn't work: the result I obtain is totally aberrant. This is weird since A is inversible and very well conditionned (4.9819).

Here are my iparms :

357 iparm[0] = 1; /* No solver default */

358 iparm[1] = 2; /* Fill-in reordering from METIS */

359 iparm[2] = 8;

360 iparm[3] = 0; /* CGS */

361 iparm[4] = 0; /* No user fill-in reducing permutation */

362 iparm[5] = 0; /* Write solution into x */

363 iparm[6] = 0; /* Not in use */

364 iparm[7] = 0; /* Max numbers of iterative refinement steps */

365 iparm[8] = 0; /* Not in use */

366 iparm[9] = 13; /* Perturb the pivot elements with 1E-13 */

367 iparm[10] = 1; /* Use nonsymmetric permutation and scaling MPS */

368 iparm[11] = 0; /* Not in use */

369 iparm[12] = 0; /* Not in use */

370 iparm[13] = 0; /* Output: Number of perturbed pivots */

371 iparm[14] = 0; /* Not in use */

372 iparm[15] = 0; /* Not in use */

373 iparm[16] = 0; /* Not in use */

374 iparm[17] = -1; /* Output: Number of nonzeros in the factor LU */

375 iparm[18] = -1; /* Output: Mflops for LU factorization */

376 iparm[19] = 0; /* Output: Numbers of CG Iterations */

377 iparm[27] = 1; /* check the data structure */

378 iparm[31] = 1; /* iterative solver*/

380 maxfct = 1; /* Maximum number of numerical factorizations. */

381 mnum = 1; /* Which factorization to use. */

The Package ID of mkl is : l_mkl_p_10.0.011

Thanks for any help you can give me

Antoine

ps. A is stored in CSR format. Its file is composed of 4 lines : the size of datas (row column val), the ranks of the first element of the row, the columns, and the values. Tell me if you want another format.

Link Copied

12 Replies

mecej4

Black Belt

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

12-10-2012
07:58 AM

114 Views

Antoine__A_

Beginner

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

12-10-2012
09:04 AM

114 Views

Alexander_K_Intel2

Employee

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

12-10-2012
09:19 AM

114 Views

Antoine__A_

Beginner

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

12-11-2012
03:28 AM

114 Views

mecej4

Black Belt

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

12-11-2012
12:35 PM

114 Views

To have Pardiso check your matrix, set iparm[26]=1 (not iparm[27]=1 as you did).

The array ia must have one more entry: the last entry should be set as m_row[m_dim]=m_nnz+1; this is the CSR storage convention. You left this item undefined but, because of the preceding error, Pardiso did no checking of the matrix.
You have loops such as
* += 1;
** -= 1;
***indices** of arrays b and x that may be zero- or one-based, not their **values**.

Antoine__A_

Beginner

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

12-12-2012
12:27 AM

114 Views

mecej4 wrote:You are right, this really make no sens. Actually, I haven't done that in my real program. I needed to change the program a little and I added that, I don't know why.These make no sense. It is the indices of arrays b and x that may be zero- or one-based, not their values.

mecej4 wrote:This is done by m_row.push_back(m_val.size()+1);the last entry should be set as m_row[m_dim]=m_nnz+1

mecej4 wrote:I have just tried this... My matrix seems to be correctly input.To have Pardiso check your matrix, set iparm[26]=1

Antoine__A_

Beginner

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

12-13-2012
06:23 AM

114 Views

Alexander_K_Intel2

Employee

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

12-13-2012
06:42 AM

114 Views

Antoine__A_

Beginner

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

12-13-2012
06:48 AM

114 Views

It works with iparm[12]=1.

Antoine__A_

Beginner

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

12-13-2012
06:55 AM

114 Views

Sorry, it's iparm[13] since I'm in C indexing.
And so I understand why it is so important

mecej4

Black Belt

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

12-13-2012
07:05 AM

114 Views

Had you chosen the solver defaults for your matrix type, you would have had a working program quickly, which you could then tweak by modifying the iparm[] values to your satisfaction.

However, you chose to set iparm[0] to a non-zero value at the outset, which then shifted the responsibility to you for setting all 64 values correctly, taking into account the documentation's 1-based indexing and your C++ program's 0-based indexing.

Alexander_K_Intel2

Employee

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

12-13-2012
07:14 AM

114 Views

Topic Options

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

For more complete information about compiler optimizations, see our Optimization Notice.