People of ACM - Kazuaki Ishizaki
December 27, 2018
What are some of the overarching goals and accomplishments of the Computing as a Service (a.k.a. Systems) Group at IBM Research–Tokyo?
The Computing as a Service Group has been working on maximizing the performance of programming language runtime environments such as Java and on middleware, cloud infrastructures, and analytics workloads such as machine learning and deep learning on IBM platforms. Because IBM provides PowerPC and Z processor architectures and its own cloud platform, it is important for IBM to accelerate important customer workloads on these environments. Our research improved the implementation of languages and frameworks and utilized accelerators such as GPGPUs and field programmable gate arrays (FPGAs) to accelerate such workloads.
One of our biggest research accomplishments is our contributions to the IBM Java runtime environment and its performance. From 1995 (when Java was born), our group worked on building the just-in-time (JIT) compiler for Java to achieve superior performance on IBM platforms and then worked on improving JVMs. Java is the first widely-used language that supports garbage collection and managed threads and requires JIT compilation. While there are multiple types of research on these technologies, we addressed and resolved multiple challenges to integrate them into Java runtime products. Benchmark competitions were very tough because there were multiple vendors that frequently released their Java implementations.
Our group devised multiple new optimizations to alleviate overhead in the Java language due to virtual calls, exception checks, and synchronizations, and to utilize runtime information and hardware features such as complex instruction set computer (CISC) instructions and transactional memories for further optimizations while overhead of JIT compilers should be small for performance. IBM SDK, Java Technology Edition achieved the fastest scores for SPECjvm98, SPECjbb2000, and other benchmarks.
How did you become interested in programming languages and, more specifically, working with compilers?
While I was in graduate school for my MS degree, my research area was in architecture for parallel dataflow computers. I prototyped a routing unit for our new parallel computer using FPGAs. When I joined IBM Research – Tokyo in 1992, my desire was to work for the architecture of the parallel machine TOP-1, which IBM Research–Tokyo built. Because the TOP-1 project was in its closeout phase, I had two choices for joining a new project: building a compiler for a parallel Fortran language or designing hardware for graphics processors. Because I wanted to work in parallel computing, I chose the project for the compiler.
After joining the research group at IBM Research–Tokyo, I first read the famous book on compilers (commonly known as “Dragon Book”) to learn about compiler technologies. Because IBM has a proprietary optimizing compiler, I learned a lot of advanced techniques while working on it. I also learned a lot of techniques from colleagues, researchers, and engineers at IBM, which was an excellent place for conducting advanced research and learning about compiler technologies; in the early 1990s there were few advanced compilers, which we were able to access and learn from—with the exception of the open source compiler GNU Compiler Collection (GCC). Open source development models like GitHub were not active then.
Why is working with Java using GPGPUs an especially hot research area?
Accelerators for specific domains are currently attracting attention. Because it is not easy for typical programmers to write programs for accelerators, this kind of research enables them to easily use accelerators and achieve high performance without being burdened.
When I started working with Java using GPGPUs, they were used for accelerators for high performance computing and analytics workloads. GPGPUs had already showed their superior capability for these workloads. On the other hand, programs for GPGPUs are written by top-notch programmers because these programs require writing low-level operations. Therefore, it is not easy for people who are not familiar with GPGPUs to write a GPGPU program.
The motivation of this research was to alleviate this sticking point. Our group started a joint research project with a Java runtime development team and Rice University to generate GPGPU code from a Java program for non-familiar users. We devised techniques for effectively translating Java code for managed-runtime environments on GPGPUs. This research was integrated into IBM Java 8. This is the first production JVM that translates Java programs to GPGPU code. This work later became a part of the Eclipse OpenJ9 project, which is an open source Java runtime environment. While working for this research project, I have become interested in compilation techniques—from hardware-agnostic languages or frameworks to accelerators—to fill gaps between software and hardware..
What are your recent research projects?
One of my projects is to build a software stack for a deep learning accelerator. In 2018, IBM Research published a paper on a deep learning accelerator chip. This chip can drastically improve performance and power efficiency regarding training and inference because it is highly tuned for operations used in deep neural networks. Since it is so different from regular processors, it is very difficult for non-top-notch programmers to write programs for this chip. Our team works on generating highly-optimized code for this chip from domain-specific languages used in existing deep learning frameworks, such as TensorFlow. In this research, my university research experience regarding processor hardware has been helpful.
Another project is for Apache Spark, which is an in-memory computing framework for big data. Since 2015, I have used my JVM and compiler knowledge to improve the performance of Apache Spark. In 2018, I was appointed as a committer of Apache Spark. I am very interested in translating Apache Spark programs (which are written in combinations of parallel operations) into accelerators. I am also interested in how open source software and academic research can effectively co-invent new technologies.
Kazuaki Ishizaki is a researcher in the Computing as a Service Group at IBM Research–Tokyo, Japan. He has authored 26 refereed papers and filed 29 patents in areas including compiler optimizations, language runtime environments, parallel processing and processor architectures. He has contributed to 13 releases of IBM’s production Java virtual machines (JVMs). His research currently focuses on developing compilations and optimizations for accelerators such as general-purpose graphics processing unit (GPGPU) accelerators and deep-learning hardware accelerators from hardware-agnostic languages or frameworks such as Java, Apache Spark, and TensorFlow. He collaborated on the first and only JVM product to support a compilation for GPGPU and on an Apache Spark plugin for launching CUDA programs. (CUDA is a parallel computing platform and programming model invented by NVIDIA.) He is a committer of Apache Spark, which is an open source distributed in-memory computing framework.
Ishizaki is a senior member of the Information Processing Society of Japan (IPSJ) and a director of the Japan Society for Software Science and Technology. He is a co-recipient of IPSJ’s Industrial Achievement Award. In 2018, he was named an ACM Distinguished Member for his contributions to compilers, language runtime environments, and open source software.