Chi-Keung Luk

dblp:90/778 · DBLP profile ↗
← Back
20ranked-venue papers
10as first author
0since 2021 · last 2018
—ORCID · none

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

Systems, architecture and hardware · 17 · 9 first-authorSoftware engineering, systems software and programming languages · 7 · 5 first-author

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.

Computer architecture, parallel and distributed computing, and storage systems
12 papers
Parallel and multicore computing · 32% Memory systems · 30% Processor architecture and microarchitecture · 30%
Software engineering, system software, and programming languages
8 papers
Program analysis · 76% Compilers and program optimization · 24%

Topics — the 29 heaviest of 34, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Program analysis
dynamic analysis
0.322013
SD3: An Efficient Dynamic Data-Dependence Profiling Mechanism · IEEE Trans. Computers 2013
SD3: A Scalable Approach to Dynamic Data-Dependence Profiling · MICRO 2010
Parallel and multicore computing › parallel programming models
automatic parallelization
0.112010
SD3: A Scalable Approach to Dynamic Data-Dependence Profiling · MICRO 2010
Parallel and multicore computing › parallel computing › parallel program analysis
dependence profiling
0.112010
SD3: A Scalable Approach to Dynamic Data-Dependence Profiling · MICRO 2010
Processor architecture and microarchitecture › multiprocessor architecture
heterogeneous multiprocessor
0.112009
Qilin: exploiting parallelism on heterogeneous multiprocessors with adaptive mapping · MICRO 2009
Parallel and multicore computing
parallel programming models
0.112009
Qilin: exploiting parallelism on heterogeneous multiprocessors with adaptive mapping · MICRO 2009
Processor architecture and microarchitecture
memory latency tolerance
0.132001
Tolerating memory latency through software-controlled pre-execution in simultaneous multithreading processors · ISCA 2001
Understanding Why Correlation Profiling Improves the Predictability of Data Cache Misses in Nonnumeric Applications · IEEE Trans. Computers 2000
Predicting Data Cache Misses in Non-Numeric Applications through Correlation Profiling · MICRO 1997
Compilers and program optimization › prefetching
compiler-inserted prefetching
0.132001
Architectural and compiler support for effective instruction prefetching: a cooperative approach · ACM Trans. Comput. Syst. 2001
Automatic Compiler-Inserted Prefetching for Pointer-Based Applications · IEEE Trans. Computers 1999
Cooperative Prefetching: Compiler and Hardware Support for Effective Instruction Prefetching in Modern Processors · MICRO 1998
Memory systems
software prefetching
0.122001
Tolerating memory latency through software-controlled pre-execution in simultaneous multithreading processors · ISCA 2001
Understanding Why Correlation Profiling Improves the Predictability of Data Cache Misses in Nonnumeric Applications · IEEE Trans. Computers 2000
Program analysis › dynamic analysis › instrumentation
binary instrumentation
0.112005
Pin: building customized program analysis tools with dynamic instrumentation · PLDI 2005
Program analysis › dynamic analysis
dynamic instrumentation
0.112005
Pin: building customized program analysis tools with dynamic instrumentation · PLDI 2005
Processor architecture and microarchitecture › instruction fetch
instruction prefetching
0.122001
Architectural and compiler support for effective instruction prefetching: a cooperative approach · ACM Trans. Comput. Syst. 2001
Cooperative Prefetching: Compiler and Hardware Support for Effective Instruction Prefetching in Modern Processors · MICRO 1998
Memory systems
cache
0.031998
Predicting Data Cache Misses in Non-Numeric Applications through Correlation Profiling · MICRO 1997
Compiler-Based Prefetching for Recursive Data Structures · ASPLOS 1996
Cooperative Prefetching: Compiler and Hardware Support for Effective Instruction Prefetching in Modern Processors · MICRO 1998
Processor architecture and microarchitecture › speculative execution
pre-execution
0.012001
Tolerating memory latency through software-controlled pre-execution in simultaneous multithreading processors · ISCA 2001
Processor architecture and microarchitecture › multithreading
simultaneous multithreading
0.012001
Tolerating memory latency through software-controlled pre-execution in simultaneous multithreading processors · ISCA 2001
Memory systems
cache miss prediction
0.012000
Understanding Why Correlation Profiling Improves the Predictability of Data Cache Misses in Nonnumeric Applications · IEEE Trans. Computers 2000
Compilers and program optimization › memory optimization
memory latency hiding
0.011999
Automatic Compiler-Inserted Prefetching for Pointer-Based Applications · IEEE Trans. Computers 1999
Memory systems › cache
cache optimization
0.011999
Memory Forwarding: Enabling Aggressive Layout Optimizations by Guaranteeing the Safety of Data Relocation · ISCA 1999
Memory systems
data layout optimization
0.011999
Memory Forwarding: Enabling Aggressive Layout Optimizations by Guaranteeing the Safety of Data Relocation · ISCA 1999
Memory systems › memory access optimization
pointer-chasing prefetching
0.011999
Automatic Compiler-Inserted Prefetching for Pointer-Based Applications · IEEE Trans. Computers 1999
Memory systems › cache
prefetching
0.011999
Automatic Compiler-Inserted Prefetching for Pointer-Based Applications · IEEE Trans. Computers 1999
Performance modeling and evaluation
profiling
0.022005
Pin: building customized program analysis tools with dynamic instrumentation · PLDI 2005
Predicting Data Cache Misses in Non-Numeric Applications through Correlation Profiling · MICRO 1997
Memory systems › cache › CPU cache
instruction cache
0.011998
Cooperative Prefetching: Compiler and Hardware Support for Effective Instruction Prefetching in Modern Processors · MICRO 1998
Compilers and program optimization › prefetching
software prefetching
0.011996
Compiler-Based Prefetching for Recursive Data Structures · ASPLOS 1996
Memory systems › cache › prefetching
data prefetching
0.011996
Compiler-Based Prefetching for Recursive Data Structures · ASPLOS 1996
Memory systems › cache › prefetching
prefetch filtering
0.022001
Architectural and compiler support for effective instruction prefetching: a cooperative approach · ACM Trans. Comput. Syst. 2001
Cooperative Prefetching: Compiler and Hardware Support for Effective Instruction Prefetching in Modern Processors · MICRO 1998
Memory systems
cache management
0.012001
Architectural and compiler support for effective instruction prefetching: a cooperative approach · ACM Trans. Comput. Syst. 2001
Performance modeling and evaluation
workload characterization
0.012000
Understanding Why Correlation Profiling Improves the Predictability of Data Cache Misses in Nonnumeric Applications · IEEE Trans. Computers 2000
Parallel and multicore computing › multiprocessor system
shared-memory multiprocessor
0.011999
Automatic Compiler-Inserted Prefetching for Pointer-Based Applications · IEEE Trans. Computers 1999
Processor architecture and microarchitecture
superscalar processor
0.011996
Compiler-Based Prefetching for Recursive Data Structures · ASPLOS 1996

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

