仅对英特尔可见 — GUID: ysl1582846255736
Ixiasoft
仅对英特尔可见 — GUID: ysl1582846255736
Ixiasoft
A.3. 乔莱斯基分解(Cholesky Decomposition)库
Intel HLS Compiler附带的的Cholesky Decomposition库提供一个针对FPGA优化的模板化库,以用于将Hermitian(对称)正定矩阵分解为以下三角矩阵与共轭转置乘积.
头文件
#include ”HLS/cholesky_decompose.h”头文件是自述文档(self-documented)。您可以查看头文件以了解如何使用Cholesky分解库。为了获得高性能,请在编译组件时使用
变体
您可以调用四种不同的变体。所有变体都以ihc::cholesky命名空间命名。
Cholesky分解对矩阵进行大量迭代。为了获得最佳组件性能,组件需要低延迟访问矩阵迭代,并且矩阵必须矢量化。然而,该要求并不总是容易满足,因此两种变体允许您使用单独的存储器进行迭代分解并记录最终输出。
可用变体如下:
- cholesky_decompose_real(A_input, L_iter, n);
用于实值矩阵。
- cholesky_decompose_real(A_input, L_output, L_iter, n);
用于具有单独存储器的实值矩阵,以进行迭代分解和最终输出。
- cholesky_decompose_complex(A_input, L_iter, n);
用于复值(complex-valued)矩阵。
- cholesky_decompose_complex(A_input, L_output, L_iter, n);
用于具有单独存储器的复值矩阵,以进行迭代分解和最终输出。
参数
- A_input
-
指向大小为MATRIX_SIZE * MATRIX_SIZE的数组的指针,用于提供输入A矩阵。
其数据宽度和对齐应与矩阵中单个单元的数据宽度和对齐相匹配。
- L_iter
-
指向大小为MATRIX_SIZE * MATRIX_SIZE的数组的指针,用于保存程序可以迭代的L矩阵。
在3个参数的变体中,结果也都记录在此。其数据宽度和对齐方式应与矩阵中指定矢量化宽度的单元向量的宽度和对齐方式相匹配。
如果给定了指向组件内存的指针,则编译器应该能够自动进行优化。
- L_output
-
指向大小为MATRIX_SIZE * MATRIX_SIZE的数组的指针,用于记录最终矩阵的4个参数变体的结果。
其数据宽度和对齐应与矩阵中单个单元的数据宽度和对齐相匹配。
- n
-
实际矩阵大小。
该参数不应大于MATRIX_SIZE
模板参数
- FP_T
- 浮点数据类型。可以是float或double。
- VEC_SIZE_PWR
- 矢量化宽度的对数(底为2)。矢量化宽度为 ,用于访问L_iter矩阵并进行点积计算。
- INNER_SAFELEN值应用到partial_dot数组,
- OUTER_SAFELEN_OVERWRITE值应用于 L_iter矩阵
- INNER_SAFELEN
- INNER_SAFELEN值适用于partial_dot数组。其值大致与算法中索引计算和浮点加法的延迟相匹配。safelen()值不会随矩阵大小而增长。默认给定值为16,该值应为单精度的理想值。对于双精度,请对其相应增加。
- OUTER_SAFELEN_OVERWRITE
-
OUTER_SAFELEN_OVERWRITE值值适用于L_iter矩阵,并与列间依赖性相关。提供了safelen()值的估计值,以及该值随矩阵大小增长的估计值。但是,该模板参数的最佳值取决于时钟目标值、目标器件系列和所用精度。
使用此参数覆盖设置的safelen()值。
如果OUTER_SAFELEN_OVERWRITE=-1, 则将默认时钟对象的 Intel® Arria® 10器件上的safelen()值调整为单精度float数据类型。该调整还假设L_iter矩阵位于组件存储器中,并提供了适当的矢量化。