Benjamin Ylvisaker

Visiting Assistant Professor
Computer Science Department
Swarthmore College
Science Center 251
610-690-6872 x6872
CV (updated autumn, 2013)

I moved to Colorado College.


2014 Spring CS21: Intro to Computer Science
CS93x: Programming Languages Directed Reading
2013 Autumn CS97: Senior Conference
2013 Spring CS3110: Data Structures and Functional Programming
2012 Autumn CS5150: Software Engineering
2010 Winter Computer Programming 1 and 2. I taught these courses at The University of Danang in Vietnam as part of a curriculum exchange program. The basic course designs can be found here and here.
2008 Summer CSS448: Translation of Programming Languages. The course website is no longer available, but it was similar to this offering.
2007 Autumn CSE370: Introduction to Digital Design


My research interests are mostly in programming languages, software engineering and embedded systems.

One of my current projects is about better ways to write responsive interactive software. You can find that over at the Charcoal site.

I have done some work on automatic performance tuning of software and intend to return to that topic when the time and collaborators are right. A dump of the code that I wrote most during graduate school can be found at GitHub.

The current state of tools/frameworks/languages for parallel programming is pretty sorry, especially from the perspective of regular Jane and Joe programmers who want to get a little parallel speed boost, but aren't that invested in it. My hunch is that the libraries that support a task queue or fork/join style are on the right track (TPL, PPL, TBB, Cilk, Fork/Join, GCD). However, I think the workers should really be processes (isolated memory by default), rather than threads (shared memory by default). If this idea sounds fun, drop me a line, I'm looking for a collaborator.

I'm excited about the emergence of cheap, small, low-power, general purpose computing platforms like the RaspberryPi and Arduino. Again, the angle that most interests me is the regular Jane and Joe programmers of the world who aren't going to pick up a soldering iron or learn about statecharts or realtime scheduling algorithms in a million years, but can get into the embedded computing game now. What tools, languages and methods will help these developers strike a workable balance between reliability, productivity and performance?


Previously I worked at GrammaTech where I primarily worked on advanced static analyses for detecting concurrency bugs. Most of this work is proprietary, and therefore is unpublished.

In graduate school I was a member of the Mosaic group at The University of Washington. I designed and implemented a C-level programming language for parallel coprocessor architectures like FPGAs and GPUs. I also worked with a substantial number of undergraduate students on CPU-intensive demonstration applications, drawn from a variety of scientific and media processing domains.

Way back in the day I participated in the PipeRench project.


My Google Scholar profile.


  • When Threads Attack. Invited talk at the University of Montana. October, 2013.
  • Hazards of Multi-threaded and Multi-core Software Development. An EETimes-sponsored webinar. March, 2012.
  • Tracing Data Flows to Find Concurrency Errors. Presented at The Workshops on Spacecraft Flight Software, hosted by The Johns Hopkins University Applied Physics Laboratory in October, 2011.
  • Programmer-Guided Performance Tuning with Explicit Knobs, Cascadia Workshop on FPGAs, August, 2008.
  • Macah: A ‘C-Level’ Programming Language for Kernel Acceleration on Hybrid Micro-Parallel Architectures, Poster at Languages, Compilers and Tools for Embedded Systems (LCTES), June, 2007 (with B Van Essen, C Ebeling, and D Grossman).
  • Macah: Simplifying the Programming of Kernel Accelerators with Judicious Automation, Cascadia Workshop on FPGAs, August, 2007.
  • A Type Architecture for Micro-Parallel Computers, poster at ACM/SIGDA International Symposium on Field-Programmable Gate Arrays, February, 2006 (with Brian Van Essen).


  • An Operational Semantics for Explicitly Pipelineable Streaming Languages. Benjamin Ylvisaker, Dan Grossman.
  • Generalized Loop Flattening for Pipelining Arbitrary Loopy Control Flow. Benjamin Ylvisaker, Carl Ebeling, Scott Hauck.


... in progress ...