On Jan 6, 2008 2:36 PM, Benoît Jacob <
jacob@xxxxxxxxxxxxxxx> wrote:
There is only one thing that I don't understand: why did you
introduce this random_ ? I reverted this change. Other than that, your diff
was applied as-is.
yes, I forgot to mention that. ICC want to use the MatrixBase::random member instead of the global one. I don't know how to fix that properly. Maybe the the global math functions should have their own namespace or be inside a static class....
Regarding inlining, you could edit the EIGEN_ALWAYS_INLINE define in Util.h
and set it to whatever is appropriate when the compiler is ICC.
it seems ICC also defines __GNUC__ and understands __attribute__((always_inline)) , so nothing to do here :)
I don't really understand how there can be a failed assert... the first thing
to do is to run test/test in gdb to get a backtrace; the second thing to do
is to track down the precise line of code in test/*.cpp that triggers the
failed assert.
note that this assert is raised from the ICC binary at compile time ! so it is likely a ICC bug or wrong C++ code.
I don't know much about vectorization and didn't know that -fno-exceptions
played a role here. Maybe then GCC would also be able to vectorize? In
benchmark_suite I didn't ask it to, so it's no wonder why it didn't
vectorize. But of course, I don't expect GCC's x86 assembly backend to be as
good as ICC's one.
Obviously, I also tried to get GCC be able to vectorize but I did not succeed. I have already succeeded to get auto-vectorization working on other codes, so I guess this is really a limitation of the current GCC (
4.2.1). Maybe the 4.3 branch is smarter...
> and for your information, the 3x3 example takes about 15s without
> _expression_ template (with GCC and manual unrolling).
I used another lib for that experiment ! it was just to show that everything seems to work well.
Gael.