USENIX Conference Policies
Optimizing Precision Overhead for x86 Processors
It is a major challenge for a Java JIT compiler to perform single-precision floating-point operations efficiently for the x86 processors. In previous research, the double-precision mode is set as the default precision mode when methods are invoked. This introduces redundant mode switches to preserve the default precision mode across method boundaries. Furthermore, the precision mode is switched only at the start and end points of a given method to reduce the overhead of rounding double-precision results to single-precision ones. Therefore, methods that include both single- and double-precision operations cannot switch the mode and have to suffer from the overhead of rounding using this convention, even if single-precision operations are dominant.
We propose a new approach to these problems. We eliminate redundant mode switches by ignoring the default precision mode and calling a method in the same precision mode as the caller. For methods that include both single- and double-precision methods, we reduce the overhead of rounding by isolating code segments of a given method that should be executed in the single-precision mode. We implemented our approach in IBM's production-quality Just-in-Time compiler, and obtained experimental results, showing that, in SPECjvm98, it consistently shows the best performance in any configuration of benchmark programs, inline policies, and processor architectures compared to previous research.
author = {Takeshi Ogasawara and Hideaki Komatsu and Toshio Nakatani},
title = {Optimizing Precision Overhead for x86 Processors},
booktitle = {2nd Java Virtual Machine Research and Technology Symposium (Java VM 02)},
year = {2002},
address = {San Francisco, CA},
url = {https://www.usenix.org/conference/java-vm-02/optimizing-precision-overhead-x86-processors},
publisher = {USENIX Association},
month = aug
}