一种基于GPU的高阶数字FIR滤波器频域并行处理实现方法.pdf

上传人:Y94****206 文档编号:1036303 上传时间:2018-03-27 格式:PDF 页数:11 大小:440.38KB
返回 下载 相关 举报
摘要
申请专利号:

CN201110204946.6

申请日:

2011.07.21

公开号:

CN102340296A

公开日:

2012.02.01

当前法律状态:

终止

有效性:

无权

法律详情:

未缴年费专利权终止IPC(主分类):H03H 17/02申请日:20110721授权公告日:20131225终止日期:20160721|||授权|||实质审查的生效IPC(主分类):H03H 17/02申请日:20110721|||公开

IPC分类号:

H03H17/02; G06F9/38

主分类号:

H03H17/02

申请人:

东北大学秦皇岛分校

发明人:

汪晋宽; 张春宏; 韩英华; 宋昕; 高静

地址:

066004 河北省秦皇岛市经济技术开发区泰山路143号

优先权:

专利代理机构:

北京理工大学专利中心 11120

代理人:

李爱英;郭德忠

PDF下载: PDF下载
内容摘要

为解决高阶数字FIR滤波器并行处理效率的问题,提出了一种高效的、适合GPU体系结构的高阶数字FIR滤波器并行处理算法,该方法采用重叠保留方法结合GPU自身结构特点优化实现高阶数字FIR的频域并行化处理。通过计算FIR频率响应系数,将待处理的输入数据传送给GPU;数据重叠搬移;滤波计算处理;数据合并搬移;将合并搬移结果Y={Y0,Y1,....,Yk-1}传送到主机内存等步骤完成高阶数字FIR滤波器频域并行处理。对比在CPU上单线程所实现的FIR频域重叠保留方法,其吞吐率,即每秒处理样点的数量有着极大地提高,典型的加速比在100倍以上。

权利要求书

1: 一种基于 GPU 的高阶数字 FIR 滤波器频域并行处理实现方法, 其特征在于 : 根据通 用图形处理器 GPU 众核体系结构的特点, 将重叠保留方法的处理过程划分为六个核函数 : 频响计算核函数、 重叠搬移核函数、 傅里叶变换核函数、 乘法核函数、 傅里叶逆变换核函数、 合并搬移核函数 ; 实现该方法的具体步骤如下 : 步骤一、 确定有限冲击响应 FIR 频率响应系数 ; 当给定的响应系数为 FIR 的冲击响应系数 h = {h(0), h(1), ......, h(M-1)} 时, 将 FIR 的冲击响应系数 h = {h(0), h(1), ......, h(M-1)}, 经过尾部填 0 扩展至长度为 N, 将扩展 后的系数传送给 GPU, 启动频响计算核函数对 FIR 的冲击响应系数 h 进行 N 点的傅里叶变 换, 结果为有限冲击响应 FIR 频率响应系数 H = {H(0), H(1), ......, H(N-1)}, 保存在 GPU 内存中 ; 当给定的响应系数为 FIR 频率响应系数 H = {H(0), H(1), ......, H(N-1)} 时, 将频率 响应系数 H 传给 GPU, 并保存在 GPU 内存中, 保存时, 第一个字节的地址为存储器位宽的整数 倍; 步骤二、 将待处理的输入数据传送给 GPU ; 将一块长度为 Nblk 的待滤波样点数据 X = {B0, B1, ..., Bk-1} 从主机内存中传入 GPU 的内 存中, 其中 Nblk = k*L, k 为整数, L 为每个数据块的长度 ; 其中 Bi = {Ci, Di}, 0 ≤ i ≤ k-1, Ci 表示在 Bi 中起点为 0, 而长度为 L-M+1 的连续样点数据块, Di 表示在 Bi 中起点为 L-M+1, 而长度为 M-1 的连续样点数据块 ; 步骤三、 数据的重叠搬移 ; 启动重叠搬移核函数完成数据重叠搬移操作, 即将待滤波样点数据 X = {B0, B1, ..., Bk-1} 以及输入的长度为 M-1 的初始状态数据 S0, 重叠搬移为 E = {E0, E1, ..., Ek-1}, 其中 E0 = {S0, B0}, 其中, S0 为上一次处理待滤波样点数据 X 时其中的 Dk-1, 对于 i ≠ 0 的数据块 Ei = {Di-1, Bi}, 同时将 Dk-1 搬移到中 S0, 作为下一次处理过程的初始状态数据使用 ; 重 叠 数 据 的 搬 移 分 为 三 个 步 骤, 第 一 步, 启 动 M-1 个 线 程 同 时 工 作, 线程 Ti(0 ≤ i ≤ M-2) 完成将 S0 中第 i 个数据搬移到重叠搬移结果数据 E0 的 S0 中的第 i 的位 置, 然后再完成将 Dk-1 中第 i 个数据搬移到 S0 中的第 i 的位置 ; 第二步, 启动 L 个线程同时 工作, 线程 Ti(0 ≤ i ≤ L-1) 完成将待滤波样点数据 X 的 Bj(0 ≤ j ≤ k-1) 块中第 i 个数据 搬移到重叠搬移结果数据 E 的 Bj(0 ≤ j ≤ k-1) 块中的第 i 的位置 ; 第三步, 启动 M-1 个线 程同时工作, 线程 Ti(0 ≤ i ≤ M-2) 完成将待滤波样点数据 X 的 Dj(0 ≤ j ≤ k-1) 块中第 i 个数据搬移到重叠搬移结果数据 E 的 Dj(0 ≤ j ≤ k-1) 块中的第 i 的位置 ; 步骤四、 滤波计算处理 ; 启动傅里叶变换核函数, 完成对每个 Ei 做 N 点的傅里叶变换运算, 得到运算结果 F = {F0, F1, ..., Fk-1} ; 然后启动乘法核函数完成 Fi 与系数 H 相乘操作, 即 Ii = Fi*H ; 然后启动傅 里叶逆变换核函数, 完成对每个 Ii 做 N 点的傅里叶逆变换运算, 并得结果 R = {R0, R1, ..., Rk-1} ; 在启动乘法核函数核函数时, 启动 N 个线程同时工作, 线程 Ti(0 ≤ i ≤ N-1) 完成 将 Fj(0 ≤ j ≤ k-1) 中第 i 个数据与频响系数 H 中的第 i 个系数相乘, 并将结果保存在 Rj(0 ≤ j ≤ k-1) 块中的第 i 的位置 ; 2 步骤五、 数据的合并搬移 ; 启动合并搬移核函数完成数据的合并搬移操作, 即将结果数据 R = {R0, R1, ..., Rk-1} 合并搬移为 Y = {Y0, Y1, ..., Yk-1}, 其中 Ri = {Zi, Yi}, 其中 Zi 表示在 Ri 中起点为 0, 长度为 M-1 的连续数据点所组成的数据块, Yi 表示在 Ri 中起点为 M-1, 长度为 L 的连续数据点所组 成的数据块 ; 在启动合并搬移核函数时, 启动 L 个线程同时工作, 线程 Ti(0 ≤ i ≤ L-1) 完成将乘积 Rj(0 ≤ j ≤ k-1) 中第 M-1+i 个数据搬移到结果数据 Yj(0 ≤ j ≤ k-1) 块中的第 i 的位置, 其中, 启动的 L 个线程在同一时刻搬运长度为 L 的连续数据块 ; 步骤六、 将合并搬移结果 Y = {Y0, Y1, ..., Yk-1} 传送到主机内存, 若还有剩余数据需要 处理重复步骤二, 否则结束处理过程, 完成高阶数字 FIR 滤波器频域并行处理。

