Part+IV+-+Reflections

⇤ Intro | ← Basics | ← Application | ← Improvements | You Are Here | ⇥ Resources

=__Part IV - A Note About Computer Limitations:__=

For Those Considering Getting a GPU:
Perhaps someone out there can learn from my history. I originally had Windows 7 on my laptop. My hardware setup is/was as follows:
 * Sony VAIO VPCCW22FX Laptop
 * Intel Core i3 CPU @2.13GHz
 * 64-bit
 * 4GB DDR3
 * 500GB HDD
 * NVIDIA GeForce GT 330M
 * 14", Resolution 1366x768

In Windows 7, neither Sony nor NVIDIA had a graphics driver of high enough version to support the CUDA SDK on my laptop (current as of late April 2010). I contemplated using VirtualBox to run Linux in emulation, but I had second-hand knowledge that the emulated environment would not be able to access the GPU like the host OS. For fear of wasting time with that, I decided I would put a Linux operating system (OS) on my laptop. I was meaning to - and pressured by my older brother - for quite some time to install Linux anyways, so this was my learning opportunity. And there the fun began.
 * 1) I first installed Kubuntu, but components of it started crashing during every session.
 * 2) Then I installed Debian Linux, which required network access to acquire the rest of the install packages. Despite working with a Debian guru for 2-3 hours, we could not resolve why Debian Linux could not see my Ethernet card at all. A Knoppix LiveCD could see the Ethernet card, but Debian simply couldn't. So I remained flexible on my choice of OS.
 * 3) My laptop is now under Ubuntu 9.04, even though Ubuntu 9.10 is available. I believe I chose this because Ubuntu 9.10 is not supported well yet by the NVIDIA drivers and/or CUDA. I am sure this will change with time, so please do not take this as cold hard truth for very long - if at all.
 * 4) Somewhere in there I formatted over my normal Windows 7 partition, keeping both the Recovery and the System Reserved disks, as well as keeping a complete Windows 7 system image on an external hard drive. I must say that not having Microsoft Windows as my fail-safe OS forced me to learn Linux quickly - after all, I only used the command prompt for the first time within the last four months, and this was my first time with Linux, so it was a steep learning curve. I recommend this OS-jump for those that want to get into Linux waist-deep, although it may take a toll on one's sanity.

General Computing Lessons Learned:
As a result of my naïveté and new experiences, I learned quite a few things from which I hope someone else can learn something.
 * Knoppix can see what hardware is on the computer - and if Knoppix does not see it, then no OS is likely to see it - or so I hear
 * Always run "fix /mbr" or "fixmbr" before reformatting the partition with a GRUB loader (assuming one is dual-booting with Microsoft Windows)
 * Always back up your drivers before making major modifications to the system
 * Back up information to an external hard drive that is not locked via software - otherwise, the recovery CD may not be able to "see" the device
 * Print directions before doing anything
 * Print manuals before going into a new environment
 * .iso files must be burned to disc as an image, instead of being burned as a data disc by the CD/DVD creator
 * A backup source of internet (another computer or even a handheld device like a smartphone if necessary) can help significantly; there is an incredible amount of information on the internet, which means that many problems one might encounter are probably already addressed by somebody else in the world and posted in some forum.

Conclusion:
//"One cannot too soon forget his errors and misdemeanors. To dwell long upon them is to add to the offense."// -Henry David Thoreau

I made many-a-mistake in the course of this project (or perhaps more specifically, while setting up my computer for this project), but by no means do I regret the mistakes I made. Each one led me down a path that taught me more. Via mistakes or otherwise, I ended up learning more about computers in general, more about Linux, more about Windows, more about GPGPU, more about evolutionary algorithms, and, perhaps most importantly, more about myself. Cheesy, yes, but true. I always knew that machines are limited by their designers - that is, they do what we tell them to do, even if we don't always tell them exactly what we intended. But during the course of working with my GPU, I learned that no amount of frustration will suddenly make a machine do something differently - you must simply keep searching for the right way to command it.

By the time I arrived at the Conclusion, I expected to complete a simple genetic algorithm in a CUDA environment. Perhaps - and probably - I underestimated the depth of the subject. I do not think it was a lofty, unattainable goal - but it is a goal that is taking more time to reach than I expected. I am glad though that I was forced to document all of this along the way, since it should help me in future work; my "Improvements" section serves as a blueprint for my future work in this subject. In addition, it might actually help other GPGPU newbies.

My use of GPU is not over. In the beginning of this semester, I immediately fell in love with the concept of GPGPU, and was subsequently worn down by failure after failure. But now, after getting just partial success and learning some of the intricacies of CUDA capability, I fell in love with it all over again, and know that this is a topic that I want to pursue further - not just a topic that I would pursue because I committed to it, but I would pursue it because it is genuinely captivating and has such intriguing potential for the future.

PREVIOUS | NEXT

⇤ Intro | ← Basics | ← Application | ← Improvements | You Are Here | ⇥ Resources