B ecause Digital’s Alpha architecture provides the world’s fastest proces- sors, many applications, especially those requiring high processor performance, have been ported to it. However, many other applications are available only under the x86 architecture. We designed Digital FX!32 to make the complete set of applications, both native and x86, available to Alpha. The goal for the software is to provide fast and trans- parent execution of x86 Win32 applications on Alpha systems. FX!32 achieves its goal by transparently running those applications at speeds comparable to high-performance x86 platforms. Digital FX!32 is a software utility that enables x86 Win32 applications to be run on Windows NT/Alpha platforms. Once FX!32 has been installed, almost all x86 appli- cations can be run on Alpha without special commands and with excellent performance. Before the introduction of this software, two common techniques for running an application on a different architecture than the one for which it was originally compiled were emulation and binary translation. Each technique has an advantage, but also a drawback. Emulation is transparent and robust, but delivers only modest perfor- mance. Binary translation 1 is fast, but not transparent. For the first time, Digital FX!32 combines these technologies to provide both fast and transparent execution. This software consists of three interoper- ating components. There is a runtime envi- ronment providing transparent execution, a binary translator (the background optimiz- er) providing high performance, and a serv- er coordinating them. Although FX!32 is transparent and does not require user inter- vention, it includes a graphical interface for monitoring status and managing system resources. The first time an x86 application runs, all of the application is emulated. Together with transparently running the application, the emulator generates an execution profile describing the application’s execution histo- ry. The profile shows which parts of the appli- cation are heavily used (for each user) and which parts are unimportant or rarely used. While the first run may be slow, it “primes the pump” for additional processing. Later, after the application exits, the profile data directs the background optimizer to generate native Alpha code to replace all the frequently exe- cuted procedures. The next time the applica- tion runs, native Alpha code is used and the application executes much faster. This process repeats whenever a sufficiently enlarged pro- file shows that it is warranted. Three significant innovations of Digital FX!32 include transparent operation, inter- face to native APIs, and, most importantly, profile-directed binary translation. Transparent operation When we say FX!32 is transparent, we mean two things: applications execute in the expected way (without any special com- mands), and interoperability with native applications works normally. Launching x86 applications. Transpar- ent launching of Win32 x86 applications comes from a dynamically linked library (DLL), the transparency agent. Launching an application on Windows NT always results in a call to the CreateProcess function. By intercepting calls to CreateProcess, the trans- parency agent can examine every image as it is about to be executed. If a call to Cre- ateProcess specifies an x86 image, the trans- parency agent instead invokes the FX!32 runtime to execute the image. Although spe- cial privileges are required to install FX!32, once installed, the transparency agent, and therefore the applications themselves, run without special privileges. Digital FX!32 inserts the transparency 56 IEEE M icro 0272-1732/98/$10.00 © 1998 IEEE A new innovation from Digital allows most x86 Windows applications to run on Alpha platforms with good performance. FX!32 A Profile-Directed Binary Translator Anton Chernoff M ark Herdeg Ray Hookway Chris Reeve Norman Rubin Tony Tye S. Bharadwaj Yadavalli Digital Equipment Corporation John Yates Chromatic Research .