说明书


一种基于 GPU 的高阶数字 FIR 滤波器频域并行处理实现方 法

    【技术领域】
     本发明涉及一种高阶数字 FIR 滤波器频域并行处理实现方法, 特别是一种基于 GPU 的高阶数字 FIR 滤波器频域并行处理实现方法, 属于数字信号处理领域。技术背景
     在数字信号处理系统中, 数字有限冲击响应 (FIR) 滤波器是最为核心和基础的数 字信号处理算法之一。由于数字 FIR 滤波器, 特别是高阶的数字 FIR 滤波器的计算复杂度 是相当高的, 因而高效的、 并行化的 FIR 实现方法对于加速 FIR 的处理是极其至关重要的。
     目前, 随着通用图形处理器 (GPU) 技术的迅猛发展, GPU 正在被广泛地应用于众多 的应用领域之中, 由于 GPU 所具有的众核体系结构, 使其能够提供十分强大的计算能力。
     因此, 对于 FIR 滤波器这种计算复杂度较高的算法, 通过设计合理高效且适合 GPU 结构的并行算法, 就可以使得 FIR 处理在 GPU 上得到很高的加速比, 从而极大地缩短其处理 时间。因此, 研发适合于 GPU 体系结构的数字 FIR 滤波器并行处理算法, 具有很高的实际价 值和现实意义。 发明内容
     本发明所要解决的技术问题是高阶数字 FIR 滤波器并行处理效率的问题, 提出了 一种高效的、 适合 GPU 体系结构的高阶数字 FIR 滤波器并行处理算法, 该方法采用重叠保留 方法结合 GPU 自身结构特点优化实现高阶数字 FIR 的频域并行化处理。
     为了发挥 GPU 众核的体系结构, 需要将重叠保留方法的计算过程加以分解, 并合 理地将计算负载分配到在 GPU 上执行的每个线程中, 同时还要优化各个线程对于 GPU 内存 的访问, 以最大限度地利用 GPU 所提供的存储带宽。 在 GPU 的编程模型中, 核函数 (kernel) 是由编程人员定义, 并可以在 GPU 上由众多线程加以并行执行的功能单元。作为 CPU 加速 器的 GPU, 是典型的 fork-jion 并行模式。 在主机端启动核函数时, 通过指定调用配置参数, 编程人员可以控制启动执行核函数的线程数量以及线程的组织结构。 如何将重叠保留方法 中的计算过程分解成为不同的核函数, 并确定各个核函数所要完成的处理, 对于整个算法 的并发执行效率起着至关重要的影响。如果核函数内部控制流比较复杂, 则会大大地降低 GPU 的并行效率 ; 然而如果核函数功能过于简单, 将导致核函数的数量增加, 从而增大启动 核函数的总体时间, 因此同样会降低 GPU 并行效率。
     因此, 根据 GPU 的自身结构特点, 以及重叠保留方法所需的数据处理过程特性, 提 出了优化的核函数划分方法, 即将重叠保留方法的处理划分为六个核函数 : 频响计算核函 数、 重叠搬移核函数、 傅里叶变换核函数、 乘法核函数、 傅里叶逆变换核函数、 合并搬移核函 数, 算法的总体处理过程如下 :
     根据通用图形处理器 GPU 众核体系结构的特点, 将重叠保留方法的处理过程划分 为六个核函数 : 频响计算核函数、 重叠搬移核函数、 傅里叶变换核函数、 乘法核函数、 傅里叶逆变换核函数、 合并搬移核函数 ;
     实现该方法的具体步骤如下 :
     步骤一、 确定有限冲击响应 FIR 频率响应系数 ;
     当给定的响应系数为 FIR 的冲击响应系数 h = {h(0), h(1), ......, h(M-1)} 时, 将 FIR 的冲击响应系数 h = {h(0), h(1), ......, h(M-1)}, 经过尾部填 0 扩展至长度为 N, 将扩展后的系数传送给 GPU, 启动频响计算核函数对 FIR 的冲击响应系数 h 进行 N 点的傅里 叶变换, 结果为有限冲击响应 FIR 频率响应系数 H = {H(0), H(1), ......, H(N-1)}, 保存在 GPU 内存中 ;
     当给定的响应系数为 FIR 频率响应系数 H = {H(0), H(1), ......, H(N-1)} 时, 将 频率响应系数 H 传给 GPU, 并保存在 GPU 内存中, 保存时, 第一个字节的地址为存储器位宽的 整数倍 ;
     步骤二、 将待处理的输入数据传送给 GPU ;
     将一块长度为 Nblk 的待滤波样点数据 X = {B0, B1, ..., Bk-1} 从主机内存中传 入 GPU 的内存中, 其中 Nblk = k*L, k 为整数, L 为每个数据块的长度 ; 其中 Bi = {Ci, Di}, 0 ≤ i ≤ k-1, Ci 表示在 Bi 中起点为 0, 而长度为 L-M+1 的连续样点数据块, Di 表示在 Bi 中 起点为 L-M+1, 而长度为 M-1 的连续样点数据块 ;
     步骤三、 数据的重叠搬移 ;
     启动重叠搬移核函数完成数据重叠搬移操作, 即将待滤波样点数据 X = {B0, B1, ..., Bk-1} 以及输入的长度为 M-1 的初始状态数据 S0, 重叠搬移为 E = {E0, E 1, ..., Ek-1}, 其中 E0 = {S0, B0}, 其中, S0 为上一次处理待滤波样点数据 X 时其中的 Dk-1, 对于 i ≠ 0 的数 据块 Ei = {Di-1, Bi}, 同时将 Dk-1 搬移到中 S0, 作为下一次处理过程的初始状态数据使用 ;
     重 叠 数 据 的 搬 移 分 为 三 个 步 骤, 第 一 步, 启 动 M-1 个 线 程 同 时 工 作, 线程 Ti(0 ≤ i ≤ M-2) 完成将 S0 中第 i 个数据搬移到重叠搬移结果数据 E0 的 S0 中的第 i 的位 置, 然后再完成将 Dk-1 中第 i 个数据搬移到 S0 中的第 i 的位置 ; 第二步, 启动 L 个线程同时 工作, 线程 Ti(0 ≤ i ≤ L-1) 完成将待滤波样点数据 X 的 Bj(0 ≤ j ≤ k-1) 块中第 i 个数据 搬移到重叠搬移结果数据 E 的 Bj(0 ≤ j ≤ k-1) 块中的第 i 的位置 ; 第三步, 启动 M-1 个线 程同时工作, 线程 Ti(0 ≤ i ≤ M-2) 完成将待滤波样点数据 X 的 Dj(0 ≤ j ≤ k-1) 块中第 i 个数据搬移到重叠搬移结果数据 E 的 Dj(0 ≤ j ≤ k-1) 块中的第 i 的位置 ;
     步骤四、 滤波计算处理 ;
     启动傅里叶变换核函数, 完成对每个 Ei 做 N 点的傅里叶变换运算, 得到运算结果 F = {F0, F1, ..., Fk-1} ; 然后启动乘法核函数完成 Fi 与系数 H 相乘操作, 即 Ii = Fi*H ; 然后 启动傅里叶逆变换核函数, 完成对每个 Ii 做 N 点的傅里叶逆变换运算, 并得结果 R = {R0, R1, ..., Rk-1} ;
     在启动乘法核函数核函数时, 启动 N 个线程同时工作, 线程 Ti(0 ≤ i ≤ N-1) 完 成将 Fj(0 ≤ j ≤ k-1) 中第 i 个数据与频响系数 H 中的第 i 个系数相乘, 并将结果保存在 Rj(0 ≤ j ≤ k-1) 块中的第 i 的位置 ;
     步骤五、 数据的合并搬移 ;
     启动合并搬移核函数完成数据的合并搬移操作, 即将结果数据 R = {R0, R1, ..., Rk-1} 合并搬移为 Y = {Y0, Y1, ..., Yk-1}, 其中 Ri = {Zi, Yi}, 其中 Zi 表示在 Ri 中起点为 0,长度为 M-1 的连续数据点所组成的数据块, Yi 表示在 Ri 中起点为 M-1, 长度为 L 的连续数据 点所组成的数据块 ;
     在启动合并搬移核函数时, 启动 L 个线程同时工作, 线程 Ti(0 ≤ i ≤ L-1) 完成将 乘积 Rj(0 ≤ j ≤ k-1) 中第 M-1+i 个数据搬移到结果数据 Yj(0 ≤ j ≤ k-1) 块中的第 i 的 位置, 其中, 启动的 L 个线程在同一时刻搬运长度为 L 的连续数据块 ;
     步骤六、 将合并搬移结果 Y = {Y0, Y1, ..., Yk-1} 传送到主机内存, 若还有剩余数据 需要处理重复步骤二, 否则结束处理过程, 完成高阶数字 FIR 滤波器频域并行处理。
     有益效果 :
     通过对于 GPU 内存访问的优化设计, 即所设计的重叠搬移以及合并搬移操作方 法, 较其他非连续的存储访问方法, 能够最大限度地避免内存访问竞争的发生频率, 从而可 以有效地提高内存访问效率, 并提高整体算法的执行效率。 另外, 通过优化线程组织结构以 及启动线程的数量, 能够达到最大限度地均衡各个流多处理器上的工作负载, 从而提高 GPU 整体使用率。通过这些优化设计手段, 较一般非优化设计, 可平均提高执行效率 10%左右。 同时保存数据时, 第一个字节的地址为存储器位宽的整数倍, 以确保每次访问内存时能读 取到最多的数据。 本发明方法对比在 CPU 上单线程所实现的 FIR 频域重叠保留方法, 其吞吐率, 即每 秒处理样点的数量有着极大地提高, 典型的加速比在 100 倍以上。如在 GeForce580 对于复 数数据的处理可达到 400M 样点 / 秒。
     附图说明
     图 1 是通用数据重叠搬移操作图 ;
     图 2 是实例数据重叠搬移操作图 ;
     图 3 是通用数据合并搬移操作图 ;
     图 4 是实例数据合并搬移操作图 ;
     图 5 是并行 FIR 滤波处理流程框图 ; 具体实施方式
     本实施例以 1025 点 FIR 为例, 说明一个具体的实施方法。
     我们选择傅里叶变换的长度为 : 211 = 2048 = 2K, L = 1024, 每次处理的数据长度 : 20 10 Nblk = 2 = 1M, 故 k = Nblk/L = 2 = 1024。
     根据前面所述方法, 我们创建下列在 GPU 上执行的核函数 :
     1) 频响计算核函数
     其输入为 1025 点的 FIR 时域冲击响应, 所进行的处理是将 1024 个点的时域冲击 响应在其尾部填充 1023 个 0 点, 并进行 2048 点的傅里叶变换, 从而得到相应的频率响应系 数, 并将其存储到 GPU 的共享内存中。
     2) 重叠搬移核函数
     其处理是将输入的 220 点样本数据, 进行重叠搬移。图 1 为通用的重叠搬移示意 图, X = {B0, B 1, ..., Bk-1} 是输入的待滤波的数据块, 其长度为 Nblk = k*L ; X 是由 k 个子块 Bi 组成, 0 ≤ i ≤ k-1, 每个子块的长度为 L。每个子块 Bi 则是由长度为 L-M+1 的数据块 Ci和长度为 M-1 的数据块 Di 组成, 即 Bi = {Ci, Di}。S0 是重叠搬移状态数据块, 其长度为 M-1, 1 初始值为 M-1 个 0。重叠搬移的结果是 E = {E0, E1, ..., Ek-1} 和 S 0, 其中 E0 = {S0, B0}, 对 1 于 i ≠ 0 的数据块 Ei = {Di-1, Bi}, S 0 = Dk-1。而在本具体实例中由于 L = M-1 = 1024, 因 此 Ci 数据块长度为 0, 即 Di = Bi, 具体搬移操作参见图 2。重叠搬移过程分为三个步骤 :
     步骤 201 : 启动 1024 个线程完成将状态数据块 S0 搬移到 E0 中, 即将 S0(m) 搬移到 1 e(m), 其中 0 ≤ m ≤ 1023, 以及将 D1023 搬移到 S 0 中。在此步骤中, 线程根据下列搬移公式 进行数据搬移 :
     线 程 t(i) 需 要 搬 移 e(i) = S0(i), 然 后 需 要 搬 移 S0(i) = x(220-210+i), 其中 20 10 0 ≤ i ≤ 1023。例如 : 线程 t(0) 将 S0(0) 搬移到 x(0), 将 x(2 -2 ) 搬移到 S0(0) ;
     步骤 202 : 启动 1024 个线程完成将待滤波数据 X 搬移到 E 的奇数块中。在此步骤 中, 线程根据下列搬移公式进行数据搬移 :
     线程 t(i) 需要搬移 e((2*m+1)*210+i) = x(m*210+i), 其中 0 ≤ i ≤ 1023, m = 0, 10 1, ..., 2 -1。例如 : 线程 t(0) 在 m = 0 时, 将数据 x(0) 搬移到 e(1024), 在 m = 1 时, 数据 x(1024) 搬移到 e(3072) ;
     步骤 203 : 启动 1024 个线程完成待滤波数据 X 搬移到 E 的偶数块中。 在此步骤中, 线程根据下列搬移公式进行数据搬移 : 线程 t(i) 需要搬移 e((2*(m+1)*210+i) = x(m*210+i), 其中 0 ≤ i ≤ 1023, m = 0, 10 1, ..., 2 -1。例如 : 线程 t(0) 在 m = 0 时, 将数据 x(0) 搬移到 e(2048), 在 m = 1 时, 数据 x(1024) 搬移到 e(4096) ;
     3) 傅里叶变换核函数
     其处理是将经过重叠搬移后的数据, 进行傅里叶变换计算, 其中傅里叶变换的长 11 度为 2 = 2048。
     4) 乘法核函数
     其处理是将傅里叶变换的结果数据, 与 FIR 频响系数相乘。 在此过程中, 启动 2048 个线程, 并根据下列公式进行计算 :
     线程 t(i) 计算 p(m * 211+i) = e(m * 211+i)*H(i)/211, 其中, 0 ≤ i ≤ 2047, m= 10 0, 1, ..., 2 -1, e 为重叠搬移操作的结果数据。例如 : 线程 t(0) 在 m = 0 时, 计算 p(0) = 11 11 11 11 e(0)*H(0)/2 , 在 m = 1 时, 计算 p(2 ) = e(2 )*H(0)/2 ;
     5) 傅里叶逆变换核函数
     其处理是将与频响系数相乘所得的结果数据, 进行傅里叶逆变换计算, 其中傅里 11 叶逆变换的长度为 2 = 2048。
     6) 合并搬移核函数
     其处理是将傅里叶逆变换的结果数据, 进行合并搬移。图 3 为通用的合并搬移示 意图, 将傅里叶逆变换的结果数据 R = {R0, R1, ..., Rk-1} 合并搬移为 Y = {Y0, Y1, ..., Yk-1}, 其中 Ri = {Zi, Yi}, 其中 Zi 长度为 M-1 的连续数据点, Yi 则是长度为 L 的连续数据点。而在 10 本具体实例中, L = M-1 = 2 = 1024, 具体搬移操作参见图 4。在此过程中, 启动 1024 个 线程, 并根据下列公式进行数据搬移操作 :
     线程 t(i) 需要搬移 y(m * 210+i) = r((2*m+1)*210+i), 其中, 0 ≤ i ≤ 1023, m= 10 10 0, 1, ..., 2 -1, y 为搬移后的结果数据。例如 : 线程 t(0) 在 m = 0 时, 将数据 r(2 ) 搬移
     到 y(0), 在 m = 1 时, 将数据 r(3072) 搬移到 y(1024) ;
     上面六个核函数是条件, 有了上述的六个可在 GPU 上并行执行的核函数之后, 我 们就可以按照下述步骤来完成 FIR 的并行处理, 其中具体的滤波计算处理操作参见图 5 :
     步骤 501 : 将 1025 点的 FIR 冲击响应数据从主机内存拷贝到 GPU 内存中, 启动频 响计算核函数, 完成 FIR 频响系数的计算。
     步骤 502 : 将一块 220 = 1M 点的数据从主机内存拷贝到 GPU 内存中, 在 GPU 上启动 10 2 个线程, 用以执行重叠搬移核函数。
     步骤 503 : 执行傅里叶变换核函数。
     步骤 504 : 在 GPU 上启动 211 个线程, 用以执行乘法核函数。
     步骤 505 : 执行傅里叶逆变换核函数。
     步骤 506 : 在 GPU 上启动 210 个线程, 用以执行合并搬移核函数。
     步骤 507 : 将合并搬移的结果从 GPU 内存中拷贝到主机内存中, 如果有待处理的数 据, 则转到步骤二执行。

