Report from the
Compiler Subgroup
of the
NSF Workshop on New Challenges and Directions for Systems Research
Held at Washington University in St. Louis
31 July -- 1 August 1997

Participants:
With notes scribed by Michael Plezbert.
Process
Prior to the meeting, the participants corresponded by e-mail. Following a series of invited lectures at the meeting, the participants met for three hours, primarily to discuss new directions for programming language and compiler research that might support activities of other research areas. The next day, the participants reconvened briefly to talk about research activities within their area.
Summary
The area of programming languages and compilers continues to be a fertile area for research. In at least the following three areas, there is great potential for collaboration with other branches of systems research: flexible systems, high-performance computing on uni- and multi-processors, and ubiquitous computing.

Within programming languages and compilers, topics for interesting research include dynamic compilation; tools that enhance performance, code reuse, and code modification; techniques that accommodate various models of storage consistency and storage-hierarchy performance; and compiler support for programming on the WWW.

While some approaches may involve new applications for existing techniques (for example, dynamic code optimization), fresh approaches are required to address the challenges posed by tomorrow's platforms, computing environments, and applications.

Details
  1. Flexible systems

    1. Interactive system components with feedback (Plug and Sing)
      Computer components and subsystems should become capable of sharing information and changing their behavior to optimize overall system performance.
      Example: The storage subsystem might collect virtual memory performance data that could cause the running program to reorganize data to improve performance.
    2. Programmable hardware and network devices
      The compiler's view of the target should include not only the CPU, but also the storage and networking subsystems. Object code could then be deployed into these subsystems to coordinate and optimize their performance for a given program.
      Examples: The storage subsystem could offer several consistency models; storage and network subsystems could have programmable tracing hardware; prefetching could be accomplished by loading the appropriate code directly into the storage or network subsystem.
    3. Reconfigurability and liquid architecture
      The compiler might negotiate for an instruction set to optimize the performance of a given program. FPGAs might play a role in customizing the instruction set. Other elements might include caches parameterized by associativity, line size, and write-back policies; storage subsystems configurable with respect to consistency; and use of on-chip area for real-time code sequences.
  2. High performance

    1. Deep memory hierarchies
      Compilers need to generate code that can adapt to increasing disparity between small, fast storage and large, slow storage.
    2. Alternative storage consistency models
      Compilers may have new opportunities for optimization if the storage subsystems offer multiple consistency models.
  3. Ubiquitous computing

    1. Mobile code
      Compilers may assist in creating code that can be moved easily and reliably from platform-to-platform.
    2. Low power
      Compilers may generate instruction encodings and data movement to decrease power consumption.
    3. Embedded applications and real-time computing
      Compiler support in these areas is relatively meager, yet much new code is written in these areas.
    4. Compiler support for WWW programming
      The WWW is currently a medium for code distribution: Java class files can be sent for execution on any platform featuring a Java interpreter. New research might focus on new compilation technologies for programming the WWW. There is a natural synergy between research on compiling Web programs and with research on dynamic compilation and compiling for reconfigurable hardware. In addition, there are some new possibilities that are unique to the Web e.g., collecting program profile/performance statistics for the same program running on multiple platforms on the Web so as to obtain diagnostic information and further optimize performance.