- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The following code is supposed to print the same output when compiled for IA-32 and ran on IA-32 in comparison to the same code compiled for EM64T and ran on EM64T processor?
integer , parameter :: sp = selected_real_kind(p=6)
integer , parameter :: dp = selected_real_kind(p=15)
integer , parameter :: qt = selected_real_kind(p=18)
print*, sp, dp, qt
double precision is not supposed to be kind 4 (and not 8) on 64 bits machines running IFORT? I was thinking if this last question has something to do with the fact that quad precision (kind 16) operations still has a BIG performance impact on EM64T processors. Please help me to understand why quad is not double and double is not single with EM64T! TIA,
Bernhard.
integer , parameter :: sp = selected_real_kind(p=6)
integer , parameter :: dp = selected_real_kind(p=15)
integer , parameter :: qt = selected_real_kind(p=18)
print*, sp, dp, qt
double precision is not supposed to be kind 4 (and not 8) on 64 bits machines running IFORT? I was thinking if this last question has something to do with the fact that quad precision (kind 16) operations still has a BIG performance impact on EM64T processors. Please help me to understand why quad is not double and double is not single with EM64T! TIA,
Bernhard.
Link Copied
3 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The 64-bit aspect of EM64T has to do with the virtual address size and does not change the default sizes of reals and integers.
Yes, REAL(16) is slow on EM64T because it is software-emulated.
Yes, REAL(16) is slow on EM64T because it is software-emulated.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Steve_Lionel wrote:
The 64-bit aspect of EM64T has to do with the virtual address size and does not change the default sizes of reals and integers.
Yes, REAL(16) is slow on EM64T because it is software-emulated.
Why REAL(16) is software-emulated? Is this a registers' size (hardware) limitation? There is no 128-bit registers on EM64T processors? Thanks again,
Bernhard Enders.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
There are no REAL(16) instructions in the IA32/EM64T architecture. Not on Itanium either. Only single and double precision. That's the way it is in pretty much every currently used architecture. REAL(16) is supported by calls to software routines inserted by the compiler.
IBM has an odd implementation where they use two doubles with offset exponents. It's fast but it isn't a uniform type and doesn't give you extended range, so it's useless for a lot of what people use higher precision types for.
IBM has an odd implementation where they use two doubles with offset exponents. It's fast but it isn't a uniform type and doesn't give you extended range, so it's useless for a lot of what people use higher precision types for.

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