一种基于GPU的高阶数字FIR滤波器频域并行处理实现方法.pdf_第1页
第1页 / 共11页
一种基于GPU的高阶数字FIR滤波器频域并行处理实现方法.pdf_第2页
第2页 / 共11页
一种基于GPU的高阶数字FIR滤波器频域并行处理实现方法.pdf_第3页
第3页 / 共11页
点击查看更多>>
资源描述

《一种基于GPU的高阶数字FIR滤波器频域并行处理实现方法.pdf》由会员分享,可在线阅读,更多相关《一种基于GPU的高阶数字FIR滤波器频域并行处理实现方法.pdf(11页珍藏版)》请在专利查询网上搜索。

1、10申请公布号CN102340296A43申请公布日20120201CN102340296ACN102340296A21申请号201110204946622申请日20110721H03H17/02200601G06F9/3820060171申请人东北大学秦皇岛分校地址066004河北省秦皇岛市经济技术开发区泰山路143号72发明人汪晋宽张春宏韩英华宋昕高静74专利代理机构北京理工大学专利中心11120代理人李爱英郭德忠54发明名称一种基于GPU的高阶数字FIR滤波器频域并行处理实现方法57摘要为解决高阶数字FIR滤波器并行处理效率的问题,提出了一种高效的、适合GPU体系结构的高阶数字FIR滤波。

