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

I have problem to call the MKL DSS in single precision. I have the following code:

...

COMPLEX*8::X8(1),B8(1),A8(1)

...

OPT = MKL_DSS_SINGLE_PRECISION

ierror = dss_create( handle, OPT )

ierror = dss_define_structure(handle,MKL_DSS_SYMMETRIC_COMPLEX,IROW,N,N,ICOL,NK)

ierror = dss_reorder( handle, MKL_DSS_DEFAULTS, perm )

ierror = dss_factor_complex( handle,MKL_DSS_INDEFINITE, A8)

ierror = dss_solve_complex( handle, MKL_DSS_REFINEMENT_OFF,B8, NRHS, X8)

...

When compiling, the following errors displayed:

error #6633: The type of the actual argument differs from the type of the dummy argument. [A8]

error #6633: The type of the actual argument differs from the type of the dummy argument. [B8]

error #6633: The type of the actual argument differs from the type of the dummy argument. [X8]

I built the code in Win7 x64 + VS2008 + Intel Visual Fortran 11.1.065 + Intel MKL 10.2.6.037.

Could anyone tell me what did I miss?

Thanks,

Zhanghong Tang

Link Copied

15 Replies

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

The error messages are the result of your attempting to use COMPLEX*8 (which is equivalent to COMPLEX(KIND=4)) argument arrays.

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

Thank you very much for your kindly reply. Do you mean that the DSS changed the data type for Pardiso solver automatically? I tried to modify the code to declare the data as COMPLEX*16, the program crashed in the subroutine "dss_factor_complex".

Thanks,

Zhanghong Tang

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

*alternatives*. Therefore, there is no reason for a choice made with reference to one package to affect the other package.

It is not surprising that a crash occurred, if you called the DSS routines with improperly set arguments. For example, you declare the arrays with

COMPLEX*8::X8(1),B8(1),A8(1)

If N, NK, etc., happen to be different from 1, this declaration could be in error.

Please post a small, complete example code demonstrating the problem. The MKL installation has an example, dss_sym_f90.f90, that you may want to try first and adapt to your purposes next.

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

For the example case, if I change the code from

error = DSS_CREATE( handle, MKL_DSS_DEFAULTS )

to

error = DSS_CREATE( handle, MKL_DSS_SINGLE_PRECISION )

The following error displayed:

MKL-DSS-DSS-Error, Zero Pivot detected

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

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

Thank you very much for your kindly reply.

Even I declare the X8(N), B8(N), the program still crash.

For the example program "dss_sym_f90.f90", what should I do to let it work on single precision? I modified the following code:

error = DSS_CREATE( handle, MKL_DSS_SINGLE_PRECISION )

or

error = DSS_CREATE( handle, MKL_DSS_SINGLE_PRECISION+MKL_DSS_MSG_LVL_WARNING + MKL_DSS_TERM_LVL_ERROR )

Both give the same error I shown above.

Thanks,

Zhanghong Tang

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

When a library provides only a double-precision version of a routine, you cannot expect the routine work with arguments of the wrong type (single-precision). Specifying single-precision with a flag (MKL_DSS_SINGLE_PRECISION) is of no use when the library has no capability for obeying that demand.

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

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

To run your program in single precision mode you should declare all your REAL data as REAL*4, but in your example all arrays are double precision.

So, you may simply use

INTEGER, PARAMETER :: dp = KIND(1.0E0)

instead of

INTEGER, PARAMETER :: dp = KIND(1.0D0)Regards,

Konstantin

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

Thank you very much for your kindly reply. After I changed the code as you said, the following errors displayed:

dss_sym_f90.f90(78): error #6633: The type of the actual argument differs from the type of the dummy argument. [VALUES]

dss_sym_f90.f90(82): error #6633: The type of the actual argument differs from the type of the dummy argument. [RHS]

dss_sym_f90.f90(82): error #6633: The type of the actual argument differs from the type of the dummy argument. [SOLUTION]

dss_sym_f90.f90(89): error #6633: The type of the actual argument differs from the type of the dummy argument. [STATOUT]

Could you please provide me a whole project that you have successfully run?

Thanks,

Zhanghong Tang

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

Yes, this is a
known problem with support single precision of f90 interfaces for DSS function.
We are working on that problem at this moment.

As a temporarily workaround, I 'd recommend you to manually change the API of these functions by replacingREAL(KIND=8) byREAL(KIND=4).

I mean the following list of functions:DSS_FACTOR_REAL,DSS_SOLVE_REAL,DSS_STATISTICS

and if you call DSS_CREATE( handle, MKL_DSS_SINGLE_PRECISION)

then all stuff should be Compliable and run well.

--Gennady

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

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

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

Here is a bug tracking number for your reference:

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

the problem has been fixed in the latest version of MKL 10.2 Update 7. Could you please check if the problem is still there and let us know.

--Gennady

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