The Vitis database library targets to help SQL engine developers to accelerate query execution. It provides three layers of APIs, namely L1/L2/L3. Each tackles different parts of the whole processing.
- L3 provide pure software APIs for:
- Define data structures to describe input table/output table/operation types and parameters.
- Provide a combination of operations for acceleration. These combinations are commonly used and are easy to fit into the whole execution plan.
- Manage multiple FPGA cards automatically, including initialization of OpenCL|trade| context, command queue, kernels, and buffers.
- Break down incoming job, distributing sub jobs among all FPGA cards, pipeline data transfers, and kernel executions.
- L2 APIs are kernels running on FPGA cards. Each time called, they will finish certain processing according to input configs. L2 APIs are combinations of multiple processing units, each unit consists of multiple processing stages. In this way, kernels could both process multiple data at the same time and apply multiple operations to the same data. L2 API design is subject to resource constraints and can differ according to FPGA cards.
- L1 APIs are basic operators in processing, like filter and aggregator/bloom filter/hash join. They are all highly optimized HLS designs providing optimal performance. They are all template designs which make them easier to scale and fit into different resource constraints.