2、器并行处理算法,该方法采用重叠保留方法结合GPU自身结构特点优化实现高阶数字FIR的频域并行化处理。通过计算FIR频率响应系数,将待处理的输入数据传送给GPU;数据重叠搬移;滤波计算处理;数据合并搬移;将合并搬移结果YY0,Y1,YK1传送到主机内存等步骤完成高阶数字FIR滤波器频域并行处理。对比在CPU上单线程所实现的FIR频域重叠保留方法,其吞吐率,即每秒处理样点的数量有着极大地提高,典型的加速比在100倍以上。51INTCL19中华人民共和国国家知识产权局12发明专利申请权利要求书2页说明书5页附图3页CN102340310A1/2页21一种基于GPU的高阶数字FIR滤波器频域并行处理实。

3、现方法,其特征在于根据通用图形处理器GPU众核体系结构的特点,将重叠保留方法的处理过程划分为六个核函数频响计算核函数、重叠搬移核函数、傅里叶变换核函数、乘法核函数、傅里叶逆变换核函数、合并搬移核函数;实现该方法的具体步骤如下步骤一、确定有限冲击响应FIR频率响应系数;当给定的响应系数为FIR的冲击响应系数HH0,H1,HM1时,将FIR的冲击响应系数HH0,H1,HM1,经过尾部填0扩展至长度为N,将扩展后的系数传送给GPU,启动频响计算核函数对FIR的冲击响应系数H进行N点的傅里叶变换,结果为有限冲击响应FIR频率响应系数HH0,H1,HN1,保存在GPU内存中;当给定的响应系数为FIR频率。

