Research
A summary of my research projects.
Performance Optimization for Heap-Intensive Applications
A small fraction of heap objects often accounts for most memory accesses and data cache misses. PreFix improves data locality by identifying these hot objects precisely and placing them together in a preallocated memory region. Profile-guided instrumentation uses allocation context derived from dynamic object identifiers to select predetermined locations, allowing objects to be reordered across allocations according to their access patterns. PreFix also reuses preallocated space for objects whose lifetimes are not expected to overlap. Across 13 heap-intensive applications, it reduces execution time by 21.7% on average, compared with 7.3% for HDS and 14% for HALO.
PreFix identifies hot objects and places them together in a profile-guided order.
Binary Code Size Reduction
DeduBB reduces binary code size by sharing repeated basic blocks across functions and modules after linking. Its save-and-jump mechanism supports code patterns, including stack-manipulating instructions, that conventional function outlining cannot readily handle. Implemented in BOLT and Propeller, DeduBB scales to large applications and uses execution profiles to focus deduplication on cold blocks, limiting performance overhead. Experiments on Arm and x86 show code size reductions of 1.55% to 18.63% on benchmarks already optimized for size. Profile-guided selection retains more than 80% of the maximum savings without affecting performance in the reported experiments.
Repeated code becomes one shared copy; each execution resumes at its original continuation.
AI-Guided Interprocedural Code Layout Optimization
Frequently executed code can remain scattered across functions even after conventional code layout optimization. AI-Propeller improves instruction locality by placing frequently connected basic blocks from different functions close together. Built on Propeller, it uses the Magellan framework to combine AlphaEvolve's evolution of layout heuristics with Vizier's tuning of their numerical parameters. Candidate layouts are evaluated on real hardware, and measured performance guides the search. This enables fine-grained interprocedural layouts while preserving call-return semantics and build scalability. AI-Propeller improves performance by 1.6% on LLVM Clang and 0.23% on a warehouse-scale Search workload over Ext-TSP, extracting additional gains from binaries already optimized with feedback-directed optimization and ThinLTO.