Projects

Paradocs

Paradocs is the project that I was tasked with building over the summer at my internship with Garmin Aviation. I was hired as a member of the tools team at Garmin Aviation. This team focuses primarily on building, maintaining, or otherwise implementing internal tools that are utilized by those in the department. Some examples include a Mock generator for Mock testing with Python, BoostBuild, and Jenkins. When I was hired, there was no central location that the users could view Software documentation at. That's where I was given the task to build a web application that hosts software documentation that was automatically generated using tools such as Sphinx or Doxygen for software built at Garmin. I built this application using a front end taken from another open source project called "Host the Docs". The backend was a combination of Node.js for handing the requests and sorting the documentation, a MySQL database for storing information about the different pieces of software, and an AWS S3 bucket that would hold the generated documentation. The general idea of the web application is that the application would interface with Jenkins in order to always contain the most up-to-date documentation. Every time someone pushes to the master branch of a git repository, Jenkins builds the code and runs a suite of tests on the codebase. If the codebase passes the tests, Doxygen or Sphinx would generate the documentation for that codebase, zip the files up, and push them in an HTTP request to my web application. From there, my web application would push the files to an S3 bucket and display them for users to find and view the most up-to-date software documentation online instead of having to build it themselves.

Parallelizing Pyxaid

Github repository

PYXAID is a software program designed to simulate nonadiabatic molecular dynamics in condensed matter systems. The PYXAID program is currently the only publicly available tool for performing these simulations. It is a single-threaded application that outputs a tremendous amount of files and data. PYXAID is a mixture of Python and C++ code. The time consuming computation and file IO is done in C++. The Python serves more as wrapper to make the program easy to use.

As my final project in CIS 625, I chose to parallelize PYXAID and worked in a group along with Jacob Dokos and Daniel Longfellow. We have implemented a multi-part solution to decrease the runtime of PYXAID. First we added a lightweight timing class that outputs timing data about the C++ runtime. Second we made changes to how the output files were being created. We did not change the output, but made it more efficient. Next, we added in memory arrays to store information over the life of the program, that was originally being stored in files and reassessed. We then moved on to Parallelizing two time consuming sections of computation. This includes computing the phonon spectrum and the propagation of many-electron orbitals. Lastly we got the program running on a ram-disk, resulting in a large speedup due to heavy file IO. All together, we were able to run a small test case in 2:32 seconds. The original version would take around 25 minutes, but vary significantly due to file IO.