4、响应系数HH0,H1,HN1时,将频率响应系数H传给GPU,并保存在GPU内存中,保存时,第一个字节的地址为存储器位宽的整数倍;步骤二、将待处理的输入数据传送给GPU;将一块长度为NBLK的待滤波样点数据XB0,B1,BK1从主机内存中传入GPU的内存中,其中NBLKKL,K为整数,L为每个数据块的长度;其中BICI,DI,0IK1,CI表示在BI中起点为0,而长度为LM1的连续样点数据块,DI表示在BI中起点为LM1,而长度为M1的连续样点数据块;步骤三、数据的重叠搬移;启动重叠搬移核函数完成数据重叠搬移操作,即将待滤波样点数据XB0,B1,BK1以及输入的长度为M1的初始状态数据S0,重叠。

5、搬移为EE0,E1,EK1,其中E0S0,B0,其中,S0为上一次处理待滤波样点数据X时其中的DK1,对于I0的数据块EIDI1,BI,同时将DK1搬移到中S0,作为下一次处理过程的初始状态数据使用;重叠数据的搬移分为三个步骤,第一步,启动M1个线程同时工作,线程TI0IM2完成将S0中第I个数据搬移到重叠搬移结果数据E0的S0中的第I的位置,然后再完成将DK1中第I个数据搬移到S0中的第I的位置;第二步,启动L个线程同时工作,线程TI0IL1完成将待滤波样点数据X的BJ0JK1块中第I个数据搬移到重叠搬移结果数据E的BJ0JK1块中的第I的位置;第三步,启动M1个线程同时工作,线程TI0IM。

