Home

About Me

I am currently a PhD student at the University of Delaware studying Computer and Information Science. I'm a research assistant in John Cavazos' lab working with compilers. My research interests currently focus on high-level languages targeting GPU accelerators, generating an OpenCL backend for Intel multicore targets for those high-level languages, and employing template metaprogramming (TMP) in producing efficient, vectorized code for a variety of data objects in C++.

Scouting

I have been an active member of the Boy Scouts of America since the age of seven. I earned the rank of Eagle Scout on October 3rd, 2006. After turning eighteen I became an Assistant Scoutmaster for Troop 146 located in Conestoga, Pennsylvania. I thoroughly enjoy the outdoors; I love hiking and camping. More importantly I enjoy helping others, even with trivial tasks. Beginning in May 2010 I have had to take a break from Scouting due to an increase workload in both courses and research.

Activities

Current

  • Research Assistant at University of Delaware
  • PhD Student at University of Delaware

Past

  • Teaching Assistant at University of Delaware
  • Student System Administrator at Millersville University Department of Computer Science
  • Software Engineer for Digital Indigo Technologies
  • Undergraduate Student of Computer Science at Millersville University
  • Team Captain of Millersville University's Cyber Defense Team
  • Team Captain of Millersville University's Programming Team
  • Team Member of Millersville University's Cyber Defense Team
  • Team Member of Millersville University's Programming Team
  • Group Tutor for Millersville University Department of Computer Science
  • Lab/Exam Grader for Millersville University Department of Computer Science
  • Lab Consultant for Millersville University Department of Computer Science
  • SafetyNET Student Technician at Millersville University
  • Technology Help Desk Phone Operator at Millersville University
Education

Curriculum Vitae

I have my curriculum vitae available as a PDF. The link is available at the top of the site in the header. It was created using the moderncv package found in any recent texlive distribution. The default font and coloring didn't appeal to me, so I modified the package to use Source Sans Pro (the new open source front from Adobe) and switch to a darker variation of red. Conveniently my website uses the same font and color.

Graduate

I began my graduate studies at Delaware during the summer of 2011 as a research assistant for Michela Taufer. I attended SuperComputing 2011 as a student volunteer and thoroughly enjoyed my first conference. I switched labs after my first year to John Cavazos' lab and have been there since. Beginning in fall 2012 I am now a teaching assistant for the department. Coursework up to this point has focused in algorithms, computer architecture, graphics, logic, networks, and compilers. I am busy preparing for the preliminary exam I am scheduled to take January 2013.

Undergraduate

I completed my undergraduate degree in Computer Science at Millersville University. I graduated from Millersville in 2011. Elective coursework was in graphics, networks, mobile programming, software engineering, artificial intelligence, database management, and parallel programming. I also worked with Gary Zoppetti and Roger Webster on research projects while at Millersville.

Research
Accelerating Financial Applications on the GPU

The QuantLib library is a popular library used for many areas of computational finance. In this work, the parallel processing power of the GPU is used to accelerate QuantLib financial applications. Black-Scholes, Monte-Carlo, Bonds, and Repo code paths in QuantLib are accelerated using hand-written CUDA and OpenCL codes specifically targeted for the GPU. Additionally, HMPP and OpenACC versions of the applications were created to drive the automatic generation of GPU code from sequential code. The results demonstrate a significant speedup for each code using each parallelization method. We were also able to increase the speedup of HMPP-generated code with auto-tuning.

This research was accepted to the Sixth Workshop on General Purpose Processing Using GPUs (GPGPU6). A pdf of our paper (collaboration with Scott Grauer-Gray, Robert Searles, and John Cavazos) may be found here.

Kinetic Monte Carlo and CHARMM
This was the work I did while in Michela Taufer's Lab

Kinetic Monte Carlo Simulations

I refactored and improved existing code for executing Kinetic Monte Carlo (kMC) simulations on the GPU leveraging CUDA.

Integrating CHARMM into Different Cloud Computing Platforms

My work involved getting CHARM to execute in various cloud computing platforms. I created a framework that allowed for the same API to be used across Microsoft Azure and Amazon EC2 with scheduling tasks and creating dynamic workflows.

Ocular Trauma Microsurgery Simulator
Advisors: Roger Webster, Joe Sassani, Mike Fiorill
April 2010 - June 2011

Abstract

We will develop a microsurgical simulator that will have the following characteristics: portable, easily constructed and repaired utilizing "off the shelf" hardware components to the greatest extent possible, flexible in terms of hardware and software so as to be able to simulate a variety of ocular and non-ocular microsurgical procedures, cost-effective, and have a software architecture sufficiently open to encourage the writing of programs by multiple parties. Our research team has experience in hardware and software development including that simulating capsulorhexis as part of cataract surgery. Building on this experience, we will develop hardware and software to simulate the microsurgical repair of traumatic wounds of the ocular cornea and sclera. Moreover, this platform will be sufficiently flexible to be able to be adapted to simulate other types of microsurgery. We have proposed a two year project during which we will develop the basic hardware and software for the system. Future research will expand the library of simulation programs and the range of input devices.

