GlassBox is a National Science Foundation-funded project with a goal of enabling application developers to improve performance on future high end computing (HEC) machines for their scientific and engineering processes. The basic approach of the project is to offer an open, transparent software infrastructure - a Glass Box system - for creating and tuning large-scale, parallel applications. “Opening up” the tools and services used to create and evaluate peta- and exa-scale codes will involve developing interfaces and methods that make available tool-internal information and the tools will be accessible for new performance management services that improve developer productivity and code efficiency. The project explores the information that can be shared across the software stack used in HEC machines and develops methods for analyzing program information, performance data and tool knowledge. The resulting Glass Box system will allow developers to better assess the performance of their parallel codes. Tool creators can use the performance data to create new analysis and optimization techniques. System developers can also better manage multicore and machine resources at runtime, using JIT compilation and binary code editing to exploit the evolving hardware. Working with the `Keeneland' NSF Track II machine and industry partners, the project will create new performance monitoring tools, compiler methods and system-level resource management techniques. The effort is driven by the large-scale codes running on today's petascale machines. Its broader impact is derived from the interactions with technology developers and application scientists as well as from its base in three universities with diverse student populations. The team leads are Karsten Schwan at Georgia Tech; Allen Malony at the University of Oregon; and Barbara Chapman at the University of Houston. Team members from Georgia Tech include Sudhakar Yalamanchili, Greg Eisenhauer and Matthew Wolf.

Goals and Ongoing Research

- To address the needs of future high end applications, integrate across typically silo’ed toolchain elements: programming and performance tools, runtimes, and operating systems - Develop runtime and tool interfaces, demonstrate high value interactions. - Automate cross-layer interactions, driven by changes in program behavior and execution environment (performance, reliability).