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 combination of operations for acceleration. These combinations are commonly used and easy to fit into the whole execution plan.
- Manage multiple FPGA cards automatically, including initialization of OpenCL 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 may differs according to FPGA cards.
- L1 APIs are basic operators in processing, like filter, aggregator / bloom filter / hash join. They’re all highly optimize HLS design, providing optimal performance. They’re all template design, make them easier to scale and fit into different resource constraint.