项目经历叙述流程

2020-05-14  本文已影响0人  6d372579d253

GATK软件pairhmm算法FPGA加速(altera arria 10芯片 xilinx Kintex ultrascale ku115芯片) 硬件负责人 2017.9 - 2018.9

GATK是MIT博德研究所研发的基因数据挖掘的软件套件。其中pairhmm算法部分是一个计算密集型的矩阵运算。据统计,针对肿瘤基因数据,原版软件该部分耗时占总耗时约90%.该算法经过FPGA加速以后,速度提升了42倍。成果得到了北京吉因家公司的认可。本人主要工作如下: (原版66.73h fpga 8channelpu16 96min)

设计亮点:

难点:

pairhmm硬件版本移植华为云FPGA服务器 (平台华为云vu9pFPGA云服务器)主要负责人 2018.9 - 2018.12

将上一个工程移植到华为云的vu9pFPGA云服务器的DPDK平台。在华为云FPGA套件开发人员的大力支持下成功移植。依托华为云的VU9P平台丰富的资源将计算通道数成功提升了3分之一。本人主要工作如下:

smith-waterman算法FPGA加速 (xilinx Kintex ultrascale ku115芯片 )硬件负责人 2019.1 - 至今

是一种进行局部序列比对(相对于全局比对)的算法,用于找出两个核苷酸序列或蛋白质序列之间的相似区域。其本质还是矩阵运算。FPGA加速以后的运算速度与纯软件在相同CPU下满负荷运行速度相比提升了20倍。本人负责所有FPGA模块开发主要工作包括:

叙述顺序:

GATK算法是生物业界非常成熟的基因分析套件。pairhmm算法是其中非常重要的一步。用来计算两个基因序列的匹配最大似然概率。该算法是一个浮点矩阵运算。计算密集型。在原软件中大概占50%以上的耗时,对于肿瘤基因数据而言,耗时更多。所以我们决定在FPGA上对该部分进行加速
总体介绍。整个工程的工作流程是由PC通过PCIE接口传输数据到FPGA,然后FPGA使用数据进行计算,然后通过FPGA回传计算结果。

具体来说,整个工程划分分为PC与FPGA通信模块,数据分发模块,核心算法模块,结果回传模块。

通信模块

PC与FPGA通信模块中。我主要用xilinx提供的PCIE-DMA IP管理接口。然后一个4GByte的DDR4作为buffer。我们再该buffer内部划分出了两块1Gbyte的区域作为ringbuffer用于数据下行和数据上行。PC通过xilinx官方提供的API可以向DDR内写入数据或者读取数据。FPGA片上逻辑通过AXI接口对DDR进行访问。

数据解析分发模块

当PC向DDR发送数据后,片上的数据分发模块会读取DDR中的待处理数据然后进行解析,将源数据包解析为。并发送到8个不同的计算通道。使8个计算通道可以并行计算。

核心计算模块

核心算法模块包含控制模块和计算模块。一个控制模块功能是接收分发的一个矩阵数据并对该矩阵的计算过程进行全程控制。计算模块接受控制模块发出的数据进行计算,一个计算模块的基础计算单元简称为PE每12个周期可以计算出矩阵中一个点的值。根据这个特点。采用流水线结构。一个PE可以同时计算12个矩阵。所以每个计算通道。都可以同时计算12个矩阵。也就是整个系统可以同时计算12x8=96个矩阵。然后根据该算法的特点可以采用伸缩阵列的方法,将计算复杂度由m*n降为m+n。

回传模块

计算出来的结果逐级上传。最后汇总然后存入DDR的上行区域。然后PC将数据可以直接取走。

难点:

频率的提升,和片上资源的充分利用(最高跑到250Mhz,回传模块使用100Mhz),如何让implementation的时序过关。
采用过的方法:尝试各种实现策略。(本地采用perfomance explore 华为云采用 Net_delay_low)
复制寄存器,以及组合逻辑中间添加寄存器。都是采用过的手段。

实际上我的第一个项目隶属于我们实验室所做的一个大项目。即下一代基因测序分析加速。目前流行的基因分析套件是GATK。该套件将测序仪测得的片段基因匹配到参考基因序列上去。然后通过计算得到测试基因可能存在的变异位点。从而找出测试人基因中可能存在的变异。然后医生根据测试结果即可使用特定靶向药。所有该技术对精准医疗有极大的意义。但是目前的GATK存在的一个问题就是计算速度太慢。原版软件做一个癌症分析,需要70小时左右。其中百分之80的时间是耗费在了pairhmm算法这一步。然后这一步算法主要是计算两条基因序列的极大似然概率,如果输入基因序列长度为m,参考基因序列长度长度为n,那么我们就需要完成m*n轮计算。而且每一轮计算都包含了12次浮点运算。所以这个计算量相当大。

经过加速后

这12次的浮点运算按照计算的先后顺序,可以分为2步完成。按照我们对浮点运算器的配置,这两步计算一共需要12个周期来完成

8_channel_code_PU16.png

图像畸变IP设计

应用场景是VR显示。我们的芯片是一个VR硅基OLED驱动芯片。如果我们的芯片在安装的时候出现些许偏差。当然这个偏差不会很大。但是少许的偏差就会导致图像出现畸变。那么我们的IP就是要对这个畸变做一个补偿。输入是4个控制点的原坐标以及补偿以后的4个控制点坐标。
为了实现这个IP我将开发阶段分了三个步骤。
第一个步骤是算法验证。首先高级语言验证算法的正确性。这一步我是在MATLAB上完成的。因为后面的双线性插值步骤涉及到小数处理。这里我们采用定点数来处理小数。最终经过反复的测试使用了两套定点化的方案,其中一个是12,有两个数使用了18来表示。在这个定点化的方案下,实现的效果和浮点实现的效果一致。算法验证的最后阶段是使用投影仪做实际验证。先调整投影仪的角度,使投影仪投射一个畸变的图像。然后通过我们的MATLAB平台处理一张补偿后的图片。然后通过投影仪去显示。最终投影仪显示的是一个完好的图像。这一步也已完成

难点:

1.除法器的实现:
我最终选择的方式是使用查找表的方式来将除法转化为乘法。根据测试我们发现。除数的范围是在0.875-1.25之间。然后我们采用的定点精度是用12位来表示小数。所以如果用完整的表来实现需要1024+512个表项。这个开销不小。为了减小表的大小。我们采用了插值法。把每个表项之间的间距为8.然后通过插值实现间距为1的效果。

  1. Line Buffer的实现
    给我的是一个单读端口RAM。但是双线性插值需要一个插值点周围4个pixel的灰阶。那么如何实现一个周期内获得4个点的坐标是一个具有挑战性的问题
上一篇 下一篇

猜你喜欢

热点阅读