Thursday, 6 February 2014

Parallel Computing on FPGAs

           The Parallel Computing community is on the verge of a major Paradigm shift! GPUs and multi-core processors, which are the work horses of parallel computing are now facing a challenge from FPGAs! Modern FPGA development boards, equipped with powerful processors provides a heterogeneous platform as well.

 Are FPGAs better than GPUs for Parallel Computing? In many ways, Yes!! I will put down a few reasons for you.

1. Fine Grained Parallelism:

      FPGAs are famous for their fine grained parallelism. It refers to the amount of interaction between the threads that are running in parallel. FPGAs can support high amount of interactions between threads, which makes it ideal for algorithms that are non-SIMD or irregular.

2. Data Path Flexibility:

 FPGAs are reprogrammable and reconfigurable, which makes it very powerful over GPUs, as they can change the hardware design according to the requirement. In fact, the whole emerging science of Reconfigurable computing is dependent on FPGAs. Run time reconfiguration of hardware is certainly very promising.

3. No more HDL! :

   The major drawback with FPGAs was the tedious programming exercise they posed with Hardware Description Languages like VHDL, Verilog etc. Altera's SDK for OpenCL is no doubt, a great tool for a parallel programmer to devote more time on Algorithmic implementation unlike in HDLs. Xilinx's recent release of sdAccel is another such effort.

4. Power Consumption: 

     FPGAs consume a very less power compared to their counterparts, the GPUs. In today's world, where low power solutions are very much sought for, FPGAs will surely come in handy!

5. Heterogeneous Platform: 

    GPUs perform very poorly in case of a sequential instruction, hence they are always assisted with onboard CPU. However, FPGAs can perform well even if the algorithm is predominantly sequential(Amdahl's Law), with some part of its resources configured for that task. Also, the processor on-board creates a heterogeneous platform that delivers a high performance in case of a non-SIMD instruction.

6. Reconfigurable Computing on FPGAs:

  Fastly emerging field of reconfigurabe computing is all about the flexibility offered by FPGAs. Run time reconfiguration, which in turn can be again parallel by dividing the FPGA area accelerates the performance to a great extent! This helps the designer to adapt his hardware according to the needs of the executing program. Partial Reconfiguration tool by Xilinx can help designers to use FPGAs for run-time reconfiguration.

  This helps FPGAs to exploit the advantages of both, flexibility of general purpose computing systems and benefits in power, area and speed of ASICs  simultaneously, delivering very high performance.The wide variety of high-bandwidth I/O capabilities of FPGAs is also an important factor.

Here is an example(courtesy:Altera) of parallel FIR filter's performance on different platforms. Hope that settles this discussion!

We are already seeing FPGAs becoming a part of hardware acceleration in HPC applications and appearing in embedded applications such as Advanced Driver Assistance Systems. With better software support and a more active research community in the field of reconfigurable computing can surely drive a wave of revolution.