As I mentioned in my last post, Acceleware has been doing GPU programming for 5+ years now, this makes us veritable seasoned veterans in NVIDIA’s ‘GPU computing ecosystem’. This fact might cause some to wonder why we only officially released the CUDA-based version of our FDTD libraries only a few months ago. The short answer is that it took a long time to port a code base that took 3+ years to build. The more interesting story however are the benefits and results of doing that port to CUDA. This is what I want to focus on in this post.
The foremost two benefits go hand in hand and they are performance and robustness. Before CUDA we were basically hijacking OpenGL, the graphics programming language, to do GPU computing. While this worked, there were many workarounds and kludges that were required to make sure things ran smoothly. We were actually quite proud of what we accomplished in terms of performance, but there was still some left on the table, that OpenGL just couldn’t get to. The other down side was that we didn’t make any friends at NVIDIA when we reported OpenGL computing bugs. “OpenGL isn’t made for computing” they would remind us at each reprise, a fact that couldn’t have been more obvious for our developers, or more painful for me.