SCAF stands for Scheduling and Allocation with Feedback.

SCAF is a multiprogramming strategy for malleable multithreaded processes which aims to improve system efficiency.

The research-oriented implementation released is Linux-only, although the version used for the conference paper also targeted Solaris.

Documentation and downloads can be found on the SCAF website:


AESOP is an auto-parallelizing compiler for shared-memory computers which I helped develop. AESOP began as part of a larger DARPA-funded project, with my efforts later funded by a NASA Space Technology Research Fellowship.

AESOP can compile C, C++, and Fortran code, and is able to use both the Clang and GCC’s frontends. In other words, it can be used as a drop-in replacement for the clang, clang++, gcc, g++, and gfortran utilities. Optimization is done at link-time. AESOP is unique as a research effort in that it is usable on non-trivial programs. (Note that this is not the same thing as claiming that it is production-ready.)

AESOP is no longer very actively maintained, but documentation and downloads can be found on its website:

There is also a live, in-browser compilation demo available on the site:

Linux with enhanced cache management heuristics for Tile-GX

Vanilla Linux with Tilera’s patches for Tile-Gx, and my patches with improved cache management heuristics for forking multithreaded processes. This work was motivated by SCAF’s serial experiments because they begin life as a fork of a multithreaded process.

Informally I call the changes involved “polite stack rehoming” since it tries to avoid rudely rehoming another thread’s stack out from under a processor, which can have a disastrous effect on performance.

I have applied the changes (basically the same) to a few different versions of Linux:

Minor contributions to OpenAFS (a WAN distributed filesystem)

I’m particularly interested in getting the FreeBSD client into better shape.

I’m testing some experimental changes which can be found as port patches in my fork of the freebsd-ports tree.

As of October 2016, the changes in these patches allow the FreeBSD client to successfully run some intensive operations, such as reading/writing very large files, and bonnie++ benchmarking runs. However, it is not yet stable enough to put your HOME for a desktop machine in AFS: there will be lockups and kernel panics.

Branches in this ports tree contain experimental support for things like VIMAGE and building on FreeBSD 11/12. (The latter is definitely not in good shape, but at least compiles.)

Minor contributions to other projects

Other projects which I have made minor contributions to (in no particular order) so that I can remember:

Revival of PAPI for niagara2 on Solaris 11.2

I’m pretty sure I was the last person using PAPI with niagara2, but I revived PAPI for niagara2 (UltraSparc T2) on Solaris 11.2 after some changes by Oracle broke things.

See the changes in tcreech/papi-4.0.0–64-solaris11.2 on bitbucket.

Bug Reports

I have contributed a few bug reports to open-source projects, some with small patches included.

Port of FreeBSD’s “stdbuf” to OS X

See the code in tcreech/stdbuf-osx on bitbucket.