Vanity shot  

Benjamin Ylvisaker

Assistant Professor
Math & Computer Science Department
Colorado College
Tutt Science Center 201
CV (updated 2013 autumn)

Ben and Fennec

Welcome to my Colorado College page.


18-19 Block 8 Cryptography (co-taught with Stefan Erickson)
Block 7 Algorithms
Block 6 Computer Organization
Block 4 Senior Projects (co-taught with Dan Ellsworth)
Block 3 Computer Organization
Block 1 Computational Thinking (co-taught with Richard Wellman)
17-18 Block 8 Computer Organization
Block 7 Algorithms
Block 5 Computer Organization
16-17 Block 8 Programming Languages
Block 7 Computer Organization
Block 6 Algorithms
Block 4 Computer Organization
Block 1 Computational Thinking (co-taught with Janet Burge)
15-16 Block 7 Algorithms
Block 5 Computer Organization
Block 3 Intro to CS
Block 2 App Design
Block 1 Web Services (co-taught with Richard Koo)
14-15 Block 8 App Design
Block 7 Intro to CS
Block 6 Computer Organization
Block 4 Information Security & Privacy
Block 2 Distributed Computing
Block 1 Intro to CS (co-taught with Matthew Whitehead)
13-14 Spring CS21: Intro to CS
CS93x: Programming Languages Directed Reading
Autumn CS97: Senior Conference
12-13 Spring CS3110: Data Structures and Functional Programming
Autumn CS5150: Software Engineering
09-10 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.
07-08 Summer CSS448: Translation of Programming Languages. The course website is no longer available, but it was similar to this offering.
06-07 Autumn CSE370: Introduction to Digital Design

Short Notes and Essays

The motivation for monads

Call/return microbenchmarking and call frame allocation

The tension between threads and stacks


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 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.

Between college and graduate school I worked at Chameleon Systems and Silicon Möbius, a couple of doomed startups that made highly parallel accelerators.

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 ...