At the Heterogeneous and Reconfigurable Computing Research Center, we focus on analysis and implementation of computationally intensive applications on coprocessors such as FPGAs and GPUs, to accelerate the applications.
A heterogeneous computing system contains a mixture of regular computer processors along with specialized co-processors. These co-processors, which include Field Programmable Gate Arrays (FPGAs) and Graphics Processor Units (GPUs), are very difficult to program but can perform certain types of computations very fast and efficiently. When specific portions of a computer program are adapted to run on these co-processors, the overall system can achieve much higher performance and efficiency than a traditional high-performance computer system containing racks upon racks of general-purpose computers.
Field Programmable Gate Array
Unlike ASICs, Field Programmable Gate Arrays (FPGA),
also known as reconfigurable computing platform, can be programmed or
configured to implement applications. FPGAs traditionally are programmed
in hardware description languages (HDL), such as VHDL and Verilog. But
to reduce the difficulty and time involved in debugging and verification
process, recently there has been an inclination towards high level
languages (HLL) to program FPGAs. Platforms such as Impulse C and Handle
C facilitate programming FPGAs in C or C++.
For large design, the design cycle requires a lot of engineering effort to implement an algorithm. However, a good FPGA design usually provides 1-3 order of magnitude speed-up over traditional CPU. Not all algorithms can achieve speed-up on FPGAs. Those which can be parallelized and do not need much communication overhead can expect better performance.