# Data Formats and Math Fidelity

## Data Formats

### Tensix Data Format Support

Table below illustrates the various data formats supported by Tensix Unpacker/Packer:

No. |
Format |
Sign |
Exp |
Mantissa |
Magnitude |
Shared Exponent |
Floating Point |
---|---|---|---|---|---|---|---|

1 |
FP32 |
1-bit |
8-bit |
23-bit |
N/A |
No |
Yes |

2 |
TF32 |
1-bit |
8-bit |
10-bit |
N/A |
No |
Yes |

3 |
FP16-A |
1-bit |
5-bit |
10-bit |
N/A |
No |
Yes |

4 |
FP16-B |
1-bit |
8-bit |
7-bit |
N/A |
No |
Yes |

5 |
LF8 |
1-bit |
5-bit |
2-bit |
N/A |
No |
Yes |

6 |
INT32 |
1-bit |
N/A |
N/A |
31-bit |
N/A |
No |

7 |
INT16 |
1-bit |
N/A |
N/A |
15-bit |
N/A |
No |

8 |
INT8 |
1-bit |
N/A |
N/A |
7-bit |
N/A |
No |

9 |
BFP8-A |
1-bit |
5-bit |
7-bit |
N/A |
Yes |
Yes |

10 |
BFP8-B |
1-bit |
8-bit |
7-bit |
N/A |
Yes |
Yes |

11 |
BFP4-A |
1-bit |
5-bit |
3-bit |
N/A |
Yes |
Yes |

12 |
BFP4-B |
1-bit |
8-bit |
3-bit |
N/A |
Yes |
Yes |

13 |
BFP2-A |
1-bit |
5-bit |
1-bit |
N/A |
Yes |
Yes |

14 |
BFP2-B |
1-bit |
8-bit |
1-bit |
N/A |
Yes |
Yes |

Formats 1-5 are floating point formats

Formats 6-7 are integer formats

Formats 9-14 are floating point formats with a shared exponent – called Block Floating Point (BFP) formats

### Data Format Breakdown

## Block Floating Point

### BFP Breakdown

Block Floating Point (BFP) support different element sizes by varying the # bits used for the mantissa, BFP8/4/2 support 8b/4b/2b elements respectively.

The exponent is always shared across all elements in a block of 16 elements. Shared exponent supports A (5b padded to 8b) and B (8b) formats. The reason for an A format is to support compatibility with other 5b exponent formats such as Float16.

### BFP Data Conversion

When converting from Float to BFP. The shared exponent is calculated as follows:

Organize the data into 16-element blocks

Locate the next block to be converted

Find the maximum exponent across all elements in the block, append it to the shared exponent section

Left append 1 to each element’s mantissa to make the implied 1 explicit

Calculate the exponent delta between the maximum exponent and the exponent of each element in the block

Right shift the mantissa by the exponent delta

Truncate bits to fit in the BFP format mantissa size, optionally round before truncation

Append the converted BFP block of elments to the data section

Repeat from step 2 until all blocks are converted

### Block Storage Efficiency

Exponent section overhead remains the same across BFP8, BFP4, BFP2. Data section size reduces by 2x for every 2x reduction in element size (BFP8->BFP4->BFP2).

## Math Fidelity

Math Fidelity defines the number of phases being used to compute a high-precision multiplication using four low-precision multiplications. The higher the math fidelity, the more accuracte the result, but also the more compute cycles that are required. The supported fidelity phases range from lowest to highest: MathFidelity.LoFi, MathFidelity.HiFi2, MathFidelity.HiFi3, MathFidelity.HiFi4.

These fidelity phases map to the order that the mantissa bits are consumed from the inputs on SrcA and SrcB from Most Significant Bit (MSB) to Least Significant Bit (LSB):

Fidelity Phase 0 (MathFidelity.LoFi`): SrcA MSBs, SrcB MSBs

Fidelity Phase 1 (MathFidelity.HiFi2): SrcA LSBs, SrcB MSBs

Fidelity Phase 2 (MathFidelity.HiFi3): SrcA MSBs, SrcB LSBs

Fidelity Phase 3 (MathFidelity.HiFi4): SrcA LSBs, SrcB LSBs