Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
29251 Discussions

The same real kind for EM64T & IA-32?

Intel_C_Intel
Employee
549 Views
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.
0 Kudos
3 Replies
Steven_L_Intel1
Employee
549 Views
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.
0 Kudos
Intel_C_Intel
Employee
549 Views


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.
0 Kudos
Steven_L_Intel1
Employee
549 Views
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.
0 Kudos
Reply