  FPGAs are an attractive type of accelerator for all-purpose HPC computing
systems due to the possibility of deploying tailored hardware on demand.
However, the common tools for programming and operating FPGAs are still complex
to use, specially in scenarios where diverse types of tasks should be
dynamically executed. In this work we present a programming abstraction with a
simple interface that internally leverages High-Level Synthesis, Dynamic
Partial Reconfiguration and synchronisation mechanisms to use an FPGA as a
multi-tasking server with preemptive scheduling and priority queues. This leads
to a better use of the FPGA resources, allowing the execution of several
kernels at the same time and deploying the most urgent ones as fast as
possible. The results of our experimental study show that our approach incurs
only a 1.66% overhead when using only one Reconfigurable Region (RR), and 4.04%
when using two RRs, whilst presenting a significant performance improvement
over the traditional non-preemptive full reconfiguration approach.
