I first read about Field Programmable Gate Arrays (FPGAs) from an article about how it was being used by J.P Morgan for running risk simulations (e.g Monte Carlo) for its Fixed Income business. The entry on Wikipedia describes it as an integrated circuit which can be configured after manufacture. I didn’t give it much more thought until I started reading about BitCoins and tinkered with some miners for OSX. That was when FPGAs came back into the picture as there is an industry that provides FPGA-based devices for bitcoin mining. The advantage of using FPGAs vs GPUs for bitcoin mining appear to be the much lower power consumption profile of FPGAs (and lower heating costs).
Why then have FPGAs not entered into the consumer mainstream like GPUs have? Take a look at this excellent slidedeck from Altera which covers their OpenCL frontend to FPGAs but also includes information on the barriers to adopting FPGAs for roles which GPUs have had dominance over.
It turns out that there are some significant challenges for the software engineer:
- The process of designing and synthesising the digital hardware (on the FPGA) is lengthy and complex, compared to the near instantaneous feedback for software.
- FPGAs are capable of executing thousands of instructions per clock cycle (compared to multicore CPUs which run a single instruction per core, and GPUs which execute instructions for each on-chip Arithmetic Logic Unit). This leads to challenges in guaranteeing timing requirements between different logical chips.
- The lack of portability between different FPGA chips means that algorithms need to be redesigned for each hardware change.
There are however, efforts underway to provide a higher level interface for software programmers (like the OpenCL frontend mentioned in the slidedeck) that will allow computer algorithms to be written in a more accessible language like C, while abstracting the hardware description (which are expressed as Verilog or VHDL).
The idea that I am able to design and implement any digital circuit dataflow at low costs and not be limited to the prescribed architecture of stock CPUs is incredibly liberating. I also believe that the FPGA approach to concurrent/parallel computing is different enough to shift my personal paradigm with regards to high performance computing. It’s for these reasons that I decided to purchase a FPGA development board for experimentation (though I probably won’t be using it for Bitcoin mining anytime soon).
I decided to get the XuLA2-LX25 from xess.com after checking out this review, choosing the LX25 over the LX9 due to the inclusion of the more recent Xilinx Spartan-6 chip. The order was placed online a week ago and I just received the board and accessories yesterday 🙂
I’ll be using the excellent documentation available on xess.com to get started and hope to be able to chronicle my learning experiences.