Demo Data from EDBT 2026 / reviewers in the wild / expert
Hideaki Komatsu
dblp:21/5284
· DBLP profile ↗
36ranked-venue papers
0as first author
0since 2021 · last 2013
—ORCID · none
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 23Systems, architecture and hardware · 19Graphics, computer vision, multimedia, augmented reality and games · 1
Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.
| Software engineering, system software, and programming languages
16 papers |
Compilers and program optimization · 63% Runtime systems and virtual machines · 28% Program analysis · 5% | |
| Computer architecture, parallel and distributed computing, and storage systems
7 papers |
Memory systems · 77% Processor architecture and microarchitecture · 18% Performance modeling and evaluation · 5% |
Topics — the 30 heaviest of 35, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Runtime systems and virtual machines › dynamic compilation
just-in-time compilation |
0.4 | 10 | 2013 | EDO: Exception-directed optimization in java · ACM Trans. Program. Lang. Syst. 2006 Replay compilation: improving debuggability of a just-in-time compiler · OOPSLA 2006 A new idiom recognition framework for exploiting hardware-assist instructions · ASPLOS 2006 |
Compilers and program optimization › compiler analysis
idiom recognition |
0.2 | 2 | 2013 | Idiom recognition framework using topological embedding · ACM Trans. Archit. Code Optim. 2013 A new idiom recognition framework for exploiting hardware-assist instructions · ASPLOS 2006 |
Compilers and program optimization › dynamic optimization
profile-guided optimization |
0.2 | 4 | 2006 | Profile-based global live-range splitting · PLDI 2006 Design and evaluation of dynamic optimizations for a Java just-in-time compiler · ACM Trans. Program. Lang. Syst. 2005 A Dynamic Optimization Framework for a Java Just-In-Time Compiler · OOPSLA 2001 |
Compilers and program optimization
dynamic optimization |
0.1 | 4 | 2006 | Design and evaluation of dynamic optimizations for a Java just-in-time compiler · ACM Trans. Program. Lang. Syst. 2005 A Dynamic Optimization Framework for a Java Just-In-Time Compiler · OOPSLA 2001 A Study of Exception Handling and Its Dynamic Optimization in Java · OOPSLA 2001 |
Compilers and program optimization › interprocedural optimization
inlining |
0.1 | 3 | 2005 | Design and evaluation of dynamic optimizations for a Java just-in-time compiler · ACM Trans. Program. Lang. Syst. 2005 Effectiveness of cross-platform optimizations for a java just-in-time compiler · OOPSLA 2003 A study of devirtualization techniques for a JavaTM Just-In-Time compiler · OOPSLA 2000 |
Compilers and program optimization
register allocation |
0.1 | 2 | 2006 | Profile-based global live-range splitting · PLDI 2006 Preference-Directed Graph Coloring · PLDI 2002 |
Memory systems › memory management
memory allocation |
0.1 | 1 | 2009 | A study of memory management for web-based applications on multicore processors · PLDI 2009 |
Memory systems
memory bandwidth |
0.1 | 1 | 2009 | A study of memory management for web-based applications on multicore processors · PLDI 2009 |
Memory systems
memory management |
0.1 | 1 | 2009 | A study of memory management for web-based applications on multicore processors · PLDI 2009 |
Compilers and program optimization › compiler optimization
exception handling optimization |
0.1 | 2 | 2006 | EDO: Exception-directed optimization in java · ACM Trans. Program. Lang. Syst. 2006 A Study of Exception Handling and Its Dynamic Optimization in Java · OOPSLA 2001 |
Runtime systems and virtual machines › virtual machine implementation
java virtual machine |
0.1 | 3 | 2005 | Design and evaluation of dynamic optimizations for a Java just-in-time compiler · ACM Trans. Program. Lang. Syst. 2005 A Dynamic Optimization Framework for a Java Just-In-Time Compiler · OOPSLA 2001 A study of devirtualization techniques for a JavaTM Just-In-Time compiler · OOPSLA 2000 |
Debugging and program repair › software debugging
compiler debugging |
0.1 | 1 | 2006 | Replay compilation: improving debuggability of a just-in-time compiler · OOPSLA 2006 |
Compilers and program optimization › register allocation
live-range splitting |
0.1 | 1 | 2006 | Profile-based global live-range splitting · PLDI 2006 |
Compilers and program optimization › dynamic optimization
adaptive compilation |
0.1 | 1 | 2005 | Design and evaluation of dynamic optimizations for a Java just-in-time compiler · ACM Trans. Program. Lang. Syst. 2005 |
Compilers and program optimization
program specialization |
0.1 | 1 | 2005 | Design and evaluation of dynamic optimizations for a Java just-in-time compiler · ACM Trans. Program. Lang. Syst. 2005 |
Program analysis
data flow analysis |
0.0 | 1 | 2003 | Effectiveness of cross-platform optimizations for a java just-in-time compiler · OOPSLA 2003 |
Memory systems
cache |
0.0 | 1 | 2003 | Stride prefetching by dynamically inspecting objects · PLDI 2003 |
Memory systems › cache
prefetching |
0.0 | 1 | 2003 | Stride prefetching by dynamically inspecting objects · PLDI 2003 |
Memory systems › cache › prefetching
stride prefetching |
0.0 | 1 | 2003 | Stride prefetching by dynamically inspecting objects · PLDI 2003 |
Compilers and program optimization › register allocation
graph coloring register allocation |
0.0 | 1 | 2002 | Preference-Directed Graph Coloring · PLDI 2002 |
Runtime systems and virtual machines › interpreter
interpreter optimization |
0.0 | 1 | 2002 | Bytecode fetch optimization for a Java interpreter · ASPLOS 2002 |
Runtime systems and virtual machines › interpreter
interpreter performance |
0.0 | 1 | 2002 | Bytecode fetch optimization for a Java interpreter · ASPLOS 2002 |
Compilers and program optimization › register allocation
register coalescing |
0.0 | 1 | 2002 | Preference-Directed Graph Coloring · PLDI 2002 |
Programming languages and type systems › control structures
exception handling |
0.0 | 1 | 2001 | A Study of Exception Handling and Its Dynamic Optimization in Java · OOPSLA 2001 |
Program analysis › dynamic analysis › profiling
value profiling |
0.0 | 1 | 2001 | A Dynamic Optimization Framework for a Java Just-In-Time Compiler · OOPSLA 2001 |
Processor architecture and microarchitecture
instruction set architecture |
0.0 | 2 | 2006 | A new idiom recognition framework for exploiting hardware-assist instructions · ASPLOS 2006 Effective Sign Extension Elimination · PLDI 2002 |
Program analysis › dynamic analysis
profiling |
0.0 | 2 | 2005 | Design and evaluation of dynamic optimizations for a Java just-in-time compiler · ACM Trans. Program. Lang. Syst. 2005 Stride prefetching by dynamically inspecting objects · PLDI 2003 |
Processor architecture and microarchitecture
chip multiprocessor |
0.0 | 1 | 2009 | A study of memory management for web-based applications on multicore processors · PLDI 2009 |
Performance modeling and evaluation › workload characterization › commercial workloads
web server workload |
0.0 | 1 | 2009 | A study of memory management for web-based applications on multicore processors · PLDI 2009 |
Compilers and program optimization › compiler optimization › type-based optimization
devirtualization |
0.0 | 1 | 2000 | A study of devirtualization techniques for a JavaTM Just-In-Time compiler · OOPSLA 2000 |
Methods — techniques the papers use, named apart from their topics
topological embedding · 0.3exact pattern matching · 0.2idiom recognition · 0.1region-based allocation · 0.1performance measurement · 0.1instrumentation · 0.1throw elimination · 0.1state saving · 0.1replay compilation · 0.1exception path profiling · 0.1exception path inlining · 0.1on-stack replacement · 0.1partial interpretation · 0.0object inspection · 0.0top-of-stack caching · 0.0speculative decoding · 0.0handler customization · 0.0hardware trap · 0.0
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2013 | Idiom recognition framework using topological embeddingabstractModern processors support hardware-assist instructions (such as TRT and TROT instructions on the IBM System z) to accelerate certain functions such as delimiter search and character conversion. Such special instructions are often used in high-performance libraries, but their exploitation in optimizing compilers has been limited. We devised a new idiom recognition technique based on a topological embedding algorithm to detect idiom patterns in the input programs more aggressively than in previous approaches using exact pattern matching. Our approach can detect a pattern even if the code segment does not exactly match the idiom. For example, we can detect a code segment that includes additional code within the idiom pattern. We also propose an instruction simplification for the idiom recognition. This optimization analyzes all of the usages of the output of the optimized code for a specific idiom. If we find that we do not need an actual value for the output but only a value in a subrange, then we can assign a value in that subrange as the output. The code generation can generate faster code with this optimization. We implemented our new idiom recognition approach based on the Java Just-In-Time (JIT) compiler that is part of the J9 Java Virtual Machine, and we supported several important idioms for the special hardware-assist instructions on the IBM System z and on some models of the IBM System p. To demonstrate the effectiveness of our technique, we performed two experiments. The first experiment was to see how many more patterns we can detect compared to the previous approach. The second experiment measured the performance improvements over the previous approaches. For the first experiment, we used the Java Compatibility Kit (JCK) API tests. For the second experiment we used the IBM XML parser, SPECjvm98, and SPCjbb2000. In summary, relative to a baseline implementation using exact pattern matching, our algorithm converted 76% more loops in JCK tests. On a z9, we also observed significant average performance improvement of the XML parser by 54%, of SPECjvm98 by 1.9%, and of SPECjbb2000 by 4.4%. Finally, we observed that the JIT compilation time increased by only 0.32% to 0.44%. Motohiro Kawahito, Hideaki Komatsu, Takao Moriyama, Hiroshi Inoue, Toshio Nakatani |
ACM Trans. Archit. Code Optim. | 2 |
| 2012 | Automatic Resource Scheduling with Latency Hiding for Parallel Stencil Applications on GPGPU ClustersabstractOverlapping computations and communication is a key to accelerating stencil applications on parallel computers, especially for GPU clusters. However, such programming is a time-consuming part of the stencil application development. To address this problem, we developed an automatic code generation tool to produce a parallel stencil application with latency hiding automatically from its dataflow model. With this tool, users visually construct the workflows of stencil applications in a dataflow programming model. Our dataflow compiler determines a data decomposition policy for each application, and generates source code that overlaps the stencil computations and communication (MPI and PCIe). We demonstrate two types of overlapping models, a CPU-GPU hybrid execution model and a GPU-only model. We use a CFD benchmark computing 19-point 3D stencils to evaluate our scheduling performance, which results in 1.45 TFLOPS in single precision on a cluster with 64 Tesla C1060 GPUs. Kumiko Maeda, Masana Murase, Munehiro Doi, Hideaki Komatsu, Shigeho Noda, Ryutaro Himeno |
IPDPS | 4 |
| 2012 | A high-performance sorting algorithm for multicore single-instruction multiple-data processorsabstractSUMMARY Many sorting algorithms have been studied in the past, but there are only a few algorithms that can effectively exploit both single‐instruction multiple‐data (SIMD) instructions and thread‐level parallelism. In this paper, we propose a new high‐performance sorting algorithm, called aligned‐access sort (AA‐sort), that exploits both the SIMD instructions and thread‐level parallelism available on today's multicore processors. Our algorithm consists of two phases, an in‐core sorting phase and an out‐of‐core merging phase. The in‐core sorting phase uses our new sorting algorithm that extends combsort to exploit SIMD instructions. The out‐of‐core algorithm is based on mergesort with our novel vectorized merging algorithm. Both phases can take advantage of SIMD instructions. The key to high performance is eliminating unaligned memory accesses that would reduce the effectiveness of SIMD instructions in both phases. We implemented and evaluated the AA‐sort on PowerPC 970MP and Cell Broadband Engine platforms. In summary, a sequential version of the AA‐sort using SIMD instructions outperformed IBM's optimized sequential sorting library by 1.8 times and bitonic mergesort using SIMD instructions by 3.3 times on PowerPC 970MP when sorting 32 million random 32‐bit integers. Also, a parallel version of AA‐sort demonstrated better scalability with increasing numbers of cores than a parallel version of bitonic mergesort on both platforms. Copyright © 2011 John Wiley & Sons, Ltd. Hiroshi Inoue, Takao Moriyama, Hideaki Komatsu, Toshio Nakatani |
Softw. Pract. Exp. | 3 |
| 2011 | Distributed and fault-tolerant execution framework for transaction processingabstractThere is a growing need for efficient distributed computing for transaction processing. One of the key requirements for runtime systems in distributed environments is fault tolerance. Such a system needs to preserve the data consistency at transaction boundaries so as to resume the ongoing tasks from checkpoints with consistent data for any component failure. Another key requirement is that the system needs to be lightweight enough in normal execution to provide scalable performance. This paper presents the design and implementation of a new fault tolerant execution framework that addresses both of these requirements. We replicate each partition of the distributed persistent data on three nodes (triplet) with two different types of backups, one using warm replication and the other using cold replication. For node failures, the system is automatically recoverable unless all three nodes in any triplet fail at the same time. The system tolerates simultaneous two-node failures in any triplet most of the cases. We obtained a new trade-off in that 43% performance improvements can be achieved by slightly compromising the system availability. Toshio Suganuma, Akira Koseki, Kazuaki Ishizaki, Yohei Ueda, Ken Mizuno, Daniel Silva 0001, Hideaki Komatsu, Toshio Nakatani |
SYSTOR | 7 |
| 2010 | Automatic parallelization of simulink applicationsabstractThe parallelization of Simulink applications is currently a responsibility of the system designer and the superscalar execution of the processors. State-of-the-art Simulink compilers excel at producing reliable and production-quality embedded code, but fail to exploit the natural concurrency available in the programs and to effectively use modern multi-core architectures. The reason may be that many Simulink applications are replete with loop-carried dependencies that inhibit most parallel computing techniques and compiler transformations. Arquimedes Canedo, Takeo Yoshizawa, Hideaki Komatsu |
CGO | 3 |
| 2010 | Coloring-based coalescing for graph coloring register allocationabstractGraph coloring register allocation tries to minimize the total cost of spilled live ranges of variables. Live-range splitting and coalescing are often performed before the coloring to further reduce the total cost. Coalescing of split live ranges, called sub-ranges, can decrease the total cost by lowering the interference degrees of their common interference neighbors. However, it can also increase the total cost because the coalesced sub-ranges can become uncolorable. In this paper, we propose coloring-based coalescing, which first performs trial coloring and next coalesces all copyrelated sub-ranges that were assigned the same color. The coalesced graph is then colored again with the graph coloring register allocation. The rationale is that coalescing of differently colored sub-ranges could result in spilling because there are some interference neighbors that prevent them from being assigned the same color. Experiments on Java programs show that the combination of live-range splitting and coloring-based coalescing reduces the static spill cost by more than 6% on average, comparing to the baseline coloring without splitting. In contrast, well-known iterated and optimistic coalescing algorithms, when combined with splitting, increase the cost by more than 20%. Coloring-based coalescing improves the execution time by up to 15% and 3% on average, while the existing algorithms improve by up to 12% and 1% on average. Rei Odaira, Takuya Nakaike, Tatsushi Inagaki, Hideaki Komatsu, Toshio Nakatani |
CGO | 4 |
| 2010 | Skewed pipelining for parallel simulink simulationsabstractModern automotive and aerospace embedded applications require very high-performance simulations that are able to produce new values every microsecond. Simulations must now rely on scalable performance of multi-core systems rather than faster clock frequencies. Novel parallelization techniques are needed to satisfy the industrial simulation demands that are essential for the development of safety-critical systems. Simulink formalism is the industrial de facto standard, but current state-of-the-art simulation and code generation techniques fail to fully exploit the parallelism in modern multi-core systems. However, closed-loop and dynamic system simulations are very difficult to parallelize because of the loop-carried dependencies. In this paper we introduce a novel skewed pipelining technique that overcomes these difficulties and allows loop-carried Simulink applications to be executed concurrently in multi-core systems. By delaying the forwarding of values for a few iterations, we can break some data dependencies and coarsen the granularity of programs. This improves the concurrency and reduces the high cost of inter-processor communication. Implementation studies to demonstrate the viability of our method on a commodity multi-core system with 2, 3, and 4 processors show a 1.72, 2.38, and 3.33 fold speedup over uniprocessor execution. Arquimedes Canedo, Takeo Yoshizawa, Hideaki Komatsu |
DATE | 3 |
| 2010 | Parallel programming framework for large batch transaction processing on scale-out systemsabstractA scale-out system is a cluster of commodity machines, and offers a good platform to support steadily increasing workloads that process growing data sets. Sharding [4] is a method of partitioning data and processing a computation on a scale-out system. In a database system, a large table can be partitioned into small tables so each node can process its part of the computation. The sharding approach in a large batch transaction processing, which is important in financial area, presents two hard problems to programmers. Programmers have to write complex code (1) to transfer the input data so as to align the computations with the data partitions, and (2) to manage the distributed transactions. This paper presents a new parallel programming framework that makes parallel transactional programming easier by specifying transaction scopes and partitioners to simplify the code. Transaction scopes include series of subtransactions, each of which performs local operations. The system manages the distributed transactions automatically. A partitioner represents how the computation should be decomposed and aligned with the data partitions to avoid remote database accesses. Between paired of subtransactions, the system handles the data shuffling across the network. We implemented our parallel programming framework as a new Java class library. We hide all of the complex details of data transfer and distributed transaction management in the library. Our programming framework can eliminate almost 66% of the lines of code compared to a current programming approach without programming framework support. We also confirmed good scalability, with a scaling factor of 20.6 on 24 nodes using our modified batch program for the TPC-C benchmark. Kazuaki Ishizaki, Ken Mizuno, Toshio Suganuma, Daniel Silva 0001, Akira Koseki, Hideaki Komatsu, Yohei Ueda, Toshio Nakatani |
SYSTOR | 6 |
| 2010 | Dynamic binary translation specialized for embedded systemsabstractThis paper describes the design and implementation of a novel dynamic binary translation technique specialized for embedded systems. Virtual platforms have been widely used to develop embedded software and dynamic binary translation is essential to boost their speed in simulations. However, unlike application simulation, the code generated for systems simulation is still slow because the simulator must replicate all of the functions of the target hardware. Embedded systems, which focus on providing one or a few functions, utilize only a small portion of the processor's features most of the time. For example, they may use a Memory Management Unit (MMU) in a processor to map physical memory to effective addresses, but they may not need paged memory support as in an OS. We can exploit this to specialize the dynamically translated code for more performance. Goh Kondoh, Hideaki Komatsu |
VEE | 2 |
| 2009 | A study of memory management for web-based applications on multicore processorsabstractMore and more server workloads are becoming Web-based. In these Web-based workloads, most of the memory objects are used only during one transaction. We study the effect of the memory management approaches on the performance of such Web-based applications on two modern multicore processors. In particular, using six PHP applications, we compare a general-purpose allocator (the default allocator of the PHP runtime) and a region-based allocator, which can reduce the cost of memory management by not supporting per-object free. The region-based allocator achieves better performance for all workloads on one processor core due to its smaller memory management cost. However, when using eight cores, the region-based allocator suffers from hidden costs of increased bus traffics and the performance is reduced for many workloads by as much as 27.2% compared to the default allocator. This is because the memory bandwidth tends to become a bottleneck in systems with multicore processors. Hiroshi Inoue, Hideaki Komatsu, Toshio Nakatani |
PLDI | 2 |
| 2007 | AA-Sort: A New Parallel Sorting Algorithm for Multi-Core SIMD Processors
Hiroshi Inoue, Takao Moriyama, Hideaki Komatsu, Toshio Nakatani |
PACT | 3 |
| 2007 | Accelerating Mutual-Information-Based Linear Registration on the Cell Broadband Engine ProcessorabstractEmerging multi-core processors are able to accelerate medical imaging applications by exploiting the parallelism available in their algorithms. We have implemented a mutual-information-based 3D linear registration algorithm on the Cell Broadband Enginetrade processor. By exploiting the highly parallel architecture and its high memory bandwidth, our implementation with two CBE processors can register a pair of 256x256x30 3D images in one second. This implementation is significantly faster than a conventional one on a traditional microprocessor or even faster than a previously reported custom-hardware implementation. In addition to parallelizing the code for multiple cores and organizing the data structure for reducing the amount of the memory traffic, it is also critical to optimize the code for the SIMD pipeline structure. We note that code optimization for the SIMD pipeline alone results in a 4.2x-8.7x acceleration for the computation of small kernels. Further, SIMD optimization alone results in a 4.5x end-end application speedup. Moriyoshi Ohara, Hangu Yeo, Frank Savino, Giridharan Iyengar, Leiguang Gong, Hiroshi Inoue, Hideaki Komatsu, Vadim Sheinin, Shahrokh Daijavad |
ICME | 7 |
| 2007 | Cloneable JVM: a new approach to start isolated java applications fasterabstractJava has been successful particularly for writing applications in the server environment. However, isolation of multiple applications hasnot been efficiently achieved in Java. Many customers require that their applications are guarded by independent OS processes, but starting a Java application with a new process results in a long sequence of initializations being repeated each time. To date, there has been no way to quickly start a new Java application as an isolated OS process. In this paper, we propose a new isolation approach called Cloneable JVM to eliminate this startup overhead in Java. The key idea is to createa new Java application by copying, or cloning, the already-initialized image of the primary JVM process. Since the clone is already initialized, it can begin actual operations immediately as a new isolated process. This cloning abstraction can support new scenarios for Java, such as user isolation and transaction isolation. We implemented a prototype of the Cloneable JVM by modifying a production JVM on Linux, which provides a new API for cloning constructed on the Isolate API defined in JSR 121. Using this cloning API, several Java applications, including a large production J2EE application server, we remodified to demonstrate the isolation scenarios. Evaluations using these prototypes showed that new ready-to-serve Java applications can start up as a new process in less than 5 seconds, which is 4 to 170 times faster than starting these applications from scratch. Kiyokuni Kawachiya, Kazunori Ogata, Daniel Silva 0001, Tamiya Onodera, Hideaki Komatsu, Toshio Nakatani |
VEE | 5 |
| 2006 | A new idiom recognition framework for exploiting hardware-assist instructionsabstractModern processors support hardware-assist instructions (such as TRT and TROT instructions on IBM zSeries) to accelerate certain functions such as delimiter search and character conversion. Such special instructions have often been used in high performance libraries, but they have not been exploited well in optimizing compilers except for some limited cases. We propose a new idiom recognition technique derived from a topological embedding algorithm [4] to detect idiom patterns in the input program more aggressively than in previous approaches. Our approach can detect a pattern even if the code segment does not exactly match the idiom. For example, we can detect a code segment that includes additional code within the idiom pattern. We implemented our new idiom recognition approach based on the Java Just-In-Time (JIT) compiler that is part of the J9 Java Virtual Machine, and we supported several important idioms for special hardware-assist instructions on the IBM zSeries and on some models of the IBM pSeries. To demonstrate the effectiveness of our technique, we performed two experiments. The first one is to see how many more patterns we can detect compared to the previous approach. The second one is to see how much performance improvement we can achieve over the previous approach. For the first experiment, we used the Java Compatibility Kit (JCK) API tests. For the second one we used IBM XML parser, SPECjvm98, and SPCjbb2000. In summary, relative to a baseline implementation using exact pattern matching, our algorithm converted 75% more loops in JCK tests. We also observed significant performance improvement of the XML parser by 64%, of SPECjvm98 by 1%, and of SPECjbb2000 by 2% on average on a z990. Finally, we observed the JIT compilation time increases by only 0.32% to 0.44%. Motohiro Kawahito, Hideaki Komatsu, Takao Moriyama, Hiroshi Inoue, Toshio Nakatani |
ASPLOS | 2 |
| 2006 | Replay compilation: improving debuggability of a just-in-time compilerabstractThe performance of Java has been tremendously improved by the advance of Just-in-Time (JIT) compilation technologies. However, debugging such a dynamic compiler is much harder than a static compiler. Recompiling the problematic method to produce a diagnostic output does not necessarily work as expected, because the compilation of a method depends on runtime information at the time of compilation.In this paper, we propose a new approach, called replay JIT compilation, which can reproduce the same compilation remotely by using two compilers, the state-saving compiler and the replaying compiler. The state-saving compiler is used in a normal run, and, while compiling a method, records into a log all of the input for the compiler. The replaying compiler is then used in a debugging run with the system dump, to recompile a method with the options for diagnostic output. We reduced the overhead to save the input by using the system dump and by categorizing the input based on how its value changes. In our experiment, the increase of the compilation time for saving the input was only 1%, and the size of the additional memory needed for saving the input was only 10% of the compiler-generated code. Kazunori Ogata, Tamiya Onodera, Kiyokuni Kawachiya, Hideaki Komatsu, Toshio Nakatani |
OOPSLA | 4 |
| 2006 | Profile-based global live-range splittingabstractLive-range splitting is a technique to split the live range of a given variable into multiple subranges, each of which can be assigned to a different register or spilled out to memory in order to improve results of coloring register allocation. Previous techniques, such as aggressive live-range splitting, tend to produce extra spill code in the frequently executed (called hot) regions of the code, since they don't distinguish hot regions from others. We propose a new live-range splitting algorithm, which can reduce the amount of spill code in hot regions by coalescing the live ranges based on profile information after splitting the live ranges at every join and fork point in the control-flow graph. Our experimental results have shown that our new algorithm improved the performance of SPECjvm98 by up to 33% over aggressive live-range splitting and 7% over the base coloring algorithm without any live-range splitting. Takuya Nakaike, Tatsushi Inagaki, Hideaki Komatsu, Toshio Nakatani |
PLDI | 3 |
| 2006 | Effective sign extension elimination for javaabstractComputer designs are shifting from 32-bit architectures to 64-bit architectures, while most of the programs available today are still designed for 32-bit architectures. Java, for example, specifies the frequently used “int” as a 32-bit signed integer. If such Java programs are executed on a 64-bit architecture, many 32-bit signed integers must be sign-extended to 64-bit signed integers for correct operations. This causes serious performance overhead. In this article, we present a fast and effective algorithm for eliminating sign extensions. We implemented this algorithm in the IBM Java Just-in-Time (JIT) compiler for IA-64. Our experimental results show that our algorithm effectively eliminates the majority of sign extensions. They also show that it improves performance by 6.9% for jBYTEmark and 3.3% for SPECjvm98 over the previously known best algorithm, while it increases JIT compilation time by only 0.11%. Motohiro Kawahito, Hideaki Komatsu, Toshio Nakatani |
ACM Trans. Program. Lang. Syst. | 2 |
| 2006 | EDO: Exception-directed optimization in javaabstractOptimizing exception handling is critical for programs that frequently throw exceptions. We observed that there are many such exception-intensive programs written in Java. There are two commonly used exception handling techniques, stack unwinding and stack cutting. Stack unwinding optimizes the normal path by leaving the exception handling path unoptimized, while stack cutting optimizes the exception handling path by adding extra work to the normal path. However, there has been no single exception handling technique to optimize the exception handling path without incurring any overhead to the normal path.We propose a new technique calledException-Directed Optimization(EDO) that optimizes exception-intensive programs without slowing down exception-minimal programs. It is a feedback-directed dynamic optimization consisting of three steps: exception path profiling, exception path inlining, and throw elimination. Exception path profiling attempts to detecthotexception paths. Exception path inlining embeds every hot exception path into the corresponding catching method. Throw elimination replaces a throw with a branch to the corresponding handler. We implemented EDO in IBM's production Just-in-Time compiler and made several experiments. In summary, it improved the performance of exception-intensive programs by up to 18.3% without decreasing the performance of exception-minimal programs for SPECjvm98. We also found an opportunity for performance improvement using EDO in the startup of a Java application server. Takeshi Ogasawara, Hideaki Komatsu, Toshio Nakatani |
ACM Trans. Program. Lang. Syst. | 2 |
| 2005 | Design and evaluation of dynamic optimizations for a Java just-in-time compilerabstractThe high performance implementation of Java Virtual Machines (JVM) and Just-In-Time (JIT) compilers is directed toward employing a dynamic compilation system on the basis of online runtime profile information. The trade-off between the compilation overhead and performance benefit is a crucial issue for such a system. This article describes the design and implementation of a dynamic optimization framework in a production-level Java JIT compiler, together with two techniques for profile-directed optimizations: method inlining and code specialization. Our approach is to employ a mixed mode interpreter and a three-level optimizing compiler, supporting level-1 to level-3 optimizations, each of which has a different set of trade-offs between compilation overhead and execution speed. A lightweight sampling profiler operates continuously during the entire period while applications are running to monitor the programs' hot spots. Detailed information on runtime behavior can be collected by dynamically generating instrumentation code that is installed to and uninstalled from the specified recompilation target code. Value profiling with this instrumentation mechanism allows fully automatic profile-directed method inlining and code specialization to be performed on the basis of call site information or specific parameter values at the higher optimization levels. The experimental results show that our approach offers high performance and low compilation overhead in both program startup and steady state measurements in comparison to the previous systems. The two profile-directed optimization techniques contribute significant portions of the improvements. Toshio Suganuma, Toshiaki Yasue, Motohiro Kawahito, Hideaki Komatsu, Toshio Nakatani |
ACM Trans. Program. Lang. Syst. | 4 |
| 2004 | Partial redundancy elimination for access expressions by speculative code motionabstractAbstract We present a new memory access optimization for Java to perform aggressive code motion for speculatively optimizing memory accesses by applying partial redundancy elimination (PRE) techniques. First, to reduce as many barriers as possible and to enhance code motion, we perform alias analysis to identify all the regions in which each object reference is not aliased. Secondly, we find all the possible barriers. Finally, we perform code motions in three steps. For the first step, we apply a non‐speculative PRE algorithm to move load instructions and their following instructions in the backwards direction of the control flow graph. For the second step, we apply a speculative PRE algorithm to move some of them aggressively before the conditional branches. For the third step, we apply our modified version of a non‐speculative PRE algorithm to move store instructions in the forward direction of the control flow graph and to even move some of them after the merge points. We implemented our new algorithm in our production‐level Java just‐in‐time compiler. Our experimental results show that our speculative algorithm improves the average (maximum) performance by 13.1% (90.7%) for jBYTEmark and 1.4% (4.4%) for SPECjvm98 over the fastest algorithm previously described, while it increases the average (maximum) compilation time by 0.9% (2.9%) for both benchmark suites. Copyright © 2004 John Wiley & Sons, Ltd. Motohiro Kawahito, Hideaki Komatsu, Toshio Nakatani |
Softw. Pract. Exp. | 2 |
| 2004 | Optimizing precision overhead for x86 processorsabstractAbstract 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. Sophisticated approaches then use heuristic approaches to optimization by considering the trade‐offs between roundings and mode switches. However, this convention introduces redundant mode switches across method boundaries. Furthermore, methods that include both single‐ and double‐precision operations cannot switch the mode, 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 Just‐in‐Time compiler, and obtained experimental results demonstrating that, in SPECjvm98, it consistently shows the best performance in any configuration of benchmark programs, inline policies, and processor architectures compared with previous research approaches. Copyright © 2004 John Wiley & Sons, Ltd. Takeshi Ogasawara, Hideaki Komatsu, Toshio Nakatani |
Softw. Pract. Exp. | 2 |
| 2003 | Integrated Prepass Scheduling for a Java Just-In-Time Compiler on the IA-64 ArchitectureabstractWe present a new integrated prepass scheduling (IPS) algorithm for a Java just-in-time (JIT) compiler which integrates register minimization into list scheduling. We use backtracking in the list scheduling when we have used up all the available registers. To reduce the overhead of backtracking, we incrementally maintain a set of candidate instructions for undoing scheduling. To maximize the ILP after undoing scheduling, we select an instruction chain with the smallest increase in the total execution time. We implemented our new algorithm in a production-level Java JIT compiler for the Intel Itanium processor. The experiment showed that, compared to the best known algorithm by Govindarajan et al., our IPS algorithm improved the performance by up to +1.8% while it reduced the compilation time for IPS by 58% on average. Tatsushi Inagaki, Hideaki Komatsu, Toshio Nakatani |
CGO | 2 |
| 2003 | A new speculation technique to optimize floating-point performance while preserving bit-by-bit reproducibilityabstractThe bit-by-bit reproducibility of floating-point results, which is defined by the IEEE 754 standard, prohibits optimizations such as reassociation and the use of native operations such as fused multiply-add (FMA), and thus it significantly impairs floating-point performance. Recent network-oriented languages such as Java strictly conform to the standard, and thus their numerical computing performance becomes inherently lower than conventional languages.In this paper, we propose a new software technique, called floating-point (FP) speculation, to optimize floating-point performance while preserving the bit-by-bit reproducibility of the results. We execute the fast unsafe code and the slow verification code in parallel. The unsafe code does not wait for the verification code, and is immediately followed by the subsequent code that uses the probable result from the unsafe code assuming the speculation will succeed. The improvement from FP speculation results from this earlier start of the subsequent code.Unlike other speculation techniques, FP speculation does not require any special instructions or hardware support. Rather, it exploits unused floating-point registers and execution units. Therefore it is generally applicable for processor architectures that have sufficient floating-point resources. Mikio Takeuchi, Hideaki Komatsu, Toshio Nakatani |
ICS | 2 |
| 2003 | Effectiveness of cross-platform optimizations for a java just-in-time compilerabstractThis paper describes the system overview of our Java Just-In-Time (JIT) compiler, which is the basis for the latest production version of IBM Java JIT compiler that supports a diversity of processor architectures including both 32-bit and 64-bit modes, CISC, RISC, and VLIW architectures. In particular, we focus on the design and evaluation of the cross-platform optimizations that are common across different architectures. We studied the effectiveness of each optimization by selectively disabling it in our JIT compiler on three different platforms: IA-32, IA-64, and PowerPC. Our detailed measurements allowed us to rank the optimizations in terms of the greatest performance improvements with the smallest compilation times. The identified set includes method inlining only for tiny methods, exception check eliminations using forward dataflow analysis and partial redundancy elimination, scalar replacement for instance and class fields using dataflow analysis, optimizations for type inclusion checks, and the elimination of merge points in the control flow graphs. These optimizations can achieve 90% of the peak performance for two industry-standard benchmark programs on these platforms with only 34% of the compilation time compared to the case for using all of the optimizations. Kazuaki Ishizaki, Mikio Takeuchi, Kiyokuni Kawachiya, Toshio Suganuma, Osamu Gohda, Tatsushi Inagaki, Akira Koseki, Kazunori Ogata, Motohiro Kawahito, Toshiaki Yasue, Takeshi Ogasawara, Tamiya Onodera, Hideaki Komatsu, Toshio Nakatani |
OOPSLA | 13 |
| 2003 | Stride prefetching by dynamically inspecting objectsabstractSoftware prefetching is a promising technique to hide cache miss latencies, but it remains challenging to effectively prefetch pointer-based data structures because obtaining the memory address to be prefetched requires pointer dereferences. The recently proposed stride prefetching overcomes this problem, but it only exploits inter-iteration stride patterns and relies on an off-line profiling method.We propose a new algorithm for stride prefetching which is intended for use in a dynamic compiler. We exploit both inter- and intra-iteration stride patterns, which we discover using an ultra-lightweight profiling technique, called object inspection. This is a kind of partial interpretation that only a dynamic compiler can perform. During the compilation of a method, the dynamic compiler gathers the profile information by partially interpreting the method using the actual values of parameters and causing no side effects.We evaluated an implementation of our prefetching algorithm in a production-level Java just-in time compiler. The results show that the algorithm achieved up to an 18.9% and 25.1% speedup in industry-standard benchmarks on the Pentium 4 and the Athlon MP, respectively, while it increased the compilation time by less than 3.0%. Tatsushi Inagaki, Tamiya Onodera, Hideaki Komatsu, Toshio Nakatani |
PLDI | 3 |
| 2002 | Bytecode fetch optimization for a Java interpreterabstractInterpreters play an important role in many languages, and their performance is critical particularly for the popular language Java. The performance of the interpreter is important even for high-performance virtual machines that employ just-in-time compiler technology, because there are advantages in delaying the start of compilation and in reducing the number of the target methods to be compiled. Many techniques have been proposed to improve the performance of various interpreters, but none of them has fully addressed the issues of minimizing redundant memory accesses and the overhead of indirect branches inherent to interpreters running on superscalar processors. These issues are especially serious for Java because each bytecode is typically one or a few bytes long and the execution routine for each bytecode is also short due to the low-level, stack-based semantics of Java bytecode. In this paper, we describe three novel techniques of our Java bytecode interpreter, write-through top-of-stack caching (WT), position-based handler customization (PHC), and position-based speculative decoding (PSD), which ameliorate these problems for the PowerPC processors. We show how each technique contributes to improving the overall performance of the interpreter for major Java benchmark programs on an IBM POWER3 processor. Among three, PHC is the most effective one. We also show that the main source of memory accesses is due to bytecode fetches and that PHC successfully eliminates the majority of them, while it keeps the instruction cache miss ratios small. Kazunori Ogata, Hideaki Komatsu, Toshio Nakatani |
ASPLOS | 2 |
| 2002 | Effective Sign Extension EliminationabstractComputer designs are shifting from 32-bit architectures to 64-bit architectures, while most of the programs available today are still designed for 32-bit architectures. Java™, for example, specifies the frequently used int" as a 32-bit data type. If such Java programs are executed on a 64-bit architecture, many 32-bit values must be sign-extended to 64-bit values for integer operations. This causes serious performance overhead. In this paper, we present a fast and effective algorithm for eliminating sign extensions. We implemented this algorithm in the IBM Java Just-in-Time (JIT) compiler for IA-64™. Our experimental results show that our algorithm effectively eliminates the majority of sign extensions. They also show that it significantly improves performance, while it increases JIT compilation time by only 0.11%. We implemented our algorithm for programs in Java, but it can be applied to any language requiring sign extensions. Motohiro Kawahito, Hideaki Komatsu, Toshio Nakatani |
PLDI | 2 |
| 2002 | Preference-Directed Graph ColoringabstractThis paper describes a new framework of register allocation based on Chaitin-style coloring. Our focus is on maximizing the chances for live ranges to be allocated to the most preferred registers while not destroying the colorability obtained by graph simplification. Our coloring algorithm uses a graph representation of preferences called a Register Preference Graph, which helps find a good register selection. We then try to relax the register selection order created by the graph simplification. The relaxed order is defined as a partial order, represented using a graph called a Coloring Precedence Graph. Our algorithm utilizes such a partial order for the register selection instead of using the traditional simplification-driven order so that the chances of honoring the preferences are effectively increased. Experimental results show that our coloring algorithm is powerful to simultaneously handle spill decisions, register coalescing, and preference resolutions. Akira Koseki, Hideaki Komatsu, Toshio Nakatani |
PLDI | 2 |
| 2001 | A Study of Exception Handling and Its Dynamic Optimization in JavaabstractOptimizing exception handling is critical for programs that frequently throw exceptions. We observed that there are many such exception-intensive programs iin various categories of Java programs. There are two commonly used exception handling techniques, stack unwinding optimizes the normal path, while stack cutting optimizes the exception handling path. However, there has been no single exception handling technique to optimize both paths. Takeshi Ogasawara, Hideaki Komatsu, Toshio Nakatani |
OOPSLA | 2 |
| 2001 | A Dynamic Optimization Framework for a Java Just-In-Time CompilerabstractThe high performance implementation of Java Virtual Machines (JVM) and just-in-time (JIT) compilers is directed toward adaptive compilation optimizations on the basis of online runtime profile information. This paper describes the design and implementation of a dynamic optimization framework in a production-level Java JIT compiler. Our approach is to employ a mixed mode interpreter and a three level optimizing compiler, supporting quick, full, and special optimization, each of which has a different set of tradeoffs between compilation overhead and execution speed. a lightweight sampling profiler operates continuously during the entire program's exectuion. When necessary, detailed information on runtime behavior is collected by dynmiacally generating instrumentation code which can be installed to and uninstalled from the specified recompilation target code. Value profiling with this instrumentation mechanism allows fully automatic code specialization to be performed on the basis of specific parameter values or global data at the highest optimization level. The experimental results show that our approach offers high performance and a low code expansion ratio in both program startup and steady state measurements in comparison to the compile-only approach, and that the code specialization can also contribute modest performance improvement Toshio Suganuma, Toshiaki Yasue, Motohiro Kawahito, Hideaki Komatsu, Toshio Nakatani |
OOPSLA | 4 |
| 2000 | Effective Null Pointer Check Elimination Utilizing Hardware Trap
Motohiro Kawahito, Hideaki Komatsu, Toshio Nakatani |
ASPLOS | 2 |
| 2000 | A study of devirtualization techniques for a JavaTM Just-In-Time compilerabstractMany devirtualization techniques have been proposed to reduce the runtime overhead of dynamic method calls for various object-oriented languages, however, most of them are less effective or cannot be applied for Java in a straightforward manner. This is partly because Java is a statically-typed language and thus transforming a dynamic call to a static one does not make a tangible performance gain (owing to the low overhead of accessing the method table) unless it is inlined, and partly because the dynamic class loading feature of Java prohibits the whole program analysis and optimizations from being applied.We propose a new technique called direct devirtualization with the code patching mechanism. For a given dynamic call site, our compiler first determines whether the call can be devirtualized, by analyzing the current class hierarchy. When the call is devirtualizable and the target method is suitably sized, the compiler generates the inlined code of the method, together with the backup code of making the dynamic call. Only the inlined code is actually executed until our assumption about the devirtualization becomes invalidated, at which time the compiler performs code patching to make the backup code executed subsequently. Since the new technique prevents some code motions across the merge point between the inlined code and the backup code, we have furthermore implemented recently-known analysis techniques, such as type analysis and preexistence analysis, which allow the backup code to be completely eliminated. We made various experiments using 16 real programs to understand the effectiveness and characteristics of the devirtualization techniques in our Java Just-In-Time (JIT) compiler. In summary, we reduced the number of dynamic calls by ranging from 8.9% to 97.3% (the average of 40.2%), and we improved the execution performance by ranging from -1% to 133% (with the geometric mean of 16%). Kazuaki Ishizaki, Motohiro Kawahito, Toshiaki Yasue, Hideaki Komatsu, Toshio Nakatani |
OOPSLA | 4 |
| 2000 | Design, implementation, and evaluation of optimizations in a JavaTM Just-In-Time compilerabstractThe Java language incurs a runtime overhead for exception checks and object accesses, which are executed without an interior pointer in order to ensure safety. It also requires type inclusion test, dynamic class loading, and dynamic method calls in order to ensure flexibility. A ‘Just-In-Time’ (JIT) compiler generates native code from Java byte code at runtime. It must improve the runtime performance without compromising the safety and flexibility of the Java language. We designed and implemented effective optimizations for a JIT compiler, such as exception check elimination, common subexpression elimination, simple type inclusion test, method inlining, and devirtualization of dynamic method call. We evaluate the performance benefits of these optimizations based on various statistics collected using SPECjvm98, its candidates, and two JavaSoft applications with byte code sizes ranging from 23 000 to 280 000 bytes. Each optimization contributes to an improvement in the performance of the programs. Copyright © 2000 John Wiley & Sons, Ltd. Kazuaki Ishizaki, Motohiro Kawahito, Toshiaki Yasue, Mikio Takeuchi, Takeshi Ogasawara, Toshio Suganuma, Tamiya Onodera, Hideaki Komatsu, Toshio Nakatani |
Concurr. Pract. Exp. | 8 |
| 1997 | A Register Allocation Technique Using Register Existence GraphabstractOptimizing compilation is very important for generating code sequences in order to utilize the characteristics of processor architectures. One of the most essential optimization techniques is register allocation. In register allocation that takes account of instruction-level parallelism, anti-dependences generated when the same register is allocated to different variables, and spill code generated when the number of registers is insufficient should be handled in such a way that the parallelism in a program is not lost. In our method, we realized register allocation using a new data structure called the register existence graph, in which the parallelism in program is well expressed. Akira Koseki, Yoshiaki Fukazawa, Hideaki Komatsu |
ICPP | 3 |
| 1996 | A Register Allocation Technique Using Guarded PDGabstractRegister allocation for instruction-level parallel processors involves problems that are not considered in register allocat,i on for scalar processors.First, when the same register is allocated to different variables, anti-dependence is gtmerated, which decreases instruction-level parallelism.Second, spill code should be inserted at a suitable position in its object, where it can be executed in parallel with other instructions.These problems do not exist for scalar processors, so existing register allocators take no account of them.This paper describes a new register allocation algorithm for solving these problems, using a graph structure that represents instructions and dependence between them. Akira Koseki, Hideaki Komatsu, Yoshiaki Fukazawa |
International Conference on Supercomputing | 2 |
| 1996 | Detection and Global Optimization of Reduction Operations for Distributed Parallel MachinesabstractThis paper presents a new technique for detecting and optimizing reduction operations for parallelizhtg compilers.The technique presented here can detect reduction constructs in general complex loops, parallelize the loops containing reduction constructs, and optimize communications for multiple reduction operations.The optimization proposed here can be applied not only to individual reduction loops, but also to multiple loop nests throughout a program.The techniques have been implemented in our HPF compiler, and their effectiveness is evaluated on an IBM Scalable PowerParallel System SP2 using a set of standard benchmarking programs.Although the aperimental results are still preliminary, it is shown that our techniques for detecting and optimizing reductions are eflective on practical application programs. Toshio Suganuma, Hideaki Komatsu, Toshio Nakatani |
International Conference on Supercomputing | 2 |