6、2完成将待滤波样点数据X的DJ0JK1块中第I个数据搬移到重叠搬移结果数据E的DJ0JK1块中的第I的位置;步骤四、滤波计算处理;启动傅里叶变换核函数,完成对每个EI做N点的傅里叶变换运算,得到运算结果FF0,F1,FK1;然后启动乘法核函数完成FI与系数H相乘操作,即IIFIH;然后启动傅里叶逆变换核函数,完成对每个II做N点的傅里叶逆变换运算,并得结果RR0,R1,RK1;在启动乘法核函数核函数时,启动N个线程同时工作,线程TI0IN1完成将FJ0JK1中第I个数据与频响系数H中的第I个系数相乘,并将结果保存在RJ0JK1块中的第I的位置;权利要求书CN102340296ACN102340。

7、310A2/2页3步骤五、数据的合并搬移;启动合并搬移核函数完成数据的合并搬移操作,即将结果数据RR0,R1,RK1合并搬移为YY0,Y1,YK1,其中RIZI,YI,其中ZI表示在RI中起点为0,长度为M1的连续数据点所组成的数据块,YI表示在RI中起点为M1,长度为L的连续数据点所组成的数据块;在启动合并搬移核函数时,启动L个线程同时工作,线程TI0IL1完成将乘积RJ0JK1中第M1I个数据搬移到结果数据YJ0JK1块中的第I的位置,其中,启动的L个线程在同一时刻搬运长度为L的连续数据块;步骤六、将合并搬移结果YY0,Y1,YK1传送到主机内存,若还有剩余数据需要处理重复步骤二,否则结束。

8、处理过程,完成高阶数字FIR滤波器频域并行处理。权利要求书CN102340296ACN102340310A1/5页4一种基于GPU的高阶数字FIR滤波器频域并行处理实现方法技术领域0001本发明涉及一种高阶数字FIR滤波器频域并行处理实现方法,特别是一种基于GPU的高阶数字FIR滤波器频域并行处理实现方法,属于数字信号处理领域。技术背景0002在数字信号处理系统中,数字有限冲击响应FIR滤波器是最为核心和基础的数字信号处理算法之一。由于数字FIR滤波器,特别是高阶的数字FIR滤波器的计算复杂度是相当高的,因而高效的、并行化的FIR实现方法对于加速FIR的处理是极其至关重要的。0003目前,随着。

9、通用图形处理器GPU技术的迅猛发展,GPU正在被广泛地应用于众多的应用领域之中,由于GPU所具有的众核体系结构,使其能够提供十分强大的计算能力。0004因此,对于FIR滤波器这种计算复杂度较高的算法,通过设计合理高效且适合GPU结构的并行算法,就可以使得FIR处理在GPU上得到很高的加速比,从而极大地缩短其处理时间。因此,研发适合于GPU体系结构的数字FIR滤波器并行处理算法,具有很高的实际价值和现实意义。发明内容0005本发明所要解决的技术问题是高阶数字FIR滤波器并行处理效率的问题,提出了一种高效的、适合GPU体系结构的高阶数字FIR滤波器并行处理算法,该方法采用重叠保留方法结合GPU自身。

10、结构特点优化实现高阶数字FIR的频域并行化处理。0006为了发挥GPU众核的体系结构,需要将重叠保留方法的计算过程加以分解,并合理地将计算负载分配到在GPU上执行的每个线程中,同时还要优化各个线程对于GPU内存的访问,以最大限度地利用GPU所提供的存储带宽。在GPU的编程模型中,核函数KERNEL是由编程人员定义,并可以在GPU上由众多线程加以并行执行的功能单元。作为CPU加速器的GPU,是典型的FORKJION并行模式。在主机端启动核函数时,通过指定调用配置参数,编程人员可以控制启动执行核函数的线程数量以及线程的组织结构。如何将重叠保留方法中的计算过程分解成为不同的核函数,并确定各个核函数所。

