onstrated the potential of offline empirical search to tune the performance
of application code to a specific architecture. Often called “autotuning,” this
approach has produced results competitive with hand tuning in such well-studied domains as linear algebra and
signal processing. The basic approach
is that either the application programmer expresses or the compiler derives a
well-defined search space of alternative
implementations for a program that is
then explored systematically by compiler and runtime tools so the optimization
process is able to achieve results comparable to hand tuning. The challenge is to
extend the approach to parallel systems
and multicore processors, as well as to
integrate the technology into a coherent,
easy-to-use system that applies to a large
number of complex applications.
Language and compiler technology supporting autotuning will greatly
facilitate the construction of libraries
implementing numerical and symbolic algorithms for a variety of domains,
building on examples from self-tuning
linear algebra and signal-processing
libraries. In addition to encapsulating
efficient algorithms that can be implemented by only a handful of compiler
experts and used by a vast number of
nonexpert programmers, these libraries can contribute to the design of future high-level languages and abstractions by exposing new and interesting
patterns for expressing computation.
Furthermore, describing the characteristics of these libraries in a machine-usable format, such that compilers
understand the semantic properties
and performance characteristics of the
library routines, will enable the implementation of interactive tools that
analyze and make recommendations
about the incorporation of library routines in their codes.
An even more significant challenge is
for compiler researchers to extend this
approach to online tuning. Evaluating
the performance of different versions of
a program by running them directly on
the native machine is unlikely to scale
to large numbers of cores or to large
programs, even in an offline setting.
One strategy is for compiler researchers
to develop tractable machine and program abstractions to permit efficient
evaluation of program alternatives,
since what’s needed is only the relative
Breakthroughs
in compiler
technology are
essential to
making parallel
programming
mainstream.
64 CommunICatIons of the aCm | feBRuaRY2009 | vol. 52 | No. 2
performance of program alternatives,
rather than their absolute performance.
The literature has proposed a variety of
parallel computing models (such as the
Parallel Random Access Machine, or
PRAM, model for analyzing parallel algorithms and the LogP model for communication), but they are too abstract to
serve as useful targets for performance
optimization by compilers. However,
through interactions with the theory
and architecture communities, new
models that more accurately capture
today’s multicore platforms should be
developed. Such models could also be
the foundation of a systematic theory of
program parallelization and optimization for performance, power, throughput, and other criteria.
Correctness and security. The ability to detect coding defects has always
been an important mission for compilers. In facilitating programming,
high-level languages both simplified
the representation of computations
and helped identify common program
errors, including undeclared variable
uses and a range of semantic errors
pinpointed through increasingly sophisticated type checking. Much more
can and must be done with program
analysis to help avoid incorrect results
and security vulnerabilities.
Regarding software security, Steve
Lipner, senior director of security engineering strategy in Microsoft’s Trustworthy Computing Group, said in a private
communication: “With the beginning
of the Trustworthy Computing initiative
in 2002, Microsoft began to place heavy
emphasis on improving the security
of its software. Program-analysis tools
have been key to the successes of these
efforts, allowing our engineers to detect
and remove security vulnerabilities before products are released. Today, Microsoft’s engineering practices for security
are formalized in the Security Development Lifecycle, or SDL, which mandates
application of program-analysis tools
and security-enhancing options. These
tools and compiler options are the
product of many years of research in
program analysis and compilers, which
has proven invaluable in addressing the
difficult security challenges the industry
faces. Microsoft’s security teams eagerly
look forward to the fruits of continued
research in compiler technology and associated improvements in the effective-