Hi Michael, On Mon, 2004-02-02 at 07:56, Michael Matz wrote:
Hi Ödön,
On Fri, 30 Jan 2004, Odon Farkas wrote:
- Use for the moment a 32-bit OS unless you really need 64 bits for
I wouldn't give such advice at all. Run benchmarks and then decide. If you recompile the stuff the 64bit version should win in most cases.
development or your application. In some integer performance sensitive applications the 64-bit version might run much faster but my experience with floating point extensive applications (like Gaussian - quantum chemistry) shows the opposite for now, however, in theory the floating point part should be able to reach the same speed than on 32-bit when the compilers learn how to do it ;-)
Hmm, I would be interested in some example code showing such behaviour. Because on AMD64 (in 64bit mode) we have twice as many registers and use SSE2 by default. This means that in theory (and mostly in practice too) floating point on AMD64 should outperform anything on 32bit quite a bit. This has nothing to do with 64bit or not, but rather with the much better instruction set available in 64bit mode.
I was also surprised, since I expected the same. Gaussian uses the PGI fortran compiler and the code was linked with AMD's ACML. It is very likely a current handicap of the PGI compiler. Also a possible reason is that the cache can store more 32 bit integers than the default 64-bit ones when compiled with i8. Gaussian is not open source (see www.gausssian.com), so I am not allowed to give example code, the whole program is cca. 1M lines in Fortran. I could not find any SpecFP benchmark which was done on Opteron/Athlon64 in 64/bit mode and could outperform the same machine in 32-bit mode. However, I really hope this will happen...
One usual problem with loops (in C(++)) is the use of 'int' loop indices if they are used also as array indices because of the necessary sign extension. This can be helped by either using 'unsigned int' or 'long' indices.
Ciao, Michael.
Best wishes, Ödön