Today’s embedded-system designers have a great variety of processor types to select from, with FPGAs [field-programmable gate arrays] and GPUs [graphics processing units] adding their own various advantages and disadvantages for consideration in contrast to the more familiar CPUs [central processing units]. Understanding these characteristics and how FPGAs and GPUs stack up can help system integrators make the right choice when choosing and installing a processor, to be used either individually or in combination with other types of processors.
FPGAs are hardware implementations of algorithms, and since a hardware implementation usually operates faster than a software implementation, they perform very well. Unlike FPGAs, GPUs execute software; performing complex algorithms takes many sequential GPU instructions compared to an FPGA’s hardware implementation.
The advantage of a GPU is its high core count, which enables certain parallel algorithms to run much faster than a CPU, especially those using floating-point calculations. A 1,000-core GPU can run 1,000 floating-point calculations every clock cycle. For signal- and image-processing applications, the GPU is a natural fit. GPU performance typically beats CPUs for highly parallel math-intensive applications, and they are getting close to parity with FPGAs for performance per watt.
Historically, one drawback of FPGAs is that they are much harder to program compared to CPUs and GPUs. Software for CPUs is typically programmed using one of many readily available programming languages, such as Java, C, or Python. FPGAs are programmed with a hardware description language (HDL) such as Verilog, or a very-high-speed integrated circuit hardware description language (VHDL), which translates directly to FPGA logic cells.