Demonstration venue · read-only. Every page can be browsed; the buttons that would change it are switched off. Create an account to run TaxoReview on your own data. A simulation from public publication records: the people listed were not invited and did not agree to review.
? Tutorial for this page

Guei-Yuan Lueh

dblp:14/6629 · DBLP profile ↗
← Back
16ranked-venue papers
3as first author
1since 2021 · last 2021
—ORCID · none

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 13 · 3 first-author · 1 since 2021Systems, architecture and hardware · 7 · 1 first-author · 1 since 2021

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
7 papers
Compilers and program optimization · 40% Runtime systems and virtual machines · 34% Programming languages and type systems · 18%
Computer architecture, parallel and distributed computing, and storage systems
2 papers
GPUs and heterogeneous computing · 90% Processor architecture and microarchitecture · 10%

Topics — the 15 heaviest of 17, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
GPUs and heterogeneous computing › heterogeneous programming models
heterogeneous multicore programming
0.112007
EXOCHI: architecture and programming environment for a heterogeneous multi-core multithreaded system · PLDI 2007
Runtime systems and virtual machines › dynamic compilation
just-in-time compilation
0.132000
Practicing JUDO: Java under dynamic optimizations · PLDI 2000
Fast, Effective Code Generation in a Just-In-Time Java Compiler · PLDI 1998
Support for Garbage Collection at Every Instruction in a Java Compiler · PLDI 1999
Runtime systems and virtual machines
garbage collection
0.122000
Practicing JUDO: Java under dynamic optimizations · PLDI 2000
Support for Garbage Collection at Every Instruction in a Java Compiler · PLDI 1999
Compilers and program optimization
register allocation
0.032000
Fusion-based register allocation · ACM Trans. Program. Lang. Syst. 2000
Call-Cost Directed Register Allocation · PLDI 1997
Code Reuse in an Optimizing Compiler · OOPSLA 1996
Compilers and program optimization › register allocation
graph coloring register allocation
0.012000
Fusion-based register allocation · ACM Trans. Program. Lang. Syst. 2000
Runtime systems and virtual machines › virtual machine implementation
java virtual machine
0.012000
Practicing JUDO: Java under dynamic optimizations · PLDI 2000
GPUs and heterogeneous computing › heterogeneous architecture
heterogeneous multicore architecture
0.012007
EXOCHI: architecture and programming environment for a heterogeneous multi-core multithreaded system · PLDI 2007
Compilers and program optimization
compiler optimization
0.011998
Fast, Effective Code Generation in a Just-In-Time Java Compiler · PLDI 1998
Requirements engineering and software design
application frameworks
0.011996
Code Reuse in an Optimizing Compiler · OOPSLA 1996
Software maintenance and evolution
code reuse
0.011996
Code Reuse in an Optimizing Compiler · OOPSLA 1996
Compilers and program optimization
compiler construction
0.011996
Code Reuse in an Optimizing Compiler · OOPSLA 1996
Compilers and program optimization
compiler infrastructure
0.011996
Code Reuse in an Optimizing Compiler · OOPSLA 1996
Processor architecture and microarchitecture
instruction-level parallelism
0.011997
Call-Cost Directed Register Allocation · PLDI 1997
Processor architecture and microarchitecture › register management
register pressure
0.011997
Call-Cost Directed Register Allocation · PLDI 1997
Compilers and program optimization
code generation
0.011996
Code Reuse in an Optimizing Compiler · OOPSLA 1996

Methods — techniques the papers use, named apart from their topics

fat binary compilation · 0.1OpenMP pragma extension · 0.1graph coloring · 0.0benefit-driven simplification · 0.0just-in-time compilation · 0.0interference graph construction · 0.0dynamic patching · 0.0register allocation · 0.0common subexpression elimination · 0.0array bounds check elimination · 0.0storage-class analysis · 0.0
YearPublicationVenuePosition
2021 C-for-Metal: High Performance Simd Programming on Intel GPUs
abstract
The SIMT execution model is commonly used for general GPU development. CUDA and OpenCL developers write scalar code that is implicitly parallelized by compiler and hardware. On Intel GPUs, however, this abstraction has profound performance implications as the underlying ISA is SIMD and important hardware capabilities cannot be fully utilized. To close this performance gap we introduce C- For- Metal (CM), an explicit SIMD programming framework designed to deliver close-to-the-metal performance on Intel GPUs. The CM programming language and its vector/matrix types provide an intuitive interface to exploit the underlying hardware features, allowing fine-grained register management, SIMD size control and cross-lane data sharing. Experimental results show that CM applications from different domains outperform the best-known SIMT-based OpenCL implementations, achieving up to 2.7x speedup on the latest Intel GPU.
Guei-Yuan Lueh, Kaiyu Chen, Joel Fuentes, Wei-Yu Chen, Fangwen Fu, Hongzheng Li, Daniel Rhee
CGO1
2019 IGC: The Open Source Intel Graphics Compiler
abstract
With increasing general purpose programming capability, GPUs have become the mainstay for a wide variety of compute intensive tasks from cloud to edge computing. Because of its availability on nearly every desktop and mobile processor that Intel ships, Intel integrated GPU offers a plethora of opportunities for researchers and application developers to make significant real-world impact. In this paper we present the Intel Graphics Compiler (IGC), the LLVM-based production compiler for Intel HD and Iris graphics. IGC supports all major graphics and compute APIs, and its OpenCL compute stack including compute runtime, compiler frontend and backend, and architecture specification is fully open-source, giving a unique opportunity for developers to optimize the entire stack. We highlight several custom optimizations that address the challenges for GPU compilation. Examples include SIMD size selection, divergence analysis, instruction scheduling, addressing mode selection, and redundant copy elimination. These optimizations take advantage of features in the Intel GPU architecture such as a larger register file, indirect register addressing, and multiple memory addressing modes. Experimental results show that our optimizations deliver significant speedup on a number of OpenCL benchmarks; compared to the baseline, we see a geometric mean of 12% speed up across benchmarks with a peak gain of 45%.
Anupama Chandrasekhar, Wei-Yu Chen, Junjie Gu, Shruthi Hebbur Prasanna Kumar, Guei-Yuan Lueh, Pankaj Mistry, Thomas Raoux, Konrad Trifunovic
CGO8
2018 Register allocation for Intel processor graphics
abstract
Register allocation is a well-studied problem, but surprisingly little work has been published on assigning registers for GPU architectures. In this paper we present the register allocator in the production compiler for Intel HD and Iris Graphics. Intel GPUs feature a large byte-addressable register file organized into banks, an expressive instruction set that supports variable SIMD-sizes and divergent control flow, and high spill overhead due to relatively long memory latencies. These distinctive characteristics impose challenges for register allocation, as input programs may have arbitrarily-sized variables, partial updates, and complex control flow. Not only should the allocator make a program spill-free, but it must also reduce the number of register bank conflicts and anti-dependencies. Since compilation occurs in a JIT environment, the allocator also needs to incur little overhead.
Wei-Yu Chen, Guei-Yuan Lueh, Pratik Ashar, Kaiyu Chen, Buqi Cheng
CGO2
2007 EXOCHI: architecture and programming environment for a heterogeneous multi-core multithreaded system
abstract
Future mainstream microprocessors will likely integrate specialized accelerators, such as GPUs, onto a single die to achieve better performance and power efficiency. However, it remains a keen challenge to program such a heterogeneous multicore platform, since these specialized accelerators feature ISAs and functionality that are significantly different from the general purpose CPU cores. In this paper, we present EXOCHI: (1) Exoskeleton Sequencer(EXO), an architecture to represent heterogeneous acceleratorsas ISA-based MIMD architecture resources, and a shared virtual memory heterogeneous multithreaded program execution model that tightly couples specialized accelerator cores with generalpurpose CPU cores, and (2) C for Heterogeneous Integration(CHI), an integrated C/C++ programming environment that supports accelerator-specific inline assembly and domain-specific languages. The CHI compiler extends the OpenMP pragma for heterogeneous multithreading programming, and produces a single fat binary with code sections corresponding to different instruction sets. The runtime can judiciously spread parallel computation across the heterogeneous cores to optimize performance and power.
Perry H. Wang, Jamison D. Collins, Gautham N. Chinya, Xinmin Tian, Milind Girkar, Nick Y. Yang, Guei-Yuan Lueh, Hong Wang 0003
PLDI8
2007 The XTREM power and performance simulator for the Intel XScale core: Design and experiences
abstract
Managing power concerns in microprocessors has become a pressing research problem across the domains of computer architecture, CAD, and compilers. As a result, several parameterized cycle-level power simulators have been introduced. While these simulators can be quite useful for microarchitectural studies, their generality limits how accurate they can be for any one chip family. Furthermore, their hardware focus means that they do not explicitly enable studying the interaction of different software layers, such as Java applications and their underlying runtime system software. This paper describes and evaluates XTREM, a power-simulation tool tailored for the Intel XScale microarchitecture. In building XTREM, our goals were to develop a microarchitecture simulator that, while still offering size parameterizations for cache and other structures, more accurately reflected a realistic processor pipeline. We present a detailed set of validations based on multimeter power measurements and hardware performance counter sampling. XTREM exhibits an average performance error of only 6.5% and an even smaller average power error: 4%. The paper goes on to present an application study enabled by the simulator. Namely, we use XTREM to produce an energy consumption breakdown for Java CDC and CLDC applications. Our simulator measurements indicate that a large percentage of the total energy consumption (up to 35%) is devoted to the virtual machine's support functions.
Gilberto Contreras, Margaret Martonosi, Jinzhan Peng, Guei-Yuan Lueh, Roy Dz-Ching Ju
ACM Trans. Embed. Comput. Syst.4
2006 Data and Computation Transformations for Brook Streaming Applications on Multiprocessors
abstract
Multicore processors are about to become prevalent in the PC world. Meanwhile, over 90% of the computing cycles are estimated to be consumed by streaming media applications (Rixner et al., 1998). Although stream programming exposes parallelism naturally, we found that achieving high performance on multiprocessors is challenging. Therefore, we develop a parallel compiler for the Brook streaming language with aggressive data and computation transformations. First, we formulate fifteen Brook stream operators in terms of systems of inequalities. Our compiler optimizes the modeled operators to improve memory footprint and performance. Second, the stream computation including both kernels and operators is mapped to the affine partitioning model by modeling each kernel as an implicit loop nest over stream elements. Note that our general abstraction is not limited to Brook. Our modeling and transformations yield high performance on uniprocessors as well. The geometric mean of speedups is 4.7 on ten streaming applications on a Xeon. On multiprocessors, we show that exploiting the standard intra-kernel data parallelism is inferior to our general modeling. The former yields a speedup of 1.5 for ten applications on a 4-way Xeon, while the latter achieves a speedup of 6.4 over the same baseline. We show that our compiler effectively reduces memory footprint, exploits parallelism, and circumvents phase-ordering issues.
Shih-Wei Liao, Zhaohui Du, Gansha Wu, Guei-Yuan Lueh
CGO4
2005 XAMM: A High-Performance Automatic Memory Management System with Memory-Constrained Designs
Gansha Wu, Guei-Yuan Lueh, Jesse Z. Fang, Jinzhan Peng, Victor Ying
HiPEAC3
2004 XTREM: a power simulator for the Intel XScale® core
abstract
Managing power concerns in icroprocessors has become a pressing research problem across the domains of computer architecture, CAD, and compilers. As a result, several parameterized cycle-level power simulators have been introduced. While these simulators can be quite useful for microarchitectural studies, their generality limits how accurate they can be for any one chip family. Furthermore, their hardware focus means that they do not explicitly enable studying the interaction of different software layers, such as Java applications and their underlying Runtime system software.This paper describes and evaluates XTREM, a power simulation tool tailored for the Intel XScale icroarchitecture. In building XTREM, our goals were to develop a icroarchitecture simulator that, while still offering size parameterizations for cache, TLB, etc., more accurately reflected a realistic processor pipeline. We present a detailed set of validations based on ultimeter power measurements and hardware performance counter sampling. Based on these validations across a wide range of stressmarks, Java benchmarks, and non-Java benchmarks, XTREM has an average performance error of only 6.5% and an even smaller average power error: 4%. The paper goes on to present a selection of application studies enabled by the simulator. For example, presenting power behavior vs. time for selected embedded C and Java CLDC benchmarks, we can make power distinctions between the two programming domains as well as distinguishing Java application (JITted code) power from Java Runtime system power. We also study how the Intel XScale core 's power consumption varies for different data activity factors, creating power swings as large as 50mW for a 200Mhz core. We are planning to release XTREM for wider use, and feel that it offers a useful step forward for compiler and embedded software designers.
Gilberto Contreras, Margaret Martonosi, Jinzhan Peng, Roy Dz-Ching Ju, Guei-Yuan Lueh
LCTES5
2003 Inter-procedural stacked register allocation for itanium® like architecture
abstract
A hardware managed register stack, Register Stack Engine (RSE), is implemented in Itanium® architecture to provide a unified and flexible register structure to software. The compiler allocates each procedure a register stack frame with its size explicitly specified using an alloc instruction. When the total number of registers used by the procedures on the call stack exceeds the number of physical registers, RSE performs automatically register overflows and fills to ensure that the current procedure has its requested registers available. The virtual register stack frames and RSE alleviate the need of explicit spills by the compiler, but our experimental results indicate that a trade-off exists between using stacked registers and explicit spills under high register pressure due to the uneven cost between them. In this work, we introduce the stacked register quota assignment problem based on the observation that reducing stacked register usage in some procedures could reduce the total memory access time of spilling registers, which includes the time caused by the loads/stores due to explicit register spills and RSE overflows/fills. We propose a new inter-procedural algorithm to solve the problem by allocating stacked registers across procedures based on a quantitative cost model. The results show that our approach can improve performance significantly for the programs with high RSE overflow cost, e.g. perlbmk and crafty, improved by 14% and 3.7%, respectively.
Sun Chan, Guang R. Gao, Roy Dz-Ching Ju, Guei-Yuan Lueh, Zhaoqing Zhang
ICS5
2002 Recompilation for debugging support in a JIT-compiler
abstract
verifiably secure and compact architecture-neutral intermediate format, called Java byte codes. The Java byte codes can be either interpreted by a Java Virtual Machine or translated into native code by Java Just-In-Time compilers. Static Java compilers embed debug information in the Java class files to be used by the source level debuggers. However, the debug information is generated for architecture independent byte codes and most of the debug information is valid only when the byte codes are interpreted. Translating byte codes into native instructions puts a limitation on the amount of usable debug information that can be used by source level debuggers. In this paper, we present a new technique to generate valid debug information when JustIn -Time compilers are used. Our approach is based on the dynamic recompilation of Java methods by a fast code generator and lazily generates debug information when it is required. We also present three implementations for field watch support in the Java Virtual Machine Debugger Interface to investigate the runtime overhead and code size growth by our approach.
Mustafa M. Tikir, Jeffrey K. Hollingsworth, Guei-Yuan Lueh
PASTE3
2000 Practicing JUDO: Java under dynamic optimizations
abstract
A high-performance implementation of a Java Virtual Machine (JVM) consists of efficient implementation of Just-In-Time (JIT) compilation, exception handling, synchronization mechanism, and garbage collection (GC). These components are tightly coupled to achieve high performance. In this paper, we present some static anddynamic techniques implemented in the JIT compilation and exception handling of the Microprocessor Research Lab Virtual Machine (MRL VM), i.e., lazy exceptions, lazy GC mapping, dynamic patching, and bounds checking elimination. Our experiments used IA-32 as the hardware platform, but the optimizations can be generalized to other architectures.
Michal Cierniak, Guei-Yuan Lueh, James M. Stichnoth
PLDI2
2000 Fusion-based register allocation
abstract
The register allocation phase of a compiler maps live ranges of a program to registers. If there are more candidates than there are physical registers, the register allocator must spill a live range (the home location is in memory) or split a live range (the live range occupies multiple locations). One of the challenges for a register allocator is to deal with spilling and splitting together. Fusion-based register allocation uses the structure of the program to make splitting and spilling decisions, with the goal to move overhead operations to infrequently executed parts of a program. The basic idea of fusion-based register allocation is to build up the interference graph. Starting with some base region (e.g., a basic block, a loop), the register allocator adds basic blocks to the region and incrementallly builds the interference graph. When there are more live ranges than registers, the register allocator selects live ranges to split; these live ranges are split along the edge that was most recently added to the region. This article describes fusion-based register allocation in detail and compares it with other approaches to register allocation. For programs from the SPEC92 suite, fusion-based register allocation can improve the execution time (of optimized programs, for the MIPS architecture) by up to 8.4% over Chaitin-style register allocation.
Guei-Yuan Lueh, Thomas R. Gross, Ali-Reza Adl-Tabatabai
ACM Trans. Program. Lang. Syst.1
1999 Support for Garbage Collection at Every Instruction in a Java Compiler
abstract
A high-performance implementation of a Java Virtual Machine1 requires a compiler to translate Java bytecodes into native instructions, as well as an advanced garbage collector (e.g., copying or generational). When the Java heap is exhausted and the garbage collector executes, the compiler must report to the garbage collector all live object references contained in physical registers and stack locations. Typical compilers only allow certain instructions (e.g., call instructions and backward branches) to be GC-safe; if GC happens at some other instruction, the compiler may need to advance execution to the next GC-safe point. Until now, no one has ever attempted to make every compiler-generated instruction GC-safe, due to the perception that recording this information would require too much space. This kind of support could improve the GC performance in multithreaded applications. We show how to use simple compression techniques to reduce the size of the GC map to about 20% of the generated code size, a result that is competitive with the best previously published results. In addition, we extend the work of Agesen, Detlefs, and Moss, regarding the so-called "JSR Problem" (the single exception to Java's type safety property), in a way that eliminates the need for extra runtime overhead in the generated code.
James M. Stichnoth, Guei-Yuan Lueh, Michal Cierniak
PLDI2
1998 Fast, Effective Code Generation in a Just-In-Time Java Compiler
abstract
A Just-In-Time (JIT) Java compiler produces native code from Java byte code instructions during program execution. As such, compilation speed is more important in a Java JIT compiler than in a traditional compiler, requiring optimization algorithms to be lightweight and effective. We present the structure of a Java JIT compiler for the Intel Architecture, describe the lightweight implementation of JIT compiler optimizations (e.g., common subexpression elimination, register allocation, and elimination of array bounds checking), and evaluate the performance benefits and tradeoffs of the optimizations. This JIT compiler has been shipped with version 2.5 of Intel's VTune for Java product.
Ali-Reza Adl-Tabatabai, Michal Cierniak, Guei-Yuan Lueh, Vishesh M. Parikh, James M. Stichnoth
PLDI3
1997 Call-Cost Directed Register Allocation
abstract
Choosing the right kind of register for a live range plays a major role in eliminating the register-allocation overhead when the compiled function is frequently executed or function tails are on the most frequently executed paths. Picking the wrong kind of register for a live range incurs a high penalty that may dominate the total overhead of register allocation. In this paper, we present three improvements, storage-class analysis, benefit-driven simplification, and preference decision that are effective in selecting the right kind of register for a live range. Then we compare an enhanced Chaitin-style register allocator (with these three improvements) with priority-based and optimistic coloring.
Guei-Yuan Lueh, Thomas R. Gross
PLDI1
1996 Code Reuse in an Optimizing Compiler
abstract
This paper describes how the cmcc compiler reuses code---both internally (reuse between different modules) and externally (reuse between versions for different target machines). The key to reuse are the application frameworks developed for global data-flow analysis, code generation, instruction scheduling, and register allocation.The code produced by cmcc is as good as the code produced by the native compilers for the MIPS and SPARC, although significantly less resources have been spent on cmcc (overall, about 6 man years by 2.5 persons). cmcc is implemented in C++, which allowed for a compact expression of the frameworks as class hierarchies. The results support the claim that suitable frameworks facilitate reuse and thereby significantly improve developer effectiveness.
Ali-Reza Adl-Tabatabai, Thomas R. Gross, Guei-Yuan Lueh
OOPSLA3