I decided to start writing a blog about a topic that I am interested in. That is designing and implementing a chess engine on a general purpose graphics processing unit (GPGPU). Modern GPUs have a lot of computing power, even more than the central processing units. On the other hand, the playing strenght of a chess engine depends on the available computing resources, in addition to its search algorithm and evaluation function. That is why the idea of combining the power of modern GPGPUs with an efficient chess program comes readily into my mind.
So why aren't there already chess engines utilizing GPUs? The answer is simple. While the graphics processing units have taken many steps towards general purpose computation, they are still far from common CPUs. They are less flexible and require special algorithms to fully utilize the massively parallel computing power they possess.
There are several limitations to GPUs. To name a few, here is a list:
- Single instruction multiple data (SIMD) architecture
- Limited memory access
- Limited communication between processing units
- Inefficient branching
- Bias towards floating point computation
In addition, the most popular chess algorithms are inherently sequential, and simple parallellization attempts fail. There are some chess algorithms that can utilize more than one processor, but almost none of them are designed for massively parallel computing.
In short, the goal of this blog is to find the most efficient way of implementing a chess engine on a GPGPU.