Registered Member
|
I'm trying to use the new MKL support with Eigen (EIGEN_USE_MKL_ALL), but when I do so I suddenly get reams of compile errors, mostly related to std::complex, vmspowx, and so on. Is this just a platform compatibility issue?
I'm using Visual Studio 2010, Intel MKL 10.3, and the 3.1_alpha2 version of Eigen. |
Moderator
|
it seems the MKL support has never been tested with MSVC. could you post the error messages.
|
Registered Member
|
The first error is just:
eigen\src/Core/util/MKL_support.h(64): error C2039: 'complex' : is not a member of 'std' and occurs for the typedefs: typedef std::complex<double> dcomplex; typedef std::complex<float> scomplex; If I include <complex> directly, I get as the first error: eigen\src/Core/Assign_MKL.h(210): error C3861: 'vmspowx_': identifier not found and ditto for a number of vmsXXX functions. Further down there are more errors where complex is not defined, in MatrixBase.h for example. (If turn off that EIGEN_USE_MKL_ALL I get no errors.) |
Moderator
|
ok for the inclusion order. that's fixed now. for the other errors I would guess that's because you have too old MKL version. Perhaps you could try to enable only BLAS and LAPACKE. The vms* functions are related to the VML.
|
Registered Member
|
I got the same errors on visual studio 2010 with newest intel mkl and Eigen alpha2. On Eigen 3.0.5 everything works fine, but I would really like to use the intel mkl support for solving large sparse systems with the Pardiso solver...
Kind regards |
Moderator
|
|
Registered Member
|
This is written in the "mklsupport.txt":
Package ID: w_ccompxe_2011.7.258 w_fcompxe_2011.7.258 w_mkl_10.3.7.258 This package contains: Intel(R) Math Kernel Library 10.3 Update 7 for Windows* OS I also get this reams of compile errors as stated above when I use the Eigen versin vom the development branch. |
Moderator
|
that's rather strange. I cannot reproduce, so could you attach the full error log? thanks.
|
Registered Member
|
|
Registered Member
|
Hmm I didn't find an easy way to change the language of the thrown compiler errors. So I post them in german and hope it helps anyway.
Im using the sparse and the dense module to fill serveral matrices and vectors, do some basic arithmetic operations wich get me a big system of linear equations which I currently solve with the SimplicalCholesky module and with a dense lu decomposition (thats what I would like to use PARDISO for). Everything works fine with Eigen3.0.5. When I change to Eigen 3.1.0 alpha2 without #define EIGEN_USE_MKL_ALL I get the one following error:
When I now define EIGEN_USE_MKL_ALL I get these after each compiled file:
And when I include the current version from the dev branch it gets really ugly:
regards, medic |
Moderator
|
The error with complex not being part of the std namespace is very strange. I have no clue.
|
Registered Member
|
I also get an "equal_to is not a member of namespace std" later on.
If I include <complex> directly in the said Eigen-files the compiler complains about std::complex disappear just like christopherbatty discribes in his second post. |
Registered Member
|
I don't know if this helps, but I tried to avoid namespace-pollution and avoided all using namespace declarations. I got the same errors but now the compiler is searchng for complex, equal_to ... in the scope of Eigen::std:
Regards, medic |
Moderator
|
btw, make sure you use the devel branch, not 3.1.0-alpha2.
Alors your last observation might suggest the following workaround: "::std::complex<...>" |
Registered Member
|
I also use Eigen 3.1.0 alpha2 with Intel MKL 10.3.7
I include complex.h to avoid the std::complex error and then meet same error tha't can't identify vm[sdcz]powx_ I can't find the vm[sdcz]powx_ function in mkl document either, there are only vm[sdcz]Pow and vm[sdcz]Powx I change the vm[sdcz]powx_ to vm[sdcz]Powx, but still error The error message are 1>c:\eigen3.1.0-alpha2\eigen\src/Core/Assign_MKL.h(212): error C2664: 'vmsPowx' : cannot convert parameter 1 from 'int *' to 'const int' 1> There is no context in which this conversion is possible 1>c:\eigen3.1.0-alpha2\eigen\src/Core/Assign_MKL.h(213): error C2664: 'vmdPowx' : cannot convert parameter 1 from 'int *' to 'const int' 1> There is no context in which this conversion is possible 1>c:\eigen3.1.0-alpha2\eigen\src/Core/Assign_MKL.h(214): error C2664: 'vmcPowx' : cannot convert parameter 1 from 'int *' to 'const int' 1> There is no context in which this conversion is possible 1>c:\eigen3.1.0-alpha2\eigen\src/Core/Assign_MKL.h(215): error C2664: 'vmzPowx' : cannot convert parameter 1 from 'int *' to 'const int' 1> There is no context in which this conversion is possible I don't know how to fix this, so I just comment these lines. Compile success but lose the performance of vectorize power function. |
Registered users: Bing [Bot], Google [Bot], Sogou [Bot], Yahoo [Bot]