  Trends in hardware, the prevalence of the cloud, and the rise of highly
demanding applications have ushered an era of specialization that quickly
changes how data is processed at scale. These changes are likely to continue
and accelerate in the next years as new technologies are adopted and deployed:
smart NICs, smart storage, smart memory, disaggregated storage, disaggregated
memory, specialized accelerators (GPUS, TPUs, FPGAs), and a wealth of ASICs
specifically created to deal with computationally expensive tasks (e.g.,
cryptography or compression). In this tutorial, we focus on data processing on
FPGAs, a technology that has received less attention than, e.g., TPUs or GPUs
but that is, however, increasingly being deployed in the cloud for data
processing tasks due to the architectural flexibility of FPGAs, along with
their ability to process data at line rate, something not possible with other
types of processors or accelerators.
  In the tutorial, we will cover what FPGAs are, their characteristics, their
advantages and disadvantages, as well as examples from deployments in the
industry and how they are used in various data processing tasks. We will
introduce FPGA programming with high-level languages and describe hardware and
software resources available to researchers. The tutorial includes case studies
borrowed from research done in collaboration with companies that illustrate the
potential of FPGAs in data processing and how software and hardware are
evolving to take advantage of the possibilities offered by FPGAs. The use cases
include: (1) approximated nearest neighbor search, which is relevant to
databases and machine learning, (2) remote disaggregated memory, showing how
the cloud architecture is evolving and demonstrating the potential for operator
offloading and line rate data processing, and (3) recommendation system as an
application with tight latency constraints.
