- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I have an application that does heavy number crunching on REAL(64) arrays. I would like to speed it up by using EM64T extensions. The hype on EM64T emphasizes incrased address space (which I do not need) and mentions 64 bit registers,. However it is not clear whether genuine 64 bit instructions are available, or are finessed by slower library calls, as occurs now under IA-32. Does anyone know?
Link Copied
3 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
All SSE2 code uses 128-bit wide registers (64-bit for scalar code). 64-bit mode gives you 16 of them, compared with 8 in 32-bit mode. 64-bit compilers generally take advantage of that, where it helps. Both modes use the same floating point instruction set.
Scalar integer calculations are where 64-bit mode engages native 64-bit arithmetic. As you hint, 64-bit mode without 64-bit arithmetic would be slower.
I can't comment on your idea of "slower library calls" without more specifics. It isn't normally an issue. In some cases, avoiding function calls by compiler in-lining could show more advantage in 64-bit than in 32-bit mode, but I don't see that often myself.
Scalar integer calculations are where 64-bit mode engages native 64-bit arithmetic. As you hint, 64-bit mode without 64-bit arithmetic would be slower.
I can't comment on your idea of "slower library calls" without more specifics. It isn't normally an issue. In some cases, avoiding function calls by compiler in-lining could show more advantage in 64-bit than in 32-bit mode, but I don't see that often myself.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The registers that are wider for EM64T are the integer and address registers. Floating point registers, as Tim says, are the same in either 32 or 64-bit mode. Whether or not you'll see a speedup in 64-bit mode depends a lot on the application, but don't get your expectations up.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Your biggest bang for the buck will not come from simply switching to EMT64. I suggest you invest some time in learning how to adapt your application to use OpenMP. Put both those cores to work. If your app needs more than 2GB of RAM then EMT64 would be the route to take.
OpenMP is relatively easy to integrate into IVF applicatons. At least to the point where you see some benefit. I've done this for a 700+ module Fortran applicaiton on a 4 core system. Got 3.8x performance improvement.
Jim Dempsey.

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page