【技术实现步骤摘要】
稀疏Cholesky分解硬件加速系统及其求解方法
[0001]本专利技术涉及
FPGA
硬件加速的
,尤其是指一种面向嵌入式平台的稀疏
Cholesky
分解硬件加速系统及其求解方法
。
技术介绍
[0002]近年来,稀疏矩阵的
Cholesky
分解方法在嵌入式平台已经得到了较为广泛的应用
。
稀疏
Cholesky
分解是将稀疏对称正定矩阵分解为一个稀疏矩阵与其转置乘积的方式
。
目前,移动机器人领域的局部路径规划
、
实时定位和地图构建等方法均涉及对称正定稀疏矩阵的分解操作,由此产生了对稀疏
Cholesky
算法在嵌入式平台上计算的性能和实时性需求
。FPGA
硬件以其流水线化和资源可重配置的特性,能够为上述稀疏矩阵分解算法提供高效的计算方案,并集成到嵌入式平台的运算流程中,解决当前嵌入式平台处理分解操作时性能受限的问题,为各类上层应用实现硬件加速功能
。
[0003]Cholesky
分解法使用递归的思想,对于待分解矩阵
A
,对该矩阵进行分块,可以得到如下公式:
[0004][0005]其中,
a
11
为矩阵
A
中位于第1行第1列的元素,
A
21
为矩阵
A
第1行对角线以下元素的列向量,
A
22r/>为阶数是
n
‑1的方阵,表示矩阵
A
除第1行第1列外形成的矩阵,为
A
21
的转置
。
矩阵
A
进行
Cholesky
分解的结果同样可以通过以下分块形式表示:
[0006][0007]其中,
L
为矩阵
A
分解结果中的下三角矩阵,
L
T
为
L
的转置,
l
11
为矩阵
L
第1行第1列的元素,
L
21
为矩阵
L
第1行对角线以下元素的列向量,
L
22
为阶数是
n
‑1的方阵,表示矩阵
L
除第1行第1列外形成的矩阵,为
L
21
的转置,为
L
22
的转置
。
[0008]根据矩阵分解公式
A
=
LL
T
,可以得到以下公式:
[0009][0010]由此可以求出
A
22
和
L
21
。
同样地,对
L
22
的求解也能够使用
Cholesky
方法实现
。
因此,递归进行上述计算流程,即可完成对
A
的分解
。
[0011]上述分解方法从待分解矩阵
A
的第一列开始,顺序向后分解各列,各列的分解依赖于前一列分解对矩阵的修改
。
对于稀疏矩阵,由于矩阵中大部分位置由零元素填充,一列的分解可能不会对后续各列产生影响
。
因此,在稀疏
Cholesky
分解过程中,各列一般不存在严格数据依赖关系,这为不同列的并行分解提供了很好的机会
。
为了实现稀疏矩阵的并行分
解,目前针对稀疏
Cholesky
分解方法的软硬件加速系统通常利用
Multifrontal
方法处理各列在分解计算时的数据依赖关系,将计算中间值在依赖图上的结点间传递,以消除对原矩阵读写访问的竞争,从而在各类计算平台上实现分解并行化,提高算法的吞吐量和对硬件资源的利用率
。
[0012]Multifrontal
方法利用消去树管理各个结点在分解过程中的依赖关系
。
若将各个列视为图上的一个结点,则可以形成一张称为消去树的依赖关系图
。
其中,消去树上父结点对应列将依赖于子结点分解过程中对原矩阵的修改
。
对于分解过程的某一状态而言,将消去树上入度为0的结点表示为一个集合,则该集合中的所有结点可以并行完成分解
。
在符号分解之后的待分解矩阵
A
′
中,若将当前分解列对角线及对角线以下元素的行索引形成的集合表示为集合
R
,则消去树中该列子结点对应列只可能对集合
E
=
{a
′
ij
|i∈R,j∈R}
中的元素产生修改,其中,
i,j
表示集合
R
中的元素,
a
′
ij
表示待分解矩阵
A
′
中位于第
i
行第
j
列的元素
。Multifrontal
方法利用
Frontal
矩阵消除了子结点计算过程中对原矩阵进行更新时的竞争条件
。Frontal
矩阵存储结点分解操作所涉及矩阵元素的最新值,其与上述集合
E
中元素位置一一对应
。
结点的分解操作开始时,其从自身
Frontal
矩阵获取元素的最新值
。
在需要修改后续列矩阵元素时,其将更新值暂存于更新矩阵中,以待更新消去树父结点的
Frontal
矩阵,从而避免其余结点修改原矩阵相同元素时引起的竞争问题
。
[0013]FPGA
硬件平台能够为稀疏
Cholesky
分解提供性能提升
。
利用
FPGA
硬件平台的数据流模型,各个模块间可以实现并行化计算
。
具体而言,
FPGA
硬件中的各个模块间使用
FIFO
通道传递计算中间值,位于通道下游的模块基于
FIFO
通道进行同步,从通道中实时接收上游模块的输出值且并行完成运算,上述模型称为数据流模型
。
目前,现有基于
FPGA
硬件平台的稀疏
Cholesky
分解加速方案通常面向大规模科学计算问题且针对服务器平台设计
。
此类方案利用平台资源量充足的特点,将一部分中间结果存储至片上
SRAM
中,在单个时钟周期内完成多个元素的运算,达到最大化吞吐量的效果
。
考虑到嵌入式
FPGA
加速平台一般拥有有限的硬件资源,难以在片上
SRAM
中完整存储中间结果,本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.
面向嵌入式平台的稀疏
Cholesky
分解硬件加速系统,其特征在于,包括:
FPGA
侧硬件部分,用于实现稀疏
Cholesky
分解算法中对矩阵单列的分解工作,生成单列的分解结果和更新矩阵;该
FPGA
侧硬件部分利用数据流模型同步不同速率的内部模块,通过
FIFO
通道实现模块间的数据传递,将计算的中间结果以元素为单位推送至通道中,从而实现模块间计算的并行化;
CPU
侧软件部分,用于接收输入的待分解矩阵信息,输出任务调度序列,在每轮运算中为
FPGA
侧硬件部分分配内存区域
、
生成辅助数据以及执行按需
CPU
回退计算工作;该
CPU
侧软件部分于每一列分解开始时完成内存管理以及辅助数据生成,当待分解列满足
FPGA
侧硬件部分的计算条件时,使用
AXI
总线将上述内存区域的地址及辅助数据传输至
FPGA
侧硬件部分,启动
FPGA
侧硬件部分完成单列分解;反之,该
CPU
侧软件部分采用
CPU
回退计算策略,于
CPU
实现单列分解计算
。2.
根据权利要求1所述的面向嵌入式平台的稀疏
Cholesky
分解硬件加速系统,其特征在于:所述
FPGA
侧硬件部分包括矩阵输入及基本运算模块
、
更新矩阵生成模块和扩展加和模块,其中:所述矩阵输入及基本运算模块用于从主机
DDR
内存中读取待分解矩阵的一列,随后分别对该列的对角线及以下的各个元素执行浮点平方根和除法运算,生成分解结果,最终将结果写回
DDR
内存的同时推送至
FIFO
通道中;所述更新矩阵生成模块用于从矩阵输入及基本运算模块中接收处理结果,计算结果集合的笛卡尔积以生成元素对集合,进而计算各个元素对自身两个量的乘积;上述乘积将与消去树父结点
Frontal
矩阵相应位置元素相减,生成更新矩阵并推送至连接下游模块的
FIFO
通道;所述扩展加和模块用于从更新矩阵生成模块接收更新矩阵,借助
CPU
侧软件部分输入的辅助数据以及内存中消去树父结点当前
Frontal
矩阵数据完成稀疏矩阵扩展加和操作,生成消去树父结点新的
Frontal
矩阵,进而通过
AXI
总线将结果写回
DDR
内存
。3.
根据权利要求2所述的面向嵌入式平台的稀疏
Cholesky
分解硬件加速系统,其特征在于:所述矩阵输入及基本运算模块包括矩阵输入子模块
、
基本运算子模块以及结果写回子模块,其中:所述矩阵输入子模块通过
AXI
总线从主机
DDR
内存中读入指定长度的一段数据,并将该段数据处理后推送至模块内
FIFO
通道中;该矩阵输入子模块启动时,其通过
CPU
侧软件部分传入的任务控制位判断当前结点是否为消去树中的叶结点;若为叶结点,则该矩阵输入子模块将待分解列所有非零元素输出至
FIFO
通道
Q
FF
;若不为叶结点,则该矩阵输入子模块将当前结点
Frontal
矩阵的首列与待分解列所有非零元素加和后输出至
FIFO
通道
Q
FF
,并将当前结点
Frontal
矩阵的后续列输出至
FIFO
通道
Q
FA
;由于
Frontal
矩阵为对称矩阵,需要输出的首列元素个数为矩阵的阶数
Fn
,后续列元素个数为
Fn
×
(Fn
‑
1)
÷2;同时,该矩阵输入子模块将消去树上当前结点父结点的
Frontal
矩阵输出至
FIFO
通道
Q
PF
;所述基本运算子模块与矩阵输入子模块通过
FIFO
通道
Q
FF
相连接;基本运算子模块从
Q
FF
中读入当前结点
Frontal
矩阵首列,读入的第一个元素为该列的对角线元素
trig
;该基本运算子模块使用平方根逻辑电路计算对角线元素的平方根并将其推送至两个
FIFO
通
道
Q
L
、Q
FFD
;上述两个
FIFO
通道均用于存放当前列分解结果,其中,通道
Q
L
与结果写回子模块相连接,通道
Q
FFD
与更新矩阵生成模块相连接;之后,基本运算子模块对
Frontal
矩阵首列对角线以下的所有元素
t
i
计算浮点数除法
t
i
÷
trig
,并同样将计算结果推送至上述两个
FIFO
通道
Q
L
、Q
FFD
中;所述结果写回子模块与矩阵输入子模块通过
FIFO
通道
Q
L
相连接;在
FPGA
侧硬件部分启动时,
CPU
侧软件部分向
FPGA
侧硬件部分传入存放计算结果的内存基址以及当前分解列对应该地址的偏移量,结果写回子模块通过偏移量计算当前分解列对应计算结果存放的实际内存地址,其中,实际内存地址为基址加偏移量得到的地址;之后,该结果写回子模块通过
AXI
总线向该实际内存地址顺序写入
Q
L
的元素
。4.
根据权利要求3所述的面向嵌入式平台的稀疏
Cholesky
分解硬件加速系统,其特征在于:所述更新矩阵生成模块包含待处理元素发送子模块和元素计算子模块,其中:所述待处理元素发送子模块内部使用
BRAM
暂存结点
Frontal
矩阵首列元素;启动时,待处理元素发送子模块使用长度为结点
Frontal
矩阵阶数的循环从
FIFO
通道
Q
FFD
读取首列元素,并将元素依次存储至
BRAM
中;完成首列元素存储后,待处理元素发送子模块使用双层嵌套循环向
Q
D
推送元素对,其中,
Q
D
表示存储首列元素集合笛卡尔积的
FIFO
通道;从
FIFO
通道
Q
FFD
中接收的元素为
F
first
=
{f1,f2,...,f
n
}
,其中,
f
n
表示接收的第
n
个元素,即下三角
Frontal
矩阵首列的第
n
个元素,
F
first
表示下三角
Frontal
矩阵首列元素的集合;去除对角线元素后,得到集合
F
f
′
irst
=
F
first
\f1=
{f2,f3,...,f
n
}
;嵌套循环用于推送集合中的元素对,其中,
x,y
为
Frontal
矩阵首列元素的索引,在
[2,n]
的范围内取得,并分别用于外层和内层循环;表示
x,y
的取值均为正整数;所述元素计算子模块与待处理元素发送子模块通过
FIFO
通道
Q
D
相连接;元素计算子模块从
Q
D
中读入待计算元素对
(f
x
,f
y
)
,计算元素对浮点乘法结果值
m
=
f
x
×
f
y
;之后,该元素计算子模块使用长度为更新矩阵元素数量的循环从
FIFO
通道
Q
FA
中读入
Frontal
矩阵后续列元素值
q
,计算
q
‑
m
的值并将其推送至
FIFO
通道
Q
U
,其中,
Q
U
表示存储更新矩阵的
FIFO
通道
。5.
根据权利要求4所述的面向嵌入式平台的稀疏
Cholesky
分解硬件加速系统,其特征在于:所述扩展加和模块包含辅助矩阵扩展子模块以及加和运算子模块,其中:所述辅助矩阵扩展子模块从
AXI
总线中读取
CPU
侧软件部分输入的辅助矩阵首列,扩展得到完整的辅助矩阵;该辅助矩阵扩展子模块启动时,将读取的辅助矩阵首列元素存入
BRAM
中;之后,该辅助矩阵扩展子模块通过辅助矩阵首列元素计算辅助矩阵后续列;辅助矩阵
P
中的元素取0值或1值,
P
中行列索引为
(r,c)
的元素
p
r,c
由首列元素
p
r,1
和
p
c,1
通过逻辑与操作得到;计算得到的辅助矩阵后续列按顺序推送至
FIFO
通道
Q
P
中,其中,
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。