Objectives

  • Develop a generic microsurgical simulator that will be expandable to several types of surgical procedures
  • Develop a propriatary suturing algorithm that will work with soft-bodied objects
  • Create a simple, intuative API that can be accessed and modified easily
  • Construct interfaces between custom-built hardware and the software
  • Work with an electrical engineer to write firmware for custom-built hardware (HID-compatible devices)
  • Work with an ocular surgeon to ensure realistic simulation
  • Department of Defense Telemedicine and Advanced Technology Research Center grant funded by the USA Medical Research and Materiel Commands Broad Agency Opportunity Number W81XWH-BAA08-1 for $213,550

This work was presented to Department of Defense Telemedicine and Advanced Technology Research Center members in Summer 2011 at Millersville University

Developing A Real-Time Face Identifier for the NIST SmartSpace Project
Advisors: Lukas Diduch, Vince Stanford
May 2010 - August 2010

Abstract

Properly identifying people in real time from multiple video feeds is a non-trivial task. Better results for face identification occur when using more elaborate algorithms that have time to analyze all components of a face, but those algorithms are far too slow to run in real-time. We substituted using slower algorithms with distributed computing across multiple computers and processors. The algorithm used to develop a real time face identifier has two primary parts; the first part determines the feature set of the face using Eigenvectors while the second part uses a Support Vector Machine (SVM) as a classifier. After the system is trained on a known set of subjects it can be applied to predict a face identity. This algorithm has been incorporated into the NIST Data Flow System II, a distributed computing architecture capable of processing large volumes of data. The identification rate of the algorithm in a single view environment has been evaluated. Future incorporations of the identifier may include utilizing a multi-camera environment to identify all individuals in a given scene. There has been a strong emphasis on integrating the face identifier into a complex Blackboard architecture. This usage of a distributed system can result in meeting reconstruction, recording, and a better overall understanding of events occurring in a scene.

Objectives

  • Develop the face identifier using eigenvectors and support vector machines
  • Use OpenCV and Boost C++ extension libraries to enhance the speed and functionality of the identifier
  • Present summer work to fellow colleagues at the end of the project
  • Funded by the National Science Foundation Grant #70NANB10H07

This work was presented at a breakout session in Summer 2010 at NIST

Digital Data Preservation Strategy & Implementation
Advisor: Wo Chang
May 2009 - August 2009

Abstract

