Is FPGA Ready for Software Developers?

Domi Yan
3 min readMar 8, 2020

--

About the author: through the last 3 years, I have been working on an FPGA compiler with the mission to enable FPGA for software developers. Our dream is to let people develop programs on FPGA, just like they are working on a general-purpose processor (CPU). This article is my personal opinion on the current status of “FPGA for software developers”.

If you don’t know what’s an FPGA, I strongly suggest you read Alex Rast’s and Bert Verrycken’s answer in this before continuing:

https://www.quora.com/Can-you-explain-FPGA-to-a-software-engineer

In short, FPGA is a hardware programmable device, you can create customized logic on it.

So what does running software on FPGA mean? Instead of executing instructions on a general-purpose processor like CPU, the FPGA compiler magically creates a customized circuit using programmable logic units provided in an FPGA device tailored for your application. Isn’t that amazing? Shouldn’t it be more performant (because it’s customized)? As a software developer, can I utilize the ability of FPGA easily (without going through a big learning curve)?

It depends on what type of software work you are working on. Let me explain. The spectrum for software developers is very broad. Essentially, we are all working on top of some level of abstraction and our work largely depends on other peoples’ creations. To answer the question if FPGA is ready for your development work is equivalent to “is there good enough technology/software tool in the FPGA ecosystem that has been created to suit your needs?” So if you agree with the above statement, you know this question won’t have a simple answer.

Before I give you the conclusion, let’s look at the recent progress and trends of FPGA tools.

The software ecosystem around FPGA has grown substantially to make FPGA easy to access. A major shift is that FPGA vendors are trying to build their platforms (Intel OneAPI, Xilinx Vitis) rather than “an FPGA version implementation of XXXX language”. What is a platform, the best-established example that is similar to this is CUDA. Check here: https://blogs.nvidia.com/blog/2012/09/10/what-is-cuda-2/. In the article, the author mentioned:

Most people confuse CUDA for a language or maybe an API. It is not. It’s more than that. CUDA is a parallel computing platform and programming model that makes using a GPU for general-purpose computing simple and elegant.

I completely agree. In my opinion, other than the performance advantage of GPU/FPGA over CPU, ease of use (simple and elegant) is a critical part of a successful platform. With the development of those platforms, it would be much easier to integrate FPGA solution into your software stack. If this still sounds confusing to you, imagine this. You are building a system composed of Python programs running on CPU and RLT(represents hardware description language)/OpenCL(a C/C++ like language) code on FPGA. The maturity of the tools provided in the platform determines how easy/reliable/elegant you can do this type of work. Currently, both oneAPI and Vitis are still in beta; the official lunch is in 2020. Software developers can expect a lot of useful tools out there to make their life easy.

However, developing efficient and performant algorithms on FPGA remains a hard task. It is not for typical software developers without knowledge of FPGA hardware architecture. Even though major vendors have provided C/C++/OpenCL/SYCL compilers for software developers, they are more served as helping hardware developers writing less code and efficiently by using high-level language instead of providing magic amazing out-of-box performance for software developers.

Let’s get back to the original question: Is FPGA ready for software developers?

FPGA is worth consideration for developers who treat FPGA as a black box.

These types of developers don’t work on implementing algorithms for FPGA. They focus on the architecture of the system and try to find the best existing acceleration solutions to meet their needs. With the development of FPGA platforms mentioned above, integrating an FPGA solution into a system shouldn’t be a headache anymore.

FPGA is not yet for software developers who want to dive into it.

If you are an algorithm developer and want to run your algorithm on FPGA, the answer is unfortunately no. To best explore the performance of FPGA you need a certain level of understanding of how hardware works. Existing compilers simply can’t translate a program optimized for CPU or GPU to FPGA.

--

--

Domi Yan
Domi Yan

No responses yet