As parallelism in microprocessors becomes mainstream, new prog-
ramming languages and environments are emerging to meet the challenges
of parallel programming. To support research on these languages, we
are developing a low-level language infrastructure called
Pillar(derived from Parallel Implementation
Language). Although Pillar programs are intended to be automatically
generated from source programs in each parallel language, Pillar
programs can also be written by expert programmers. The language is
defined as a small set of extensions to C. As a result, Pillar is
familiar to C programmers, but more importantly, it is practical to
reuse an existing optimizing compiler like gcc or Open64 to implement
a Pillar compiler.
Pillar's concurrency features include constructs for threading,
synchronization, and explicit data-parallel operations. The threading
constructs focus on creating new threads only when hardware resources
are idle, and otherwise executing parallel work within existing
threads, thus minimizing thread creation overhead. In addition to the
usual synchronization constructs, Pillar includes transactional
memory. Its sequential features include stack walking, second-class
continuations, support for precise garbage collection, tail calls, and
seamless integration of Pillar and legacy code. This paper describes
the design and implementation of the Pillar software stack, including
the language, compiler, runtime, and high-level
converters(that translate high-level language programs into
Pillar programs). It also reports on early experience with three
high-level languages that target Pillar.