Table of Contents

GPU Exploration: : A Learn and Teach Final Project

By Chloe Eghtebas

Note: I took advantage of the write up being on the wiki. Each link embedded in the text is a part of my write up so be sure to click on them all! Click on my documentation to start!

What I did

My goal was to be able to understand and teach peers basics of GPU as well as to get sample code running on the GPU.

This involved everything from getting the correct drivers installed and the developing environment up and running to understanding and implementing some GPU code and doing something useful (or cool) with it. In writing the code I also found it helpful to have some understanding of the GPU architecture or hardware implementation.

I have planned on teaching peers about the topics I had researched into through my documentation. This includes information about the “important” aspects of the GPU hardware, difference in coding specifically for GPU versus just regular C/C++, built upon that by explaining how to run simple example code, and why GPU's are super awesome in the first place.

Why I did it

I chose this topic after an interesting conversation I had had with someone I looked up to this past Thanksgiving break. This is when I had realized that I must know more about GPUs. To be able to understand emerging technology and also to get my foot in the door. While doing my project, I began to realize even more how important GPUs are.

“The world is going parallel!” There are many current and future applications for harnessing GPUs power of computation. It just touches and befits so many different fields. Essentially, with more computational power, we are a step closer at unveiling some of the universes mysteries.

These following links show why I found GPUs to be interesting:

http://nvidianews.nvidia.com/Releases/Researchers-Deploy-GPUs-to-Build-World-s-Largest-Artificial-Neural-Network-9c7.aspx

How I did it and How you can too

Basically, I taught myself from the various resources I found online (helpful or not). Since I did more of a learn and teach project, reading through my documentation will tell you how to do as much as I could figure out to do in this time.

Code is included throughout the wiki pages.

A list of difficulties and ‘gotchas’ while doing this project

A possible TODO to extend the depth of the project

Chug on learning about GPU's. What is left to do is go back over everything and make it more intuitive and less abstract. Especially since this document requires some prior programming experience and it builds on the fundamentals learned in computer architecture this semester, a technically competent but not experienced person may still have some trouble here and there. In fact, one of the most difficult and time consuming parts of my project was writing it up in a way that would make sense to people other than just me. This may have been due to me not understanding everything at the level I was supposed to. As Einstein once said “If you can't explain it simply, you don't understand it well enough.”

Hopefully the audience will leave this document with a better understanding of GPU's overall.

Work Plan reflection

Project Schedule:

Today (12/2/13) through Friday (12/7/13): Setup necessary environment and get as much sample code running including playing around with the different types of libraries.

Reality: Environment was not fully set up by this time (possibly installed something incorrectly). I did get sample code running through a web CUDA environment emulator through the Udacity Introduction to Parallel Programming Course. 5+ hours for silly installs and setting up.

By Friday (12/7/13) (10 hrs): Have idea of what code I could implement on GPU by putting together the sample code in preparation for demoing cool aspects of the GPU.

Reality: (10-ish hrs only a few which were fruitful) I still didn't know the specifics but I knew that it would involve image manipulation or processing of some sort. 3 hrs for the first Udacity lecture (included pauses for me to google GPU things) 1+ hr for hw. I thought would have more code done by now though…

By Monday (12/10/13) (5 hrs): Have (first draft) of GPU lesson/paper write up or power point/ video.

Reality: (0 hrs at this time but it eventually took me 3+ hrs to put lecture stuff together and practice and do more write up stuff.) This happened a week later. Link to my lecture which I presented during Demos: https://docs.google.com/presentation/d/1NES0bAm9jxaOL4bJg8l-u4YT1W42-Vagd6c48s8__fs/edit#slide=id.p

By Thursday (12/12/13) (3 hrs): Finish write up/ video lesson of how awesome GPU’s are.

Reality: Didn't happen on time as well. I am currently doing my write up now (12/18/13) in the sense that I am putting up everything I had written up on the wiki.

By Sunday (12/15/13) (7 hrs max): GPU demo code freeze.

Reality: My code had been frozen for a while. Better yet, my code is still frozen with a bug in it.

By Wednesday (12/18/13) (4 hrs): Be done with everything (Including optional code I may decide to write that is different from that of what I had decided on Friday the 7th) and turn in project (optimistically).

Reality: Was too optimistic. Now I must be sad.

Due (12/19/13) (max 40 hrs spent on project)

Reality: About right with an error plus minus 5 hrs.