Porting on Intel® Extended Memory 64 Technology Platforms

by Matt Gillespie


Intel® Extended Memory 64 Technology (Intel® EM64T) provides a new execution environment that allows a server or workstation based on the latest generation of Intel® Xeon® processors to run both 64-bit and 32-bit applications under a 64-bit operating system. The platforms also continue to support 32-bit applications under 32-bit operating systems. This technology extends the 64-bit computing environment significantly, offering a substantial value proposition to Independent Software Vendors (ISVs) by setting the stage for a much larger install base of 64-bit computing environments.

In addition to relieving the 4GB limitation of memory that can be addressed by 32-bit applications, the new architecture provides eight new general-purpose registers and eight new SIMD registers. This increased register set can reduce register pressure by preventing register spill/fill onto the stack, which is especially relevant for synchronization or floating-point operations.

If you've already done the work to make an application 64-bit code-clean for execution on the Itanium® Processor family, either for Windows* or Linux*, getting it to run on Intel EM64T is a very low-cost effort, in some cases just a recompile. Naturally, there are exceptions and caveats that developers must keep in mind when porting applications to be compatible with Intel EM64T. This article explains some of those, and it also gives an overview of tools and other resources that are available to help you get started.

Differences in Porting to the Itanium® Processor Family versus Intel® EM64T

First, the good news: in many cases, the porting process to Intel EM64T is less rigorous than porting to Itanium®-based platforms, since the performance penalties for incomplete code-cleaning can be far less severe. For example, the Itanium processor handles misaligned data accesses by means of software traps that can cost thousands of cycles. The same code running under Intel EM64T, on the other hand, receives a hardware assist, after the fashion of legacy x86 architectures, which limits the penalty to the order of hundreds of cycles.

Some code, particularly if it uses hardware-specific coding styles such as assembly and intrinsics, can lead to problems when porting code from Itanium-based systems to platforms that support Intel EM64T, due to architecture differences. Many of the SIMD operations supported under SSE2 and SSE3 are not supported on the Itanium® Processor Family, and SIMD support in general does not map well from the Itanium Processor Family to the Intel EM64T environment. SIMD assembly/intrinsics can interfere with the portability of code between these two environments.

Because of this consideration, developers who target both environments may wish to uplevel such code in favor of other means of obtaining higher performance. One of the easiest ways to get maximum performance on these Intel processors is to use Intel® Software Development products such as Intel® Compilers and Intel® Performance Libraries. Another possibility, albeit a rather more complex one, is to use #define to create processor-specific code based on assembly/intrinsics.



About the Author

Matt Gillespie is an independent technical author and editor working out of the Chicago area and specializing in emerging hardware and software technologies. Before going into business for himself, Matt developed training for software developers at Intel Corporation and worked in Internet Technical Services at California Federal Bank. He spent his early years as a writer and editor in the fields of financial publishing and neuroscience.

For more complete information about compiler optimizations, see our Optimization Notice.

1 comment

anonymous's picture

Hi Matt! Great work!! But I still have i doubt about how much physical memory can a recent 64-bits processor manage. Can u help me to understand it?


Add a Comment

Have a technical question? Visit our forums. Have site or software product issues? Contact support.