The configuration buffer basically programs the kernel at runtime. It toggles execution step primitives on or off, and defines the filter condition. The details are documented in the following figure:
14 lines of 512-bit configuration data are used in unified kernel command. From address 0x00 to 0x03, the 512-bit configurations are used to setting the general configuration, join configuration, partition configuration, and bloom filter configuration respectively. 0x04 is reserved for Aggregate flow. As all of the different flows shares the same dynamic filtering module, same configuration lines from 0x06 to 0x13 are used.
For the current implementation of 3-in-1 GQE, the supported flows can be configured through:
Flow | Bloom filter build/probe flag | Dual key | Join build/probe flag | Aggr on/off | Part on/off | BF on/off | Join on/off | Bypass on/off |
Join build | 0 | 0/1 | 0 | 0 | 0 | 0 | 1 | 0 |
Join probe | 0 | 0/1 | 1 | 0 | 0 | 0 | 1 | 0 |
Bloom filter probe | 1 | 0/1 | 1 | 0 | 0 | 1 | 0 | 0 |
Bloom filter build / Part | 0 | 0/1 | 1 | 0 | 1 | 1 | 0 | 0 |
Bloom filter probe / Part | 1 | 0/1 | 1 | 0 | 1 | 1 | 0 | 0 |
The Dual key
option instructs the kernel to use only the first (by setting to 0) or both of the key columns (by setting to 1) in the flow.
There is no need for users to configure the 3-in-1 GQE by declaring and setting the complicated configuration bits themslves, software APIs that can be used to configure the 3-in-1 GQE are provided in Unified Kernel Command. They are extremly friendly to the software developers.
Caution
Directly bypass is not supported in the current 3-in-1 as resources are very limited on U50.
Up to 3 columns are supported for both input table A and B, which may consist of 1-2 key columns and 1 payload column. The column enable flags are set in bit 10-15. There are 4 output columns designed in 3-in-1 GQE as JOIN needs emit both the 1-2 key and the payload from table A and table B, the corresponding output column enable flags are 16-23 bits.
Payload column data, which is normally used as rowID column, can be assigned from user input buffer or auto-generated within the kernel. The rowID generation configuration is controlled by bit 30-33. If generating rowID inside the kernel is set to 1
, the validation enable flag also need be configured as a combination to determine whether to use the validation-bit column or not.
The columns are indexed starting from 0
. -1
is used as a special value to instruct the table scanner to feed zeros for that column.
The dynamic filtering configuration is aligned to lower bits. Build/probe table’s filter configurations are located in address 0x06-0x09 / 0x10-0x13 respectively.