11、要完成的处理,对于整个算法的并发执行效率起着至关重要的影响。如果核函数内部控制流比较复杂,则会大大地降低GPU的并行效率;然而如果核函数功能过于简单,将导致核函数的数量增加,从而增大启动核函数的总体时间,因此同样会降低GPU并行效率。0007因此,根据GPU的自身结构特点,以及重叠保留方法所需的数据处理过程特性,提出了优化的核函数划分方法,即将重叠保留方法的处理划分为六个核函数频响计算核函数、重叠搬移核函数、傅里叶变换核函数、乘法核函数、傅里叶逆变换核函数、合并搬移核函数,算法的总体处理过程如下0008根据通用图形处理器GPU众核体系结构的特点,将重叠保留方法的处理过程划分为六个核函数频响计算。

12、核函数、重叠搬移核函数、傅里叶变换核函数、乘法核函数、傅里叶说明书CN102340296ACN102340310A2/5页5逆变换核函数、合并搬移核函数;0009实现该方法的具体步骤如下0010步骤一、确定有限冲击响应FIR频率响应系数;0011当给定的响应系数为FIR的冲击响应系数HH0,H1,HM1时,将FIR的冲击响应系数HH0,H1,HM1,经过尾部填0扩展至长度为N,将扩展后的系数传送给GPU,启动频响计算核函数对FIR的冲击响应系数H进行N点的傅里叶变换,结果为有限冲击响应FIR频率响应系数HH0,H1,HN1,保存在GPU内存中;0012当给定的响应系数为FIR频率响应系数HH0。

13、,H1,HN1时,将频率响应系数H传给GPU,并保存在GPU内存中,保存时,第一个字节的地址为存储器位宽的整数倍;0013步骤二、将待处理的输入数据传送给GPU;0014将一块长度为NBLK的待滤波样点数据XB0,B1,BK1从主机内存中传入GPU的内存中,其中NBLKKL,K为整数,L为每个数据块的长度;其中BICI,DI,0IK1,CI表示在BI中起点为0,而长度为LM1的连续样点数据块,DI表示在BI中起点为LM1,而长度为M1的连续样点数据块;0015步骤三、数据的重叠搬移;0016启动重叠搬移核函数完成数据重叠搬移操作,即将待滤波样点数据XB0,B1,BK1以及输入的长度为M1的初始。

14、状态数据S0,重叠搬移为EE0,E1,EK1,其中E0S0,B0,其中,S0为上一次处理待滤波样点数据X时其中的DK1,对于I0的数据块EIDI1,BI,同时将DK1搬移到中S0,作为下一次处理过程的初始状态数据使用;0017重叠数据的搬移分为三个步骤,第一步,启动M1个线程同时工作,线程TI0IM2完成将S0中第I个数据搬移到重叠搬移结果数据E0的S0中的第I的位置,然后再完成将DK1中第I个数据搬移到S0中的第I的位置;第二步,启动L个线程同时工作,线程TI0IL1完成将待滤波样点数据X的BJ0JK1块中第I个数据搬移到重叠搬移结果数据E的BJ0JK1块中的第I的位置;第三步,启动M1个线。

15、程同时工作,线程TI0IM2完成将待滤波样点数据X的DJ0JK1块中第I个数据搬移到重叠搬移结果数据E的DJ0JK1块中的第I的位置;0018步骤四、滤波计算处理;0019启动傅里叶变换核函数,完成对每个EI做N点的傅里叶变换运算,得到运算结果FF0,F1,FK1;然后启动乘法核函数完成FI与系数H相乘操作,即IIFIH;然后启动傅里叶逆变换核函数,完成对每个II做N点的傅里叶逆变换运算,并得结果RR0,R1,RK1;0020在启动乘法核函数核函数时,启动N个线程同时工作,线程TI0IN1完成将FJ0JK1中第I个数据与频响系数H中的第I个系数相乘,并将结果保存在RJ0JK1块中的第I的位置;。

16、0021步骤五、数据的合并搬移;0022启动合并搬移核函数完成数据的合并搬移操作,即将结果数据RR0,R1,RK1合并搬移为YY0,Y1,YK1,其中RIZI,YI,其中ZI表示在RI中起点为0,说明书CN102340296ACN102340310A3/5页6长度为M1的连续数据点所组成的数据块,YI表示在RI中起点为M1,长度为L的连续数据点所组成的数据块;0023在启动合并搬移核函数时,启动L个线程同时工作,线程TI0IL1完成将乘积RJ0JK1中第M1I个数据搬移到结果数据YJ0JK1块中的第I的位置,其中,启动的L个线程在同一时刻搬运长度为L的连续数据块;0024步骤六、将合并搬移结果。

17、YY0,Y1,YK1传送到主机内存,若还有剩余数据需要处理重复步骤二,否则结束处理过程,完成高阶数字FIR滤波器频域并行处理。0025有益效果0026通过对于GPU内存访问的优化设计,即所设计的重叠搬移以及合并搬移操作方法,较其他非连续的存储访问方法,能够最大限度地避免内存访问竞争的发生频率,从而可以有效地提高内存访问效率,并提高整体算法的执行效率。另外,通过优化线程组织结构以及启动线程的数量,能够达到最大限度地均衡各个流多处理器上的工作负载,从而提高GPU整体使用率。通过这些优化设计手段,较一般非优化设计,可平均提高执行效率10左右。同时保存数据时,第一个字节的地址为存储器位宽的整数倍,以确。

