I've decided to learn CUDA. I've been toying with it before, but now I've decided to do this more properly.
What is CUDA
Now what is CUDA and why do I care? CUDA is NVIDIA's programming interface to their massively parallel chips. To put it simply it allows me to write code that runs on the graphics card in my machine. Now I have a cheap graphics card in my machine at home, yet it has 336 cores, each running at a staggering 1.66 GHz. CUDA allows me to hook into that and run my own code there. The power is amazing.
Why do I care?
Now why do I care? I am looking at the future and where things are going. The 'web' and 'the cloud' have really loud proponents. However they do not do anything really cool that has not yet been done. I mean, really, what is truly new on the web? Twitter is just a web based IRC after all. Similar can be said about Facebook and such. True it is useful and cool, but new it 'aint. Now these people are so loud that all the truly cool things happening in the computing world is drowned by them. Massive parallelism is the way of the future and where things are heading.
Just imagine this, two years ago having a mammography you would have to wait hours or days for a result, in fact the doctor would not be able to view the data in a really sensible way without sending it to the hospital's super computer, or worse, sending it away for processing. Today with the help of CUDA it is possible to process the data in 20 minutes it used to take four and a half hours. This greatly speeds up the diagnosis of life threatening deceases. Is that not cool? That is just one of many many examples where technologies like CUDA play a role at actually saving lives. CUDA is at the very forefront of this massive revolution we are currently seeing.
You view your movies in high definition, to decode and display those frames requires quite a bit of processing power. All this comes thanks to massive parallelism. The computer you read this on (let it be a mobile phone, or a desktop computer or a laptop or a tablet) is sure to have more than one 'core'. The revolution is happening all around us. However to most users it will not be much of a change at first. It is a quiet revolution.
So why did I pick CUDA over the alternatives? There are a few competitors to CUDA, such as Intel's 'Knight Bridge' (or Larabee, or Phoenix if they ever decide on a name), OpenCL. First the easy reason, I've got NVIDIA chips in all my computers (spare one). So the availability of chips to run it on is the strongest reason. CUDA is mature and ready to be used. OpenCL can be used on CUDA cards and well CUDA seems to be the most mature and at present the best platform for this.
What I am doing
I have actually drawn up a course plan as I've been playing with CUDA before but the random stabs in the dark I've done is not quite enough. Over the past weeks I've gathered much literature and also obtained recorded lectures to watch. As I have a family to support I can not give up my day job. Given that my employer wants me to work on a ten year old webstack I need to do the training in my own time so time will be my biggest constraint. I have drawn up a course plan for me, and I plan on blogging about my experiences as I advance. I hope that by the end of this very ambitious plan I will have some nice screen shots of ray-traced things to show. I am not going to publish my course plan right now, I prefer to work out any problems with it first, plus it contains a timeline that I may not be able to follow, therefore I will keep it private for now. If you have questions or input either contact me directly or use the comments section. Now I'm off to join the ranks that is driving real change in the computer world. You'll see me there at the front waving the flag.