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
- mkl routines for upper triangular matrices

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

numerix1

Beginner

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

07-16-2014
12:01 PM

124 Views

mkl routines for upper triangular matrices

Dear MKL users,

I am a bit confused with how to use mkl routines for upper triangular matrices. For example. I have the matrix:

1.000000 2.000000 3.000000

0.000000 4.000000 5.000000

0.000000 0.000000 8.000000

which I store row major format via:

the array data of size num_columns by num_rows with entry i,j stored as

data[i*num_cols + j] = value

I store the full matrix, even the zeros. Then I call the following to get the inverse:

LAPACKE_dtrtri( LAPACK_ROW_MAJOR, 'U', 'N', num_column, data, num_columns);

this Lapacke routine works fine and data is overwritten with the inverse matrix, as expected.

Now I would like to solve the system A x = b with

double b[3] = {1.,2.,3.}

cblas_dtrsv (CblasRowMajor, 'u', 'n', 'n', 3, data, 3, b, 1);

but the output is always:

Intel MKL ERROR: Parameter 2 was incorrect on entry to cblas_dtrsv

I tried to store only the nonzero elements in data, i.e. change the data array to be

double data[6] = {1.,2.,3.,4.,5.,8.}

but I still get the same error. Can someone explain how I must define my matrix to be recognized as upper triangular for the cblas routine and how the cblas routines are different from the Lapacke ones?

thanks very much

Link Copied

2 Replies

mecej4

Black Belt

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

07-16-2014
12:55 PM

124 Views

Please use the enum constants as named at https://software.intel.com/en-us/node/468386. The MKL documentation is, I think, misleading in that it seems to say that the values 'U' and 'N' are suitable for the Cblas_?trsv argument **Uplo**, just the same as for the Fortran BLAS routine ?trsv argument **uplo**. In your program, use

cblas_dtrsv(CblasRowMajor, CblasUpper, CblasNoTrans, CblasNonUnit, 3, A, 3, b, 1);

and you will not only get the correct behavior, but the source code will also have better readability.

numerix1

Beginner

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

07-16-2014
01:18 PM

124 Views

Replacing the characters by the enum constants fixed it. Thank you!

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.