18、保每次访问内存时能读取到最多的数据。0027本发明方法对比在CPU上单线程所实现的FIR频域重叠保留方法,其吞吐率,即每秒处理样点的数量有着极大地提高,典型的加速比在100倍以上。如在GEFORCE580对于复数数据的处理可达到400M样点/秒。附图说明0028图1是通用数据重叠搬移操作图;0029图2是实例数据重叠搬移操作图;0030图3是通用数据合并搬移操作图;0031图4是实例数据合并搬移操作图;0032图5是并行FIR滤波处理流程框图;具体实施方式0033本实施例以1025点FIR为例,说明一个具体的实施方法。0034我们选择傅里叶变换的长度为21120482K,L1024,每次处理的。

19、数据长度NBLK2201M,故KNBLK/L2101024。0035根据前面所述方法,我们创建下列在GPU上执行的核函数00361频响计算核函数0037其输入为1025点的FIR时域冲击响应,所进行的处理是将1024个点的时域冲击响应在其尾部填充1023个0点,并进行2048点的傅里叶变换,从而得到相应的频率响应系数,并将其存储到GPU的共享内存中。00382重叠搬移核函数0039其处理是将输入的220点样本数据,进行重叠搬移。图1为通用的重叠搬移示意图,XB0,B1,BK1是输入的待滤波的数据块,其长度为NBLKKL;X是由K个子块BI组成,0IK1,每个子块的长度为L。每个子块BI则是由长。

20、度为LM1的数据块CI说明书CN102340296ACN102340310A4/5页7和长度为M1的数据块DI组成,即BICI,DI。S0是重叠搬移状态数据块,其长度为M1,初始值为M1个0。重叠搬移的结果是EE0,E1,EK1和S10,其中E0S0,B0,对于I0的数据块EIDI1,BI,S10DK1。而在本具体实例中由于LM11024,因此CI数据块长度为0,即DIBI,具体搬移操作参见图2。重叠搬移过程分为三个步骤0040步骤201启动1024个线程完成将状态数据块S0搬移到E0中,即将S0M搬移到EM,其中0M1023,以及将D1023搬移到S10中。在此步骤中,线程根据下列搬移公式进。

21、行数据搬移0041线程TI需要搬移EIS0I,然后需要搬移S0IX220210I,其中0I1023。例如线程T0将S00搬移到X0,将X220210搬移到S00;0042步骤202启动1024个线程完成将待滤波数据X搬移到E的奇数块中。在此步骤中,线程根据下列搬移公式进行数据搬移0043线程TI需要搬移E2M1210IXM210I,其中0I1023,M0,1,2101。例如线程T0在M0时,将数据X0搬移到E1024,在M1时,数据X1024搬移到E3072;0044步骤203启动1024个线程完成待滤波数据X搬移到E的偶数块中。在此步骤中,线程根据下列搬移公式进行数据搬移0045线程TI需要。

22、搬移E2M1210IXM210I,其中0I1023,M0,1,2101。例如线程T0在M0时,将数据X0搬移到E2048,在M1时,数据X1024搬移到E4096;00463傅里叶变换核函数0047其处理是将经过重叠搬移后的数据,进行傅里叶变换计算,其中傅里叶变换的长度为2112048。00484乘法核函数0049其处理是将傅里叶变换的结果数据,与FIR频响系数相乘。在此过程中,启动2048个线程,并根据下列公式进行计算0050线程TI计算PM211IEM211IHI/211,其中,0I2047,M0,1,2101,E为重叠搬移操作的结果数据。例如线程T0在M0时,计算P0E0H0/211,在。

23、M1时,计算P211E211H0/211;00515傅里叶逆变换核函数0052其处理是将与频响系数相乘所得的结果数据,进行傅里叶逆变换计算,其中傅里叶逆变换的长度为2112048。00536合并搬移核函数0054其处理是将傅里叶逆变换的结果数据,进行合并搬移。图3为通用的合并搬移示意图,将傅里叶逆变换的结果数据RR0,R1,RK1合并搬移为YY0,Y1,YK1,其中RIZI,YI,其中ZI长度为M1的连续数据点,YI则是长度为L的连续数据点。而在本具体实例中,LM12101024,具体搬移操作参见图4。在此过程中,启动1024个线程,并根据下列公式进行数据搬移操作0055线程TI需要搬移YM2。

24、10IR2M1210I,其中,0I1023,M0,1,2101,Y为搬移后的结果数据。例如线程T0在M0时,将数据R210搬移说明书CN102340296ACN102340310A5/5页8到Y0,在M1时,将数据R3072搬移到Y1024;0056上面六个核函数是条件,有了上述的六个可在GPU上并行执行的核函数之后,我们就可以按照下述步骤来完成FIR的并行处理,其中具体的滤波计算处理操作参见图50057步骤501将1025点的FIR冲击响应数据从主机内存拷贝到GPU内存中,启动频响计算核函数,完成FIR频响系数的计算。0058步骤502将一块2201M点的数据从主机内存拷贝到GPU内存中,在。

25、GPU上启动210个线程,用以执行重叠搬移核函数。0059步骤503执行傅里叶变换核函数。0060步骤504在GPU上启动211个线程,用以执行乘法核函数。0061步骤505执行傅里叶逆变换核函数。0062步骤506在GPU上启动210个线程,用以执行合并搬移核函数。0063步骤507将合并搬移的结果从GPU内存中拷贝到主机内存中,如果有待处理的数据,则转到步骤二执行。说明书CN102340296ACN102340310A1/3页9图1说明书附图CN102340296ACN102340310A2/3页10图2图3图4说明书附图CN102340296ACN102340310A3/3页11图5说明书附图CN102340296A。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 电学 > 基本电子电路


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1