Tag Archives: gpu

GP-GPU and FPGA

Kevin Morris at FPGA Journal has published an article titled A Passel of Processors, describing how the new NVIDIA Tesla GPU poses a direct threat to FPGAs in the domain of high-performance, hardware-accelerated computing.

According to NVIDIA, the Tesla provides teraflop performance in a single, massively parallel (240 cores) device. And it can be programmed using C-language.

Or at least something resembling C. Because, after all, when you have 240 cores and a massively parallel processing target, your C-language application is not likely to look like your father’s DEC PDP-11 sequential C-code.

I’ve leave the debate about whether GPUs will consistently beat FPGAs, in terms of gigaflops per watt, in a wide variety of applications, to someone else.

That’s a race that is not yet over.

What interests me is the common belief that FPGAs are inherently more difficult to program than GPUs. Are they? Go look at this Mersenne Twister example and the sample source code for it, then compare to this version (coded up using Impulse C). That’s a rather simple example, but it demonstrates the use of pipeline generation (controlled by a C-language pragma) and the use of a streaming programming model. These are concepts very similar to what is required for GP-GPU programming, or when programming cluster applications using OpenMP, etc.

The CUDA tools and tools like Impulse C provide extensions to the C-language to help software programmers deal with multi-process parallelism, in GPUs and FPGAs respectively. Rather than attempt to hide parallelism and multiple-process optimization methods from programmers, these environments embrace parallel programming methods using a base language, C, that is familiar to programmers.

To summarize: programming for either FPGAs and GPUs is challenging, but tools are available today that have, for the most part, made these devices usable by software programmers. Some amount of experience is needed to efficiently manage parallelism in the application, but the programming level of abstraction is not really so divergent in these very different types of acceleration platforms.

Advertisements

Leave a comment

Filed under Reconshmiguration