Here are some highlights from professional and research experiences I've
had in computer science, both on- and off-campus.
I also have a CV.
BlueGene/L System Software
Since graduation, I have been working at IBM Watson Research on the Blue Gene system software team. We are currently concentrating on BlueGene/L, a high density, massively parallel system-on-a-chip system with a 360-teraflop theoretical peak, for LLNL/ASCI. My work has focused on communications and operating systems issues: creating device drivers for the custom network interconnects; porting Linux for running on BG/L's "I/O nodes"; exploring dual-core modes of operation that best divide communication and computation between the two processors on each node; performing MPI collective operations using collective features built-in to our tree network.
Hardware arrived for the project in mid-2003, and we've recently watched our work go from simulators to silicon. Now, as we draw closer to the final assembly date (2005), our task of getting 65,536 nodes to scalably communicate has gone from a research question to a pressing performance-determining concern.
An Overview of the Blue Gene/L System Software Organization (distinguished paper award). George Almsi, Ralph Bellofatto, Jose Brunheroto, Calin Cascaval, Jos G. Castaos, Luis Ceze, Paul Crumley, C. Christopher Erway, Joseph Gagliano, Derek Lieber, Xavier Martorell, Jos E. Moreira, Alda Sanomiya, Karin Strauss. Euro-Par 2003: 543-555
An overview of the BlueGene/L Supercomputer. IBM Research and Lawrence Livermore National Laboratory. IEEE/ACM SC 2002: 1-22
Scalable Parallel I/O for Blue Gene
Over summer 2001, as part of IBM's Extreme Blue summer internship program, I was a member of a three-person team of interns assigned with the project of developing a parallel I/O system for Blue Gene, a planned petaFLOP-scale supercomputer. The project required us to work with researchers from IBM Watson Research and quickly learn a completely new architecture and operating system paradigm. Our project consisted of development on the "core" -- the cellular, million-processor supercomputer itself, for which I ended up writing some kernel code -- and the "host" -- a thousand-node Linux cluster working as a file server. The work was exclusively done in a POSIX/UNIX development enviroment: emacs, gdb, C/C++, etc.
Variable Window Methods for Stereo Disparity Determination
In the spring semester of my sophomore year, I took a graduate-level class, CS664: Machine Vision, a very mathematical class dealing with various problems in machine vision such as image restoration, object recognition, stereo matching, etc. The final assignment of the class was a short piece of original research, which I did in stereo matching (the process of using a "left" and "right" image to find out your distance from objects in your view). The paper describes a technique that draws variable windows around objects rather than less precise rectangles, as most algorithms do. Additional example images are available here.
OnShare File Manager (screenshot available)
In the spring of 2000, I took a contract job porting now-defunct dot-com startup OnShare LLC's peer-to-peer file-sharing client to Linux. However, their Windows version was completely unportable and I simply started from scratch, implementing the client/server hybrid from scratch. OnShare's system used a custom UDP and TCP protocol to communicate with a central server, but each client also acted as a full HTTP server, to enable users to simply browse and download files directly from other users in P2P fashion. I was the only developer and responsible for the entire project, from design to final binary packaging and delivery. The client went through one beta cycle and "version 1.0" was put on OnShare's website for use by its (by then, dwindling) userbase in May.
My first summer internship sent me, fresh from my freshman year, to Palo Alto startup VMware, Inc., then a new company formed by Stanford researchers. VMware's OS virtualization products allow Intel-based machines to run multiple operating systems at the same time (i.e. Windows and Linux). I quickly learned C, UNIX/Linux development (cvs, emacs, gdb, etc) in a matter of days while working on my first project, mucky networking stuff involving reading lots of raw ethernet packets. With each successive project -- modifying Linux kernel modules in VMware's networking code; porting those changes to Windows NT device drives (despite not knowing anything about coding for Windows, either); modifying the ISC's dhcpd server for use with VMware, then porting that to Windows NT again -- I found myself learning in droves, and in an environment filled with experts (Sam down the hall wrote and was in charge of BSD; Ed next door also wrote much of BSD, and identified the original Internet worm's fingerd mechanism).