|
I'm a second-year Ph.D. student in the Computer Science and Engineering
department at the University of Washington in Seattle. I'm interested in
a variety of topics including programming languages, compilers, operating systems,
and distributed systems. Currently I work on improving multiprocessor programmability
with Luis Ceze (my advisor), Dan Grossman, and Steve Gribble as part
the Sampa and WASP groups.
Previously I was a student in the Computer Science department at UCLA,
where I worked with Eddie Kohler on extensible compilers. I earned a B.S. in 2005
and a M.S. in 2007 from UCLA, both in Computer Science.
Contact
| E-mail: |
|
| Office: |
CSE 618 |
| Address: |
Tom Bergan
Computer Science & Engineering, University of Washington
Box 352350
Seattle, WA 98195-2350
|
CV available on request
|
Deterministic MultiProcessing
Multithreaded programs execute nondeterministically in today's hardware
and software environments. Each time a multithreaded program runs, its
instructions may interleave in a different way, causing each run to produce
potentially different outputs even if supplied with the same input. This
lack of reproducibility complicates testing, debugging, and replication for
fault-tolerance. We argue that nondeterminism is unnecessary: shared-memory
programs should always behave deterministically.
See also the
DMP homepage.
| CoreDet: A Compiler and Runtime System for Deterministic Multithreaded Execution |
| Tom Bergan, Owen Anderson, Joe Devietti, Luis Ceze, Dan Grossman |
March, 2010 |
| ASPLOS 2010 (to appear) |
|
[+abstract]
|
|
The behavior of a multithreaded program does not depend only on its
inputs. Scheduling, memory reordering, timing, and low-level
hardware effects all introduce nondeterminism in the execution
of multithreaded programs. This severely complicates many tasks,
including debugging, testing, and automatic replication. In this
work, we avoid these complications by eliminating their root cause:
we develop a compiler and runtime system that runs arbitrary
multithreaded C/C++ POSIX Threads programs deterministically.
A trivial non-performant approach to providing determinism is simply
deterministically serializing execution. Instead, we
present a compiler and runtime infrastructure that ensures
determinism but resorts to serialization rarely, for handling
interthread communication and synchronization. We develop two basic
approaches, both of which are largely dynamic with performance
improved by some static compiler optimizations. First, an
ownership-based approach detects interthread communication via an
evolving table that tracks ownership of memory regions by threads.
Second, a buffering approach uses versioned memory and employs a
deterministic commit protocol to make changes visible to other
threads. While buffering has larger single-threaded overhead than
ownership, it tends to scale better (serializing less often). A
hybrid system sometimes performs and scales better than either
approach individually.
Our implementation is based on the LLVM compiler infrastructure. It
needs neither programmer annotations nor special hardware. Our
empirical evaluation uses the PARSEC and SPLASH2 benchmarks and
shows that our approach scales comparably to nondeterministic
execution.
|
Xoc
Xoc is an extension-oriented compiler for C which features an extensible
GLR parser, concrete syntax manipulation, and pass-free lazy compilation.
To the best of our knowledge, Xoc is the first compiler to support an
extension-oriented paradigm, meaning that the user can
select which independently-written language extensions to compose at
compiler run-time, as opposed to the traditional monolithic extensible
paradigm, in which each extension represents a whole new compiler.
Extensions can extend both the syntax and the semantics of C, and are
intended to be both terse and easy to write without knowledge of the
internals of Xoc.
[Description authored by Austin Clements.]
See also the
Xoc homepage.
| Xoc, an Extension-Oriented Compiler for Systems Programming |
| Russ Cox, Tom Bergan, Austin Clements, Frans Kaashoek, Eddie Kohler |
March, 2008 |
| ASPLOS 2008 |
|
[+abstract]
[acm] [pdf]
|
|
Today's system programmers go to great lengths to extend the languages in
which they program. For instance, system-specific compilers find errors in
Linux and other systems, and add support for specialized control flow to Qt
and event-based programs. These compilers are difficult to build and
cannot always understand each other's language changes.
However, they can greatly improve
code understandability and correctness, advantages that should be
accessible to all programmers.
We describe an extension-oriented compiler for C called xoc.
An extension-oriented compiler,
unlike a conventional extensible compiler,
implements new features via many small extensions
that are loaded together as needed.
Xoc gives extension writers full control over program syntax and
semantics while hiding many compiler internals. Xoc
programmers concisely define powerful compiler extensions that, by
construction, can be combined; even some parts of the base compiler, such
as GNU C compatibility, are structured as extensions.
Xoc is based on two key interfaces. Syntax patterns allow extension writers to
manipulate language fragments using concrete syntax. Lazy
computation of attributes allows extension writers to use the results of
analyses by other extensions or the core without needing to worry about
pass scheduling.
Extensions built using xoc include xsparse, a 345-line
extension that mimics Sparse, Linux's C front end,
and xlambda, a 170-line extension that adds function
expressions to C.
An evaluation of xoc using these and 13 other extensions
shows that xoc extensions
are typically more concise than equivalent extensions written for
conventional extensible compilers and that it is possible to compose
extensions.
|
| Typmix: A Framework For Implementing Modular, Extensible Type Systems |
| Tom Bergan |
September, 2007 |
| Master's thesis (UCLA) |
|
[+abstract]
[pdf]
|
|
A large body of research has been devoted to designing and developing
type systems of varying complexity, power, and purpose.
Unfortunately, programmers who wish to use these type systems are
at the whim of language designers; relatively few of these ideas have found
their way into mainstream programming languages.
Extensible compilers promise
to provide developers the power to customize their languages, including
their type systems, as they see fit.
While these compilers are indeed powerful, they tend to be large,
complex systems that take a significant effort to learn.
In this thesis we present TypMix, a modular and easy-to-use
framework for implementing type systems that is suitable for inclusion
inside an extensible compiler.
We describe the two key components of TypMix:
an attribute langauge for declaring scoping rules,
and a small logic language for declaring typing rules.
We discuss how these components can be implemented inside an existing
extensible compiler, and
we demonstrate how they can be used to create and extend type systems
by studying their application to both an
ML-like language and a Java-like langauge.
|
Fun