New user self-registration is disabled due to spam. Please email eigen-core-team @ if you need an account.
Before reporting a bug, please make sure that your Eigen version is up-to-date!
Bug 705 - Incorrect Choleskly (LLT) return code when MKL is enabled
Summary: Incorrect Choleskly (LLT) return code when MKL is enabled
Alias: None
Product: Eigen
Classification: Unclassified
Component: Cholesky (show other bugs)
Version: 3.2
Hardware: All All
: Normal major
Assignee: Nobody
Depends on:
Reported: 2013-11-19 17:59 UTC by richard.jw.roberts
Modified: 2015-06-05 14:00 UTC (History)
4 users (show)


Description richard.jw.roberts 2013-11-19 17:59:01 UTC
When MKL is enabled, LLT returns the wrong error/success code.  This appears to be due to misinterpretation of the return code of an internal function:

For both MKL and non-MKL mode, LLT_Traits::inplace_decomposition() returns the value llt_inplace<...>::blocked(m) == -1.

The non-MKL llt_inplace<...>::blocked returns -1 on success and another number >=0 (?) on failure.

However, the MKL llt_inplace<...>::blocked calls mkl_llt::potrf, which returns Success (0) and NumericalIssue (1).

I think the fix is that mkl_llt::potrf should instead return -1 on success and some other number on failure.

In my tests, changing the line "info = (info==0) ? Success : NumericalIssue;" to "info = (info==0) ? -1 : 1;" in the file Eigen/src/Cholesky/LLT_MKL.h fixes the problem.  However, I'm not sure what the meaning of a failure return code is, so I'm not sure if 1 is the best value to return on error.
Comment 1 Christoph Hertzberg 2013-11-19 18:58:25 UTC
The return value seems to be the index where the decomposition failed. It looks as if this is ignored at the moment, so your fix should be ok.

I'm wondering, has anyone ever successfully ran the unit tests with MKL enabled?
Comment 2 mathieu Letombe 2015-05-22 08:45:30 UTC

We do use Eigen with MKL (good deal I think), and I confirm this bug. 
I think the fix of richard is good.

Thanks for your work!

Comment 3 Gael Guennebaud 2015-06-05 14:00:44 UTC

(llt_inplace::blocked also returns the first failing row/column)

Note You need to log in before you can comment on or make changes to this bug.