Professional


This page lists all the computer related jobs I've held. (or download a Printable Resume)



Graduate Research Assistant, University of Colorado, Boulder, (January 2004 - July 2011)
Participated in a number of funded research projects.  Highlights include:
  • Designed a low-level representation for fine-grained parallelism for the LLVM program representation.
  • Designed and implemented a high performance just-in-time compiler and runtime system for parallel stream processing using the LLVM toolchain. Input languages include C/C++, JavaScript, and StreamIt. Hardware targets include multicore CPUs and GPUs.
  • Investigated the use of graphics processors and field-programmable gate arrays for general purpose computing.
  • Built a configurable software defined radio transmitter capable of sending 802.11g data frames as well as custom OFDM waveforms.  This platform utilized a hybrid CPU/FPGA hardware platform and a wide variety of programming tools (C++,Python,VHDL,Matlab).
  • Implemented a highly configurable wireless networking driver in the Linux kernel as well as experimental MAC layers using the resulting framework.  Conducted research using this software to control a novel directional antenna platform as well as off the shelf hardware.
  • Implemented configurable multihoming for the VTun tunneling software using SCTP.  Found a bug in the Linux SCTP protocol implementation; my tiny contribution to Linux.

Graduate Intern
, Intel, Hillsboro, OR (May 2009 - September 2009)
Investigated dynamic binary optimizations for a hypothetical processor with instructions supporting atomic regions. Added support for these atomic regions, instructions, and transformations to the LLVM compiler. Worked as part of a path-finding team investigating binary translation technologies. Produced detailed reports describing the characteristics and performance of different binary translation systems on specific benchmarks.


Contractor/Consultant, National Semiconductor, Longmont, CO (May 2000 - July 2003)
Contracted as part of a small team to study an implementation of the x86 processor architecture through simulation. Led the development of a software simulator used to model an existing processor pipeline specification and modifications to that design. Designed and implemented dynamic software translation of x86 instructions to a RISC-like instruction set as input to the pipeline simulator. Correlated simulator results with actual hardware to measure simulator accuracy. Maintained an active base of more than ten thousand lines of code. Integrated simulator code into larger software packages.

Undergraduate Research Assistant, Advanced Computer Architecture Lab, University of Michigan, Ann Arbor, MI (October 1999 - May 2000)
Assisted in the development of the MIRV C compiler.  Analyzed compiled code for performance problems.  Researched, implemented, and documented new optimizations in the compiler code generator.  Presented results to peers.

Contractor/Consultant, National Semiconductor, Longmont, CO (April 1999 - October 1999)
Contracted as part of a small team to study designs for a low power implementation of the x86 processor architecture.  Developed software tools to examine the dynamic execution characteristics of programs running on the target architecture.

Programmer, Space Physics Research Lab, University of Michigan, Ann Arbor, MI (October 1998 - June 1999)
Assisted in the development of data collection and processing software for the TIMED Doppler Interferometer (TIDI) satellite instrument.  Designed, implemented, and documented automated testing software and used this software to help find and fix bugs in production code.  Assisted hardware engineers in plotting of test results.

Network Support Technician, Residential Ethernet Program, University of Michigan, Ann Arbor, MI (September 1996 - May 1997)
Provided network support and troubleshooting for dorm residents.