For the SURF 2009 project, a team of three students worked together to prototype and strategize digital data preservation framework and tools. The project consists of two phases: (a) Because of the portable devices (cell phones, personal digital assistants, etc.) play a vital role in our society today and the future to come, the team had strategized and implemented a set of cell phones (Apple's iPhone, RIM's Blackberry, and Google's Android) players to access the preserved ISO/IEC 23000-3 images content which provides ISO/IEC MPEG-7 metadata descriptions and the rich ISO/IEC MPEG-4 file format standard technologies; (b) Apply the lesson learned from phase (a) to strategize what generic infrastructure framework to handle multimedia content (images, audio, video, text). A set of digital data preservation tools has been investigated and developed for the generic framework. Specifically, my responsibility for the Digital Data Preservation was to (a) Design and implement a client for Google's Android mobile platform, (b) investigate data management software (such as iRODS - Integrated Rule-Oriented Data System), (c) work with teammates to setup a prototype implementation of the generic framework, and (d) make the Android client compliant with the generic framework.

Objectives

  • Develop a Google Android application capable of displaying and searching ISO/IEC 23000-3 image content (PP1)
  • Work with a team of two other individuals in creating similar application for Apple's iPhone and RIM's Blackberry
  • Strategize and develop digital data preservation tools with teammates
  • Investigate data management software (iRODS - Integrated Rule-Oriented Data System)
  • Present summer work to fellow colleagues at the end of the project
  • Funded by the National Science Foundation Grant #70NANB9H9070

This work was presented at a breakout session in Summer 2009 at NIST

Building a Beowulf Cluster and Investigating Parallel Programming
Advisor: Gary Zoppetti
January 2009 - May 2009

Purpose

Build a Beowulf cluster and investigate parallel programming concepts

Objectives

  • Using consumer-available computer parts, assemble eight computers to be used as a cluster
  • Install ArchLinux, a rolling Linux distribution, on the computers
  • Configure the computers to act as a Beowulf cluster
  • Design, develop and run parallel programs written in C++ with OpenMP
  • Investigate alternative parallel libraries such as OpenMPI and CUDA
Extending Microsoft's XNA Framework with Physics, Animation, and Sound
Advisor: Gary Zoppetti
August 2009 - December 2009

Abstract

Microsoft developed the XNA Framework to simplify game development. It is fast becoming the most popular framework that allows enthusiasts, hobbyists, and academe to develop video games for the PC and Xbox 360. It lacks, however, critical elements for creating realistic and immersive games. We are building our own framework on top of XNA to support rigid-body physics; animation; first- and third-person cameras; background and 3D sound; and scene management. Character animations are implemented using XNAnimation, a free third-party animation library created by Bruno Evangelista. Both background and 3D sound is managed using FMOD Ex. Our physics and animation infrastructure will leverage Havok Physics and Animation, two products from the world's top physics middleware provider for the video game industry. Because Havok's software uses native C++, and XNA uses C#, we must develop a library that efficiently communicates between the unmanaged runtime system used by C++, and the managed system used by C#. This requires a careful design that minimizes communication, as every transition between the two systems is costly, and too many may render a game unplayable.

Objectives

  • Create a wrapper for FMOD Ex to be used in a game engine extension of Microsoft's XNA game engine
  • Experiment and test an animation controller, XNAnimation, and incorperate it into the game engine
  • Develop an intuitive API for accessing sound and animation controls
  • NOTE: Project later renamed to Millersville University XNA Engine (MUXEngine)

This work was presented at a poster session in Fall 2008 at Millersville University

Efficient Rendering of Binary Space Partitioned Maps
Advisor: Gary Zoppetti
January 2008 - May 2008

Abstract

We enhanced the MUDirectX toolkit, a Direct3D based game engine, to load fully-textured worlds comprising 50,000+ polygons with support for non-trivial real-time physics. Added functionality includes the loading of Binary Space Partitioned (BSP) maps from Valve's Half Life 2 series of games. We optimized rendering efficiency by implementing occlusion and frustum culling. Efficiently rendering a world allows the distribution of processing power to other functions such as physics, artificial intelligence, and general game logic. The toolkit now also supports positional sound, skinned mesh character animations, and rigid body dynamics.

Objectives

  • Create a Binary Space Partitioned map loader for the MUDirectX Engine
  • Work with two other students to implement a BSP file loader
  • Integrate the FMOD sound system to be used with the MUDirectX Engine

This work was presented at a poster session in Spring 2008 at Millersville University

Projects
Generic Makefile

This is a really generic makefile that will compile everything in a source tree and link them together. Only one recipe had to be explicitly defined; the remaining recipes used are built-in recipes found in make. I have tested this only with GNU Make 3.82 though any recent-ish version of GNU Make should work. Feel free to test it with other distributions/versions of make, but there's no guarantee it will work. If you have any questions or feedback, feel free to let me know.

You need javascript to view this
Happy Ling

Happy Ling is a baby dragon that has lost his way from his dragon parents. He's all alone in the wilderness and he needs to find a way back to his parents. Unfortunately, Happy Ling is afraid of the wildlife (rats and rabbits) so he needs to avoid them on his quest. Tapping anywhere on the screen causes Happy Ling to jump in the air. Tapping on Happy Ling causes him to stomp down.

This was a project for the mobile programming course I took in spring 2011 at Millersville University. Michael Root was my partner in the project. All artwork was created by Michael Root and me. Credit is given for the sounds used, and we used AndEngine for the physics of the game. Total time for planning, artwork, story, implementation, testing, and completion was 4 weeks.

SSE Vector and Matrix Library

This was my final project for the parallel programming course I took during Fall 2010 while at Millersville University. The final project requirements were: A team of at most two students will complete a final project. The final project will involve solving a non-trivial problem using a parallel algorithm implemented in a parallel language or library, one that may not have been discussed in class. Each team may choose the problem subject to instructor approval. Methodology, results, and a performance analysis will be presented. I chose to work individually on this assignment.

Objectives

  • Create a parallelized SIMD vector and matrix library for use with C++
  • Present my work to the entire class and professor
  • Develop parallelized algorithms for vector and matrix manipulations
  • Utilize Intel SSE instructions to achieve speedups of up to 4.0
Word Puzzle Generator

Requirements

This was my term project for the software engineering course I took during Spring 2009 while at Millersville University. The project requirements were: The developed software will support the creation of word-based puzzles such as word search puzzles and free-form crossword puzzles based on a user-provided list of words and terms. Other forms of word puzzles based on those words might also be generated. The customer wants a means to provide a list of words and have multiple word puzzles created in an HTML format so that they can be used as paper handouts in a classroom or as features on a web site. The puzzles might also be used as input to other programs such as the provided example WordSearch. Created puzzles must be editable within the application in case the user wants to add, delete, or rearrange some words. The user should be able to save and read these puzzle files.

Objectives

  • Work as a disciplined team to develop a substantial project
  • Apply software engineering techniques we're learning in class
  • Build a project using multiple interacting objects and meaningful inheritance
  • Use iterative enhancement to grow the software from an initial simple version to a fully-featured version
  • Focus on high-quality development rather than a multitude of features
C-Minus Compiler

This was my term project for the compilers course I took during Fall 2008 while at Millersville University.

Requirements

Scanner - Write a scanner (lexical analyzer) for the C- programming language described in Appendix A of the textbook, with the addition of FOR, INCREMENT, and DECREMENT keyword tokens. Use a Makefile to build your project. We will extend it to eventually build your full compiler. Code a flex specification file (use a dot el extension) and a driver program that invokes the generated scanner (yylex) and prints the token-lexeme pairs encountered in a C- program. Report any invalid input and the line number it occurs on.

Recognizer - In C++ write a recognizer for the C- programming language, augmented with for, pre-increment, and pre-decrement statements. Submit all relevant files, including a Makefile; your flex specification file; a bison specification file (use a dot yy extension); and a driver program that invokes the generated parser (yyparse) and indicates whether the inputted sentence is in the C- language.

Parser - Write a parser for the C- programming language. Build and print the abstract syntax tree (AST).

Symbol Table - Write symbol table routines declared in the provided files. After testing the routines, add semantic actions to your Bison specification file to manage names, pairing uses with declarations through declptr.

Code Generation - Write an IA-32 code generator module for C-. Include a write-up of your test cases and an analysis of what your compiler can and cannot handle.

Objectives

  • Construct a lexical analyzer for the language using Flex
  • Generate the required rules for an Bottom-Up parser for the language using Bison
  • Build the Abstract Syntax Tree using a TreeNode derived class
  • Process the symbol table using an unordered set
  • Generate assembly code
Konane

Konane was a final group project for the artificial intelligence course I took during Spring 2010 while at Millersville University.

Requirements

For this lab you will implement the minimax adversarial search algorithm with alpha-beta pruning on the game of Konane, also known as Hawaiian Checkers. You may work with up to one person on this assignment. You will implement minimax with alpha-beta pruning and then focus on finding a good evaluation function for estimating the utility of a given Konane board. As mentioned in the reading, "it should be clear that the performance of a game-playing program is dependent on the quality of its evaluation function". I chose to work with Michael Root on this assignment. I elected to work with Michael Root on this project.

Objectives

  • Implement minimax with alpha-beta pruning
  • Develop an evaluation function for a konane board
  • Provide a writeup on the work done
Eight Puzzle

The 8 puzzle was an introduction to lisp assignment when I took artificial intelligence while at Millersville University. The 8 puzzle is also referred to as the sliding puzzle. Different heuristics were used and the results had to be compared.

You need javascript to view this
Curve Demo

The curve demo was an assignment given in the graphics course I took during Fall 2009 while at Millersville University. Three different curves had to be rendered (Bezier, Catmull-Rom, and Hermite) based on input data processed from a CSV file. A teapot then had to trace along each of the curves based on user input. NOTE: In order for this to run properly, you will need to install the Microsoft XNA Framework 3.1 Redistributable Package available here. A keyboard or XBOX 360 controller can be used for user input.

Images

Resources

Throughout my time as a scholar I have come across several excellent resources and references. Here I will try to keep an updated list of those resources I continue to use nearly every day.

Parallel Programming

My research in parallel computing has resulted in me needing to give lectures to students, faculty, staff, and other communities in academia. Listed below are presentations I have given in the past.

  • Lecture on OpenACC given to CISC 879 -- Advanced Parallel Programming (Spring 2013) [pdf]

C++

C Plus Plus Reference Website
CPP Reference Website (Better C++11 Information)
SGI Standard Template Library Reference
Boost C++ Libraries

Java

Java 7 SE API
The Eclipse Project
Netbeans Project
The Java Tutorials

Linux References

ArchLinux, my distribution of choice
Ubuntu Linux Project
The Fedora Project
Terminal Commands

Contact

About This Site

This site uses HTML5, CSS3, and a tiny bit of javascript. I elected to use minimal animations to target a quick, responsive feel for my site. I chose a bright color pallette to cause less eye strain. Ample amounts of whitespace are used for separation of content and to promote readability. If you have any questions regarding the design of this site, please send me a message at your convenience. Currently I only support recent major browsers such as Firefox, Chrome, or Internet Explorer. I have not tested this site in Safari or Opera; I recommend using one of the browsers I tested my site on for the best possible experience.

Fonts were legally obtained through Font Squirrel and the icons used for the contact information were obtained from  IcoMoon. The cool hackery with the syntax highlighting is provided by highlight.js. All other content (HTML, CSS, Javascript) was created by Will Killian (that's me).

Tested Platforms and Browsers

Conforms to HTML5 and CSS3 Standards