Registered Member
|
Hi all,
I would like to use eigen for some dense matrix operations on rather small matrices (ie. 24x24). However, the application has to run on a cray-xt3. The call to mm_malloc gives me an error, as this function is not recognised by the compiler (pgiCC). This is because the posix_memalign() routine is not supported on XT3 compute nodes. Is there a way to use Eigen anyways (i.e. exchanging the allocation function)? Best regards, David |
Moderator
|
Hi,
can you be more specific about the error, because _mm_malloc and posix_memalign are two different functions, and Eigen tries to use only one of them (based on compiler's preprocessor tokens). Are you really sure none of these functions is available on your platform? What is the system? perhaps malloc is already aligned on a 16 bytes boundary? If none of these functions work for you we have an home made routine. I recommend you to have a look at the file Eigen/src/Core/util/Memory.h and hack it until it works for you. For instance you can edit lines 42-45 such that EIGEN_HAS_MM_MALLOC is always 0. The best would be to find the specific macros defined by your compiler/platform to enable the correct routine. If I'm right the cray-xt3 is made of x86_64 and pgiCC internally uses GCC. So both _x86_64_ and __GCC__ should be defined, but those are too generic and we need something more specific. |
Registered Member
|
HI Gael,
Okay, that seemed to work. Now I get another error for cvtss: "/users/davidc/src/eigen-2.0.0/Eigen/src/Core/arch/SSE/PacketMath.h", line 117: error: identifier "_mm_cvtss_f32" is undefined template EIGEN_STRONG_INLINE float ei_pfirst(const __m128& a) { return _mm_cvtss_f32(a); } If this is going too far, I can as well run it on another cluster with compute node linux and all the convenient standard setup (instead of the catamount kernel). Thanks, David |
Moderator
|
hm, that's rather weird. is _mm_cvtss_f32 the only undefined identifier ? In principle all _mm_* functions are intrinsics which should be converted to 1 or 2 instructions by the compiler. Do you know the GCC version which is used as backend ? Are you compiling with optimizations and SSE support on ? (-O2 -msse2)
In the meantime you can still disable the explicit vectorization by defining EIGEN_DONT_VECTORIZE but I guess you really want support for the vectorization In order to narrow the problem, you can try to compile a simple example such as:
if you don't manage to get this example working, ask people who know about your system because I never had such one in hand. |
Registered Member
|
Thank you, I will do that and come back to you later. David |
Registered users: Bing [Bot], Evergrowing, Google [Bot], rblackwell