stride pattern detection · 0.5memory access compression · 0.3parallelization · 0.2compression · 0.2liveness analysis · 0.1instruction scheduling · 0.1inlining · 0.1dynamic compilation · 0.1adaptive mapping · 0.1profiling · 0.1register re-allocation · 0.1hardware-software cooperation · 0.0
YearPublicationVenuePosition
2018 Performance Characterisation and Simulation of Intel's Integrated GPU Architecture
abstract
Integrated GPUs (iGPUs) are ubiquitous in today's client devices such as laptops and desktops. Examples include Intel's HD or Iris Graphics and AMD's APUs. An iGPU resides on the same chip as the CPU, which is in contrast to a conventional discrete GPU that would typically be connected over the PCI-E bus. Much like discrete GPUs, iGPUs are also capable of general purpose computation in addition to traditional graphics roles. Further, iGPUs have some interesting differences compared to traditional GPUs such as a cache-coherent memory hierarchy and a shared last level cache with the CPU. Despite their wide spread use, they are not studied very extensively. To the best of our knowledge, this paper introduces the first open source trace generation and microarchitectural simulation framework for Intel's integrated GPUs. We characterise the performance of Intel's Skylake and Kabylake GPUs through detailed microbenchmarks, and use the performance evaluations to guide our models and validate the simulator.
Prasun Gera, Hyojong Kim, Hyesoon Kim, Sunpyo Hong, Vinod George, Chi-Keung Luk
ISPASS6
2013 SD3: An Efficient Dynamic Data-Dependence Profiling Mechanism
abstract
As multicore processors are deployed in mainstream computing, the need for software tools to help parallelize programs is increasing dramatically. Data-dependence profiling is an important program analysis technique to exploit parallelism in serial programs. More specifically, manual, semiautomatic, or automatic parallelization can use the outcomes of data-dependence profiling to guide where and how to parallelize in a program. However, state-of-the-art data-dependence profiling techniques consume extremely huge resources as they suffer from two major issues when profiling large and long-running applications: 1) runtime overhead and 2) memory overhead. Existing data-dependence profilers are either unable to profile large-scale applications with a typical resource budget or only report very limited information. In this paper, we propose an efficient approach to data-dependence profiling that can address both runtime and memory overhead in a single framework. Our technique, called SD$({}^3)$, reduces the runtime overhead by parallelizing the dependence profiling step itself. To reduce the memory overhead, we compress memory accesses that exhibit stride patterns and compute data dependences directly in a compressed format. We demonstrate that SD$({}^3)$ reduces the runtime overhead when profiling SPEC 2006 by a factor of 4.1× and 9.7× on eight cores and 32 cores, respectively. For the memory overhead, we successfully profile 22 SPEC 2006 benchmarks with the reference input, while the previous approaches fail even with the train input. In some cases, we observe more than a 20× improvement in memory consumption and a 16× speedup in profiling time when 32 cores are used. We also demonstrate the usefulness of SD$({}^3)$ by showing manual parallelization followed by data dependence profiling results.
Minjang Kim, Nagesh B. Lakshminarayana, Hyesoon Kim, Chi-Keung Luk
IEEE Trans. Computers4
2011 The pochoir stencil compiler
abstract
A stencil computation repeatedly updates each point of a d-dimensional grid as a function of itself and its near neighbors. Parallel cache-efficient stencil algorithms based on "trapezoidal decompositions" are known, but most programmers find them difficult to write. The Pochoir stencil compiler allows a programmer to write a simple specification of a stencil in a domain-specific stencil language embedded in C++ which the Pochoir compiler then translates into high-performing Cilk code that employs an efficient parallel cache-oblivious algorithm. Pochoir supports general d-dimensional stencils and handles both periodic and aperiodic boundary conditions in one unified algorithm. The Pochoir system provides a C++ template library that allows the user's stencil specification to be executed directly in C++ without the Pochoir compiler (albeit more slowly), which simplifies user debugging and greatly simplified the implementation of the Pochoir compiler itself. A host of stencil benchmarks run on a modern multicore machine demonstrates that Pochoir outperforms standard parallelloop implementations, typically running 2-10 times faster. The algorithm behind Pochoir improves on prior cache-efficient algorithms on multidimensional grids by making "hyperspace" cuts, which yield asymptotically more parallelism for the same cache efficiency.
Rezaul Alam Chowdhury, Bradley C. Kuszmaul, Chi-Keung Luk, Charles E. Leiserson
SPAA4
2010 SD3: A Scalable Approach to Dynamic Data-Dependence Profiling
abstract
As multicore processors are deployed in mainstream computing, the need for software tools to help parallelize programs is increasing dramatically. Data-dependence profiling is an important technique to exploit parallelism in programs. More specifically, manual or automatic parallelization can use the outcomes of data-dependence profiling to guide where to parallelize in a program. However, state-of-the-art data-dependence profiling techniques are not scalable as they suffer from two major issues when profiling large and long-running applications: (1) runtime overhead and (2) memory overhead. Existing data-dependence profilers are either unable to profile large-scale applications or only report very limited information. In this paper, we propose a scalable approach to data-dependence profiling that addresses both runtime and memory overhead in a single framework. Our technique, called SD3, reduces the runtime overhead by parallelizing the dependence profiling step itself. To reduce the memory overhead, we compress memory accesses that exhibit stride patterns and compute data dependences directly in a compressed format. We demonstrate that SD3reduces the runtime overhead when profiling SPEC 2006 by a factor of 4.1× and 9.7× on eight cores and 32 cores, respectively. For the memory overhead, we successfully profile SPEC 2006 with the reference input, while the previous approaches fail even with the train input. In some cases, we observe more than a 20× improvement in memory consumption and a 16× speedup in profiling time when 32 cores are used.
Minjang Kim, Hyesoon Kim, Chi-Keung Luk
MICRO3
2009 Qilin: exploiting parallelism on heterogeneous multiprocessors with adaptive mapping
abstract
Heterogeneous multiprocessors are increasingly important in the multi-core era due to their potential for high performance and energy efficiency. In order for software to fully realize this potential, the step that maps computations to processing elements must be as automated as possible. However, the state-of-the-art approach is to rely on the programmer to specify this mapping manually and statically. This approach is not only labor intensive but also not adaptable to changes in runtime environments like problem sizes and hardware/software configurations. In this study, we propose adaptive mapping, a fully automatic technique to map computations to processing elements on a CPU+GPU machine. We have implemented it in our experimental heterogeneous programming system called Qilin. Our results show that, by judiciously distributing works over the CPU and GPU, automatic adaptive mapping achieves a 25% reduction in execution time and a 20% reduction in energy consumption than static mappings on average for a set of important computation benchmarks. We also demonstrate that our technique is able to adapt to changes in the input problem size and system configuration.
Chi-Keung Luk, Sunpyo Hong, Hyesoon Kim
MICRO1
2007 PinOS: a programmable framework for whole-system dynamic instrumentation
abstract
PinOS is an extension of the Pin dynamic instrumentation framework for whole-system instrumentation, i.e., to instrument both kernel and user-level code. It achieves this by interposing between the subject system and hardware using virtualization techniques. Specifically, PinOS is built on top of the Xen virtual machine monitor with Intel VT technology to allow instrumentation of unmodified OSes. PinOS is based on software dynamic translation and hence can perform pervasive fine-grain instrumentation. By inheriting the powerful instrumentation API from Pin, plus introducing some new API for system-level instrumentation, PinOS can be used to write system-wide instrumentation tools for tasks like program analysis and architectural studies. As of today, PinOS can boot Linux on IA-32 in uniprocessor mode, and can instrument complex applications such as database and web servers.
Prashanth P. Bungale, Chi-Keung Luk
VEE2
2005 Pin: building customized program analysis tools with dynamic instrumentation
abstract
Robust and powerful software instrumentation tools are essential for program analysis tasks such as profiling, performance evaluation, and bug detection. To meet this need, we have developed a new instrumentation system called Pin. Our goals are to provide easy-to-use, portable, transparent, and efficient instrumentation. Instrumentation tools (called Pintools) are written in C/C++ using Pin's rich API. Pin follows the model of ATOM, allowing the tool writer to analyze an application at the instruction level without the need for detailed knowledge of the underlying instruction set. The API is designed to be architecture independent whenever possible, making Pintools source compatible across different architectures. However, a Pintool can access architecture-specific details when necessary. Instrumentation with Pin is mostly transparent as the application and Pintool observe the application's original, uninstrumented behavior. Pin uses dynamic compilation to instrument executables while they are running. For efficiency, Pin uses several techniques, including inlining, register re-allocation, liveness analysis, and instruction scheduling to optimize instrumentation. This fully automated approach delivers significantly better instrumentation performance than similar tools. For example, Pin is 3.3x faster than Valgrind and 2x faster than DynamoRIO for basic-block counting. To illustrate Pin's versatility, we describe two Pintools in daily use to analyze production software. Pin is publicly available for Linux platforms on four architectures: IA32 (32-bit x86), EM64T (64-bit x86), Itanium®, and ARM. In the ten months since Pin 2 was released in July 2004, there have been over 3000 downloads from its website.
Chi-Keung Luk, Robert S. Cohn, Robert Muth, Harish Patil, Artur Klauser, P. Geoffrey Lowney, Steven Wallace, Vijay Janapa Reddi, Kim M. Hazelwood
PLDI1
2004 Ispike: A Post-link Optimizer for the Intel®Itanium®Architecture
abstract
Ispike is a post-link optimizer developed for the Intel/spl reg/ Itanium Processor Family (IPF) processors. The IPF architecture poses both opportunities and challenges to post-link optimizations. IPF offers a rich set of performance counters to collect detailed profile information at a low cost, which is essential to post-link optimization being practical. At the same time, the predication and bundling features on IPF make post-link code transformation more challenging than on other architectures. In Ispike, we have implemented optimizations like code layout, instruction prefetching, data layout, and data prefetching that exploit the IPF advantages, and strategies that cope with the IPF-specific challenges. Using SPEC CINT2000 as benchmarks, we show that Ispike improves performance by as much as 40% on the ltanium/spl reg/2 processor, with average improvement of 8.5% and 9.9% over executables generated by the Intel/spl reg/ Electron compiler and by the Gcc compiler, respectively. We also demonstrate that statistical profiles collected via IPF performance counters and complete profiles collected via instrumentation produce equal performance benefit, but the profiling overhead is significantly lower for performance counters.
Chi-Keung Luk, Robert Muth, Harish Patil, Robert S. Cohn, P. Geoffrey Lowney
CGO1
2002 Profile-guided post-link stride prefetching
abstract
Data prefetching is an e ective approach to addressing the memory latency problem. While a few processors have implemented hardware-based data prefetching, the majority of modern processors support data-prefetch instructions and rely on compilers to automatically insert prefetches. However, most prefetching schemes in commercial compilers suffer from two limitations: (1) the source code must be available before prefetching can be applied, and (2) these prefetching schemes target only loops with statically-known strided accesses. In this study, we broaden the scope of softwarecontrolled prefetching by addressing the above two limitations. We use pro ling to discover strided accesses that frequently occur during program execution but are not determinable by the compiler. We then use the strides discovered to insert prefetches into the executable directly, without the need for re-compilation. Performance evaluation was done on an Alpha 21264-based system with a 64KB data cache and an 8MB secondary cache. We nd that even with such large caches, our technique o ers speedups ranging from 3% to 56 % in 11 out of the 26 SPEC2000 benchmarks. Our technique has been incorporated into Pixie and Spike, two products in Compaq's Tru64 Unix.
Chi-Keung Luk, Robert Muth, Harish Patil, Richard Weiss 0001, P. Geoffrey Lowney, Robert S. Cohn
ICS1
2001 Tolerating memory latency through software-controlled pre-execution in simultaneous multithreading processors
abstract
Hardly predictable data addresses in many irregular applications have rendered prefetching ineffective. In many cases, the only accurate way to predict these addresses is to directly execute the code that generates them. As multithreaded architectures become increasingly popular, one attractive approach is to use idle threads on these machines to perform pre-execution—essentially a combined act of speculative address generation and prefetching—to accelerate the main thread. In this paper, we propose such a pre-execution technique for simultaneous multithreading (SMT) processors. By using software to control pre-execution, we are able to handle some of the most important access patterns that are typically difficult to prefetch. Compared with existing work on pre-execution, our technique is significantly simpler to implement (e.g., no integration of pre-execution results, no need of shortening programs for pre-execution, and no need of special hardware to copy register values upon thread spawns). Consequently, only minimal extensions to SMT machines are required to support our technique. Despite its simplicity, our technique offers an average speedup of 24% in a set of irregular applications, which is a 19% speedup over state-of-the-art software-controlled prefetching.
Chi-Keung Luk
ISCA1
2001 Architectural and compiler support for effective instruction prefetching: a cooperative approach
abstract
Instruction cache miss latency is becoming an increasingly important performance bottleneck, especially for commercial applications. Although instruction prefetching is an attractive technique for tolerating this latency, we find that existing prefetching schemes are insufficient for modern superscalar processors, since they fail to issue prefetches early enough (particularly for nonsequential accesses). To overcome these limitations, we propose a new instruction prefetching technique whereby the hardware and softwarecooperateto hide the latency as follows. The hardware performs aggressive sequential prefetching combined with a novelprefetch filteringmechanism to allow it to get far ahead without polluting the cache. To hide the latency of nonsequential accesses, we propose and implement a novel compiler algorithm which automatically inserts instruction-prefetch the targets of control transfers far enough in advance. Our experimental results demonstrate that this new approach hides 50% or more tof the latecy remaining with the best previous techniques, while at the same time reduces the number of useless prefetches by a factor of six. We find that both theprefetch filteringandcompiler-inserted prefetchingcomponents of our design are essential and complementary, and that the compiler can limit the code expansion to only 9% on average. In addition, we show that the performance of our technique can be further increased by using profiling information to help reduce cache conflicts and unnecessary prefetches. From an architectural perspective, these performance advantages are sustained over a range of common miss latencies and bandwidth. Finally, our technique is cost effective as well, since it delivers performance comparable to (or even better than) that of larger caches, but requires a much smaller hardware budget.
Chi-Keung Luk, Todd C. Mowry
ACM Trans. Comput. Syst.1
2000 Understanding Why Correlation Profiling Improves the Predictability of Data Cache Misses in Nonnumeric Applications
abstract
Latency-tolerance techniques offer the potential for bridging the ever-increasing speed gap between the memory subsystem and today's high-performance processors. However, to fully exploit the benefit of these techniques, one must be careful to apply them only to the dynamic references that are likely to suffer cache misses-otherwise the runtime overheads can potentially offset any gains. In this paper, we focus on isolating dynamic miss instances in nonnumeric applications, which is a difficult but important problem. Although compilers cannot statically analyze data locality in nonnumeric applications, one viable approach is to use profiling information to measure the actual miss behavior. Unfortunately, the state-of-the-art in cache miss profiling (which we call summary profiling) is inadequate for references with intermediate miss ratios-it either misses opportunities to hide latency, or else inserts overhead that is unnecessary. To overcome this problem, we propose and evaluate a new profiling technique that helps predict which dynamic instances of a static memory reference will hit or miss in the cache: correlation profiling Our experimental results demonstrate that roughly half of the 21 nonnumeric applications we study can potentially enjoy significant reductions in memory stall time by exploiting at least one of the three forms of correlation profiling we consider: control-flow correlation, self correlation, and global correlation. In addition, our detailed case studies illustrate that self correlation succeeds because a given reference's cache outcomes often contain repeated patterns and control-flow correlation succeeds because cache outcomes are often call-chain dependent. Finally, we suggest a number of ways to exploit correlation profiling in practice and demonstrate that software prefetching can achieve better performance on a modern superscalar processor when directed by correlation profiling rather than summary profiling information.
Todd C. Mowry, Chi-Keung Luk
IEEE Trans. Computers2
1999 Memory Forwarding: Enabling Aggressive Layout Optimizations by Guaranteeing the Safety of Data Relocation
abstract
By optimizing data layout at run-time, we can potentially enhance the performance of caches by actively creating spatial locality, facilitating prefetching, and avoiding cache conflicts and false sharing. Unfortunately, it is extremely difficult to guarantee that such optimizations are safe in practice on today's machines, since accurately updating all pointers to an object requires perfect alias information, which is well beyond the scope of the compiler for languages such as C. To overcome this limitation, we propose a technique called memory forwarding which effectively adds a new layer of indirection within the memory system whenever necessary to guarantee that data relocation is always safe. Because actual forwarding rarely occurs (it exists as a safety net), the mechanism can be implemented as an exception in modern superscalar processors. Our experimental results demonstrate that the aggressive layout optimizations enabled by memory forwarding can result in significant speedups-more than twofold in some cases-by reducing the number of cache misses, improving the effectiveness of prefetching, and conserving memory bandwidth.
Chi-Keung Luk, Todd C. Mowry
ISCA1
1999 Automatic Compiler-Inserted Prefetching for Pointer-Based Applications
abstract
As the disparity between processor and memory speeds continues to grow, memory latency is becoming an increasingly important performance bottleneck. While software-controlled prefetching is an attractive technique for tolerating this latency, its success has been limited thus far to array-based numeric codes. In this paper, we expand the scope of automatic compiler-inserted prefetching to also include the recursive data structures commonly found in pointer-based applications. We propose three compiler-based prefetching schemes, and automate the most widely applicable scheme (greedy prefetching) in an optimizing research compiler. Our experimental results demonstrate that compiler-inserted prefetching can offer significant performance gains on both uniprocessors and large-scale shared-memory multiprocessors.
Chi-Keung Luk, Todd C. Mowry
IEEE Trans. Computers1
1998 Cooperative Prefetching: Compiler and Hardware Support for Effective Instruction Prefetching in Modern Processors
abstract
Instruction cache miss latency is becoming an increasingly important performance bottleneck, especially for commercial applications. Although instruction prefetching is an attractive technique for tolerating this latency, we find that existing prefetching schemes are insufficient for modern superscalar processors since they fail to issue prefetches early enough (particularly for non-sequential accesses). To overcome these limitations, we propose a new instruction prefetching technique whereby the hardware and software cooperate to hide the latency as follows. The hardware performs aggressive sequential prefetching combined with a novel prefetch filtering mechanism to allow it to get far ahead without polluting the cache. To hide the latency of non-sequential accesses, we propose and implement a novel compiler algorithm which automatically inserts instruction prefetch instructions into the executable to prefetch the targets of control transfers far enough in advance. Our experimental results demonstrate that this new approach results in speedups ranging from 9.4% to 18.5% (13.3% on average) over the original execution time on an out-of-order superscalar processor; which is more than double the average speedup of the best existing schemes (6.5%). This is accomplished by hiding an average of 71% of the original instruction stall time, compared with only 36% for the best existing schemes. We find that both the prefetch filtering and compiler-inserted prefetching components of our design are essential and complementary, that the compiler can limit the code expansion to less than 10% on average, and that our scheme is robust with respect to variations in miss latency and bandwidth.
Chi-Keung Luk, Todd C. Mowry
MICRO1
1997 Predicting Data Cache Misses in Non-Numeric Applications through Correlation Profiling
abstract
To maximize the benefit and minimize the overhead of software-based latency tolerance techniques. We apply them precisely to the set of dynamic references that suffer cache misses. Unfortunately, the information provided by the state-of-the-art cache miss profiling technique (summary profiling) is inadequate for references with intermediate miss ratios-it results in either failing to hide latency, or else inserting unnecessary overhead. To overcome this problem, we propose and evaluate a new technique, correlation profiling, which improves predictability by correlating the caching behavior with the associated dynamic context. Our experimental results demonstrate that roughly half of the 22 non-numeric applications we study can potentially enjoy significant reductions in memory stall time by exploiting at least one of the three forms of correlation profiling we consider.
Todd C. Mowry, Chi-Keung Luk
MICRO2
1996 Compiler-Based Prefetching for Recursive Data Structures
abstract
Software-controlled data prefetching offers the potential for bridging the ever-increasing speed gap between the memory subsystem and today's high-performance processors. While prefetching has enjoyed considerable success in array-based numeric codes, its potential in pointer-based applications has remained largely unexplored. This paper investigates compiler-based prefetching for pointer-based applications---in particular, those containing recursive data structures. We identify the fundamental problem in prefetching pointer-based data structures and propose a guideline for devising successful prefetching schemes. Based on this guideline, we design three prefetching schemes, we automate the most widely applicable scheme (greedy prefetching) in an optimizing research compiler, and we evaluate the performance of all three schemes on a modern superscalar processor similar to the MIPS R10000. Our results demonstrate that compiler-inserted prefetching can significantly improve the execution speed of pointer-based codes---as much as 45% for the applications we study. In addition, the more sophisticated algorithms (which we currently perform by hand, but which might be implemented in future compilers) can improve performance by as much as twofold. Compared with the only other compiler-based pointer prefetching scheme in the literature, our algorithms offer substantially better performance by avoiding unnecessary overhead and hiding more latency.
Chi-Keung Luk, Todd C. Mowry
ASPLOS1
1995 I+: A Multiparadigm Language for Object-Oriented Declarative Programming
Kam-Wing Ng, Chi-Keung Luk
Comput. Lang.2
1995 A survey of languages integrating functional, object-oriented and logic programming
Kam-Wing Ng, Chi-Keung Luk
Microprocess. Microprogramming2
1993 The design of a multiparadigm programming language: I
Kam-Wing Ng, Chi-Keung Luk
Microprocess. Microprogramming2