访存优化

2024-10-20

访存优化(共3篇)

访存优化 篇1

摘要:作为H.264/AVC解码过程中耗时最多的环节, 运动补偿从SDRAM中读取参考帧像素用于帧间预测, 所消耗的带宽成为制约性能的瓶颈之一。基于2D Cache的访存优化方案, 针对DDR类型的SDRAM, 在运动补偿的访存通路上增加了一个2D Cache。实验结果表明, 在帧, 场和混合模式下, 该2D Cache方案提高了Cahce命中率, 降低了访存带宽。摘要内容 (包括目的、方法、结果和结论四要素)

关键词:2D Cache,运动补偿,Cacheline,标签

引言

在计算机存储层次结构中, Cache作为处理器与主存之间的桥梁, 其作用至关重要。Cache对处理器性能的影响依赖于程序的访存局部性 (Locality) 。访存局部性包括空间局部性 (Spatial locality) 和时间局部性 (Temporal locality) 。Cache利用程序的局部性, 通过从主存中移入部分数据, 极大地缩短了CPU的访存时间, 弥补了CPU和主存不断增大的速度差距。另一方面, Cache占据了大量的芯片面积, 也带来了较大的能耗。例如:片内cache分别占用了Alpha 21264和Strong ARM微处理器面积的30%和60%, 它们的功耗分别占整个芯片功耗的16%和43%[1]。因此, 针对视频应用程序的特点, 设计一种高性能低功耗的Cache结构, 具有非常强的现实意义。

H.264/AVC是南ITU T和ISO/IEC联合视频组 (JVT) 提的数字视频编解码标准。通过采用一系列先进的编码技术, H.264/AVC比之前的标准在编码效率上提高了近50%[2], 但是这些技术同时也引入了更多的计算和访存开销。作为H.264/AVC解码过程中耗时最多的环节, 运动补偿从SDRAM中读取参考帧像素用于帧间预测, 所消耗的带宽占到整个解码SDRAM访问带宽的75%[3], 成为制约性能的瓶颈之一。

国内外许多研究人员均提出了相应的解决方案。Wang Ronggang[3]提出了三种策略减少运动补偿中的内存访问量。Yu Li[4]等人利用Cache进行水平和垂直两个方向的数据复用来降低带宽。Ju-Hyun Kim等人[5]为优化H.264/AVC解码程序中运动补偿的数据访问, 提出了两种新的Cache结构。一种称为索引分离直接映射Cache, 它将主存中的一页映射到Cache中的连续两行;另一种称为循环Cache (Circular Cache) , 它不是存入一个完整的Cache行数据, 而是仅仅取得其需要访问的部分。

一、基于2D Cache的访存带宽优化方法

数据的空间和时间局部性是当前内存系统优化时经常要考虑的特性, 但是当前普遍存在的一个问题是传统内容结构对数据局部性的优化无法最好的适应每个应用程序。在执行多个程序时, 由于程序的内存要求和内存系统的实现之间的不匹配, 不可避免地会存在明显的性能降低和功耗损失现象。

1.1基于2D Cache的访存架构。作为设计方案的核心, 这里在运动补偿的访存通路上增加了一个2D Cache。插值计算单元所需的数据从Cache中获得, 所有的访存请求先在Cache进行查找, 只有不命中时才会访问SDRAM。为了降低标签 (tag) 比较电路的开销, 亮度像素和色度像素分为两个Cache, 其中色度像素Cache的容量为亮度像素Cache的一半。Luma使用的cache_line (Cache行) 为32*1Byte, 共2*32个cache_line;Chroma使用的cache_line为32*1Byte, 共2*16个cache_line, 如图1。

Luma和Chroma均使用2份, 分别用于List0与List1的参考数据cache, 但最终实现的时候把 (List0、List1) 合并在一起。即, cache_line[0~31]为List0_luma使用, cache_line[32~63]为List1_luma使用。

由于参考像素的空间局部性同时沿着水平和垂直两个维度分布, 所以, 整个Cache设计为多路直接映射, 每一路对应于图像中一块大小为MXN的连续矩形区域, 该区域进一步被划分成若干大小为m×n的块, 每个Cache_line中存放一块数据。Cache_line的设计需要考虑两个方面的因素:首先, Cache_line需要尽可能开发数据的空间局部性;其次, Cache_line的容量是SDRAM突发访问长度的整数倍。

1.2 Cache寻址方式。运动补偿从SDRAM中读取数据的性能受限于空间局部性和时间局部性, 因此, 把外部地址映射到Cache_line的索引时可以从两个方向进行映射。2D Cache内部的寻址采用 (帧索引号, X坐标, Y坐标) 三元组的形式表示, 其中X坐标和Y坐标又可进一步划分为tag, index和offset三部分, 见图2。通过坐标X和Y, 外部地址直接映射到某Cache_line。由于三元组的表示形式与运动补偿计算单元的数据索引方式基本一致, 所以来自计算单元访问请求的地址可以直接获得。

Cache的Ta g信息包含{tag_idx[1 2:0], dpb_idx[4:0], valid}, 每个cache_line共19bit。每帧初始化的时候, 把所有cache_line的valid全部置为0。Cache数据读取流程图如图3。

二、实验结果及分析

采用C模型进行模拟, 输入是学术界普遍采用的高清测试基准HD-Videobench中的H264全高清 (FHD) 测试序列, 每个序列共100帧。不同Cache组织形式, 对同一视频码流, 参考帧与帧比值大小不同, 具体实验结果如表1 (表中数据的单位为 (参考帧带宽/帧大小) , 括号内为不使用cache时的比值) 。

从表1中可以看出, 对于32bit DDR3而言, 第二种cache组织方式比第一种稍好, 节省但也要增加少许存放tag信息的SRAM空间;同理, 对于16bit DDR3或者32bit DDR2, 第三种是唯一选择, 付出的代价是相对第二种方式还要增加存放tag的SRAM。

表1中的数据全部针对视频为帧模式, 对场模式进行优化考虑如下:

对于纯场模式 (Field) , 与帧 (Frame) 模式完全一致, 唯一的差别是需要在dpb_idx[3:0]的基础上加入top_field或bottom_field的标志位, 试验中, 直接把dpb_idx扩展为[4:0]。对于Luma而言, cache在垂直方向上依然是32像素高度。

对于MBAFF (Frame与Field MB混合) 模式, 如果是Frame MB, 则与纯帧情况一致;如果是MB, 则Top Field MB只能在偶数cache_line中查询是否命中 (Hit) , 而Bottom Field MB只能在奇数的cache_line中查询, 即, cache的垂直方向大小是设置的一半。因此, 其节省带宽的效果相对不如其他情况明显, 见表2。

由表2可知, 在使用32bit DDR3前提下, 参考帧读取数据的命中率为30%~60%之间, 普遍在50%附近, 也就是节省参考帧的50%的带宽。使用cache时, video_decoder在解码1080P@60时, 需要的带宽为1920*1088*1.5* (2.6+1) *60=680Mbyte/S的纯带宽, 按照32bit DDR3的效率为55%的情况下, 需要155M的DDR频率;不使用Cache时, 同等情况下需要1920*1088*1.5* (5.0+1) *60=1130Mbyte/S的纯带宽, 按照32bit DDR3的效率为55%的情况下, 需要260M的DDR频率;在使用16bit DDR3或者32bit DDR2前提下, 参考帧读取数据的命中率在40%附近, 也就是节省参考帧的40%的带宽。使用cache时, video_decoder在解码1080P@60时, 需要的带宽为1920*1088*1.5* (2.2+1) *60=600Mbyte/S的纯带宽, 按照32bit DDR2的效率为55%的情况下, 需要140M的DDR频率 (若改成16bit DDR3, 需要280M DDR频率) ;不使用Cache时, 同等情况下需要1920*1088*1.5* (4.1+1) *60=960Mbyte/S的纯带宽, 按照32bit DDR3的效率为55%的情况下, 需要220M的DDR频率 (若改成16bit DDR3, 需要440M DDR频率) 。

结束语

运动补偿访存带宽的优化是提升H.264/AVC解码性能的关键因素之一。在对造成带宽浪费的原因进行分析的基础上, 本文提出了基于2D Cache结构的运动补偿带宽优化方法。该方法能够在减少数据重复读取的同时, 大幅度降低访存过程中的页切换以及竞争冲突开销。

参考文献

[1]S Manne, A Klauser, D Grunwald.Pipline gating:speculation control of energy reduction[C].The 25th Annual Int'l Symp on Computer Architecture.Barcelona, Spain, 1998.

[2]Ostermann J, Bormans J, List P, et al.Video coding with H.264/AVC:Tools, performance, and complexity[J].Circuits and Systems Magazine, 2004, 4 (1) :7-28.

[3]Wang Rong gang, Li jintao, Huang Chao.Motion compensation memory access optimization strategies for H.264/AVC decoder[C]//Proc of IEEE Int Conf on Acoustics, Speech, and Signal Processing.Los Alamitous:IEEE Computer Society.2005:97-100.

[4]Yu Li, Yanmei Qu, Yun He, Memory Cache Based Motion Compensation Architecture for HDTVH.264/AVC Decoder[C], Proceedings of ISCAS2007, 2007:2906-2909.

[5]Ju-Hyun Kim, Gyoung-Hwan Hyun, and Hyuk-Jae Lee.Cache Organizations for H.264/AVC Motion Compensation[A].13th IEEE International Conference on Embedded and Real-Time Computing Systems and Applications (RTCSA 2007) [C].2007

[6]汪文祥, 张广飞, 沈海华.基于2D Cache结构的H.264运动补偿访存带宽优化方法[J].计算机研究与发展, 2012, 49 (1) :55-63.

[7]Azevedo A, Juurlink B.An efficient software cache for H.264motion compensation[C]//Proc of Int Symp on System on Chip.LOS Alamitos:IEEE Computer Society, 2009:147-150.

[8]肖斌, 方亮, 等.低功耗的可重构数据Cache设计[J].计算机工程与设计, 2007, 28 (7) :1508-1510.

访存优化 篇2

实时、高分辨率合成孔径雷达SAR成像技术是当前仿真领域的热点研究问题[1,2]。SAR成像处理具有庞大的数据量和运算量, 通常需要十亿至百亿次的运算速度, 该运算能力需求已远远超过了目前单CPU所能达到的程度。在这种背景下, 采用并行计算平台和并行优化技术是实现高性能SAR成像的必由之路。

实践证明, 访存局部性是SAR成像并行程序性能提升的首要优化因素。这主要由于以下两方面原因:

首先, 从并行计算机性能角度, 访存开销是制约程序性能提升的关键因素[3]。访存开销来源于存储墙问题———处理器速度和存储器速度的差距。随着单机单核向多机多核发展, 并行计算机系统将会遇到更加严重的存储墙瓶颈。为了解决存储墙问题, 大多数高性能体系结构采用Cache存储层次系统。但很多情况下Cache的效果不足以缓解存储墙的问题。密歇根大学Wen-Fen Lin等的研究表明, 对于运行于高性能处理器上的SPEC2000 程序, 平均有57% 的时间用于处理L2 级Cache不命中[4]。因此, 基于层次存储计算机, 有必要研究能够减少访存开销的局部性优化技术。

其次, 从并行程序设计角度, 如果程序具有良好的访存局部性, 那么处理器即将访问的数据很有可能位于离处理器较近且较快的存储器中, 从而能够有效减少访存开销[5,6]。然而, 受限于存储器容量, 许多具有大规模数据量的仿真程序难以直接获得良好的访存局部性。对于SAR成像程序来说, 经过程序耗时统计, 其核心处理过程是距离压缩和方位压缩, 这两个过程主要完成对大规模矩阵数据的循环处理, 所涉及到的循环访问顺序和数据布局模式直接影响到层次存储系统的访存次数和访存开销。因此, 为了使SAR成像程序能够获得较高的性能, 必须对该程序进行访存局部性优化, 以有效减少访存开销, 缓解访存瓶颈对SAR成像程序的性能制约。

因此, 本文以多核工作站为平台, 以典型的SAR成像算法———R-D算法为代表, 研究了SAR成像并行仿真程序的访存局部性优化技术, 重点根据循环变换和数据布局变换的局部性优化理论, 提出了对具有大规模回波数据的SAR成像程序进行局部性优化的技术———转置和分块技术。实验结果证明, 本文提出的转置和分块技术能够有效提高访存局部性, 显著提升SAR成像程序的运行性能。

1 访存局部性优化技术

层次存储系统中各级存储器的有效利用依赖于程序存储访问的数据局部性。因此, 针对层次存储系统的访存局部性优化技术成为充分发挥计算机系统性能、解决存储墙问题的关键技术之一。提高访存局部性的方法包括循环变换、数据变换和两者的有效结合, 下面分别进行介绍。

循环变换是指在不影响程序正确性的前提下, 改变循环迭代的执行顺序, 从而改善层次存储器中的数据局部性。首先, 增强寄存器重用的循环变换主要包括: 采用标量替换来消除寄存器重用无关的数据依赖; 采用展开和压紧、循环交换、循环合并和循环对齐变换来密集对同一数据的重用[7,8]。其次, 增强Cache重用的循环变换方法主要包括: 循环合并、循环分布、循环分块、循环交换、循环逆转、循环倾斜等[9,10]。

数据变换通过改变数据在内存中的布局, 来改善数据访问的空间局部性。常用的数据变换方法包括: 数据放置、数组合并、结构拆分、数据布局变换等[5,11]。这些优化方法最主要的差别在于它们基于不同的理论框架建立了不同的问题描述中间结构。其中, 典型的数据变换方法是Kandemir[11]提出的一种基于超平面理论对嵌套循环进行空间局部性优化的方法。另外, Garcia和Ayguade通过构造通信-并行图来指导动态数据重分布[12]。

循环变换优化受限于数据依赖关系, 而数据变换只能优化空间局部性, 因此许多研究人员对结合循环变换和数据变换来共同优化访存局部性进行了研究[13]。对于新型体系结构, 杜静等[14]深入研究了面向流体系结构的循环变换和数据变换方法, 提出了一种基于数据计算矩阵———D&C矩阵的流重用优化技术, 能够获得良好的访存局部性。

2 SAR成像算法的访存局部性优化

2. 1 SAR成像算法

SAR成像的原理可以简述为从接受回波数据到目标图像建立的过程, 该过程包含了不同数据类型的转换和不同空间的映射, 具体实现流程如图1 所示。成熟的SAR成像算法主要包括距离-多普勒R-D算法、波数域算法和Chirp Scaling算法[2]。其中, R-D算法是现阶段应用最广且最成熟的成像算法, 该算法简单有效, 在机载合成孔径雷达成像中得到普遍应用。因此, 本文以典型的SAR成像算法———R-D算法为代表, 研究SAR并行成像算法的访存局部性优化技术。

R-D成像算法的基本思想是利用雷达目标的回波信号可近似看成在距离向和方位向独立的线性调频信号的原理, 将SAR的二维成像处理运算转换为两个一维运算, 分别在距离向和方位向进行匹配滤波, 最终得到SAR的图像数据[15]。该算法的主要特点是如何在距离多普勒域通过插值来精确、高效地实现距离徙动校正 ( RCMC) 。图2 给出了R-D算法流程框图。

R-D成像程序所处理的数据区域中, 最小功能完整的单位是一个孔径的数据。然而, 单孔径数据通常只能完成距离压缩, 而不够数据量完成方位压缩, 因此不能完成一次完整的R-D成像。一次完整R-D成像最少需要的孔径数据组合了一个滑动窗口, 也就是说, 成像是以滑动窗口为单位的。如图3 所示, 将脉冲采样数据按距离向和方位向展开, 可得到二维成像数据条带和滑动窗口示意图。为了减少任务交互开销, R-D算法进行任务划分时, 至少要以滑动窗口为单位。

2. 2 R-D算法的访存局部性优化

采取有效的局部性优化策略能够减少访存开销, 达到改善系统性能的目的。R-D成像程序通常具有很大的数据规模, 甚至一个窗口任务所访问的矩阵规模已经超出了Cache容量, 这将导致难以重用Cache中的数据。为了解决该问题, 本节研究了如何提高R-D成像程序的数据局部性的并行优化技术。本文选择多核工作站作为访存局部性优化的研究平台。该平台具有多处理器共享层次存储系统的特点, 是研究访存局部性优化的典型平台。

R-D成像处理的核心过程是距离压缩和方位压缩。这两个过程本身和相互之间的数据局部性是对R-D算法并行优化的重点, 其制约因素包括C编译器的按行存储模式和Cache容量。从而, 产生了以下两种情况的R-D算法局部性优化技术: 转置和分块, 旨在分别提高Cache的空间局部性和时间局部性, 以减小访存延迟。

第一种情况, 当任务窗口的数据较大时, 以至于Cache不能容纳距离压缩所需的一行数据, R-D算法应当执行完一个窗口所有行的距离压缩之后进行矩阵转置, 再执行所有列的方位压缩。这主要源于C编译器的存储模式。考虑R-D成像程序开发采用C语言, 其编译器在内存中按行存储数据, 如图4 所示。若程序设计时按列访问数据, 则会造成Cache块频繁替换, 产生巨大的访存延迟。因此, 程序设计时应当尽可能按行访问矩阵数据, 使物理上连续的数据块能够同时载入Cache并被连续访问, 从而能够提高Cache的空间局部性。对于R-D成像程序, 距离压缩是按行访问的过程, 如图5 ( a) 所示, 但是方位压缩是按列访问的过程, 如图5 ( b) 所示。为了保证R-D成像程序能够持续按行访问数据, 应当在距离压缩之后进行矩阵转置, 使得待方位压缩的列数据转置成为行数据, 然后再按行实施方位压缩。可见, 在两个压缩过程之间加入矩阵转置过程, 保证了距离压缩和方位压缩都能够按行访问数据, 即能够连续访问物理上连续存储的数据, 提高了Cache的空间局部性, 是R-D成像程序局部性优化的关键步骤。

第二种情况, 当任务窗口的数据较小时, 窗口的N行数据能够容纳于Cache中, 则R-D算法应当对窗口的矩阵数据按行划分, 每N行为一块。分块后的N行矩阵规模小于Cache容量。并行程序设计时, 依次对每块矩阵数据进行距离压缩和转置, 当所有块的距离压缩和转置都完成后, 再实施完整窗口数据的方位压缩。这种情况的访存优化主要体现在分块后进行小块矩阵的距离压缩和转置。实施分块的原因如下。转置过程虽然能够使方位压缩按行访问, 保证了Cache的空间局部性, 但是对完整矩阵进行距离压缩之后再进行转置, 不能保证转置操作和距离压缩过程之间数据访问的时间局部性。这主要由于距离压缩和转置需要读取原始窗口矩阵的每行数据, 若对完整矩阵进行距离压缩完之后再进行转置, 则距离压缩时载入Cache的矩阵行数据在转置时已被替换出Cache, 转置过程必须重新载入矩阵, 延长了数据访存时间; 若对小于Cache容量的N行数据进行距离压缩之后直接进行转置, 则能够保证距离压缩载入的N行数据不会被替换出Cache, 转置操作能够直接重用Cache中的N行数据, 即这N行数据能够被重用两次, 从而提高了Cache的时间局部性, 减小了转置操作的访存延迟。当窗口矩阵的规模小于Cache容量时, N即窗口矩阵的行数, 则距离压缩时已经能够将完整窗口数据完全载入Cache中, 后续的转置和方位压缩能够直接重用Cache中已有的数据, 实现了矩阵数据的高度时间重用, 使R-D算法具有较小的访存开销。

可见, 为了提高R-D成像程序的数据局部性, 首先需要在距离压缩和方位压缩过程间加入矩阵转置操作, 以提高Cache中数据访问的空间局部性; 其次需要对大规模窗口矩阵实施分块优化, 使得分块后的矩阵规模小于Cache容量, 则连续执行的距离压缩和转置操作能够重用分块数据, 以提高Cache中分块数据访问的时间局部性。这样提高了Cache的命中率, 缩短了R-D成像程序的访存延迟。

3 实验评测

本节介绍了经过访存局部性优化的SAR成像并行程序在多核工作站上的实验测试结果。重点评测了不同的滑动窗口数据量和转置优化策略对访存局部性的影响。通过实验评测和性能分析, 验证了本文提出的访存局部性优化技术的有效性。

实验设计实现了两个不同版本的Open MP R-D并行成像程序, 这些版本以SAR实测数据为输入, 以VC2005 作为开发环境, 以多核工作站作为运行平台, 工作站的详细参数如表1 所示。

第一个版本程序包含1 个任务 ( 滑动窗口) , 第二个版本包含4 个任务, 具体版本比较见表2 所示。可以看出, 两个版本都对8 个孔径数据进行成像, 程序处理的总原始回波数据量是相同的。不同的是, 第一个版本中滑动窗口包含8 个孔径数据, 而第二个版本将总回波数据量划分成4 个子任务依次处理, 从而第一个版本的单个成像任务较之第二个版本, 需要更大的原始回波数据量, 将造成更大的访存压力。对于不同版本程序, 实验还测试了分别包含转置操作和取消转置操作的运行性能, 以验证转置优化策略对访存局部性的影响。

首先, 图6 给出了任务数为1 时R-D成像程序的测试结果。图中详细列出了各功能代码段包含转置和无转置运行的耗时情况。根据测试结果可以明显看出, 取消转置后R-D成像程序的方位压缩过程运行时间明显延长。这是因为C语言按行访问数据, 并且距离压缩过程处理的是数据矩阵的行数据, 因此该过程具有良好的存储器空间局部性。而方位压缩过程处理的是数据矩阵的列数据, 由于列数据在存储器中的数据排列并不连续, 如果按列存储进行方位压缩则会导致频繁的Cache块替换, 造成存储访问的巨大压力。为了提高方位压缩过程的存储器空间局部性, 考虑在距离压缩和方位压缩之间加入转置操作, 这样在方位压缩之前该过程所访问的列数据被优化为按行存储, 从而能够有效提高Cache内的空间局部性, 缩短了方位压缩的运行时间。图6 最左边的数据柱给出了任务数为1 时包含转置和无转运行的耗时情况。从图中可以看出, 无转置时的R-D成像程序运行性能低于加入转置优化的程序性能。该项测试证明了在R-D成像程序中采用访存开销优化技术的必要性和有效性。

其次, 表3 给出了任务数为4 时R-D成像程序的测试结果。表中详细列出了不同子任务和总任务的各功能代码段包含转置和无转运行的耗时情况。从表中可以看出, 4 个子任务在转置前后的主要性能差别集中于方位压缩过程, 如表中有阴影列所示。加入转置操作的方位压缩时间明显短于无转置的方位压缩实现, 如同图6 的优化解释, 体现了方位压缩之前实施转置优化能够显著提高存储器的空间局部性。表中最后两行统计了总程序中各功能代码段耗时情况, 更加清楚地说明了加入转置优化后, 方位压缩过程能够提高约 ( 26. 985 - 20. 828) /26. 985 = 23%的性能, 进一步验证了采用重新数据布局优化对于提高访存局部性的必要性和有效性。

对于任务数1 和任务数4 的R-D成像程序, 图7 分别给出了这两个版本的总程序和方位压缩过程的转置优化耗时情况。图7 中从左至右共四类数据柱, 左边两类数据柱表示总程序运行情况, 右边两类数据柱表示方位压缩过程运行情况, 其中每类都包含有转置和无转置两根子数据柱。根据该图可以总结出所实施的两方面访存局部性优化方法。第一种局部性优化方法是采用转置优化技术。图中可以看出, 这四类数据柱所代表的总程序或者方位压缩过程在转置优化之后的运行时间都能明显缩短。具体原因如图6 的优化解释。第二种局部性优化方法是采用相对较小的任务, 即每个滑动窗口包含相对较少的孔径。成像处理中主要耗时的方位压缩过程需要对整个滑动窗口按照窗口大小方向 ( 孔径排列方向) 进行处理, 如果滑动窗口过大, 即使采用转置优化将列存储转化为局部性好的行存储, 也受限于有限的Cache容量而造成了方位压缩过程频繁的Cache块替换, 引起庞大的访存开销。因此, 需要对过大的任务进行任务分割, 形成具有相对较小步长的滑动窗口以进行方位压缩处理, 从而提高访存局部性。图7 中左边两类总程序运行时间数据柱相互之间进行比较, 可以看出, 无论转置前后, 任务数为4 的程序运行时间都小于任务数为1 的程序运行时间。这是因为, 任务数为1 的版本一程序中每个滑动窗口包含8 个孔径数据, 任务数为4 的版本二程序中每个滑动窗口包含2 个孔径数据, 版本一程序的滑动窗口远远大于版本二程序的滑动窗口。从而, 较之于版本一程序, 版本二程序的方位压缩过程具有较高的访存局部性, 如图7 右边两类数据柱比较结果所示, 并使得总程序具有较短的运行时间。

4 结语

针对层次存储系统的局部性优化技术是SAR成像并行仿真的关键优化技术之一, 该技术能够有效减少访存开销, 提高SAR成像的速度。本文研究了SAR成像并行仿真的访存局部性优化技术, 重点在距离压缩和方位压缩的核心处理过程应用了矩阵转置和分块技术, 以解决矩阵数据量规模庞大和有限存储器容量之间的矛盾。并且以典型SAR成像程序———R-D程序为例, 详细验证了所提出的访存局部性优化方法。实验结果表明, 采用本文提出的转置和分块技术, SAR成像程序能够有效减少访存开销, 加快访存速度, 获得显著的性能提升。

未来的工作主要包括以下几个方面。首先, 从模型指导的角度, 详细分析并量化影响影响SAR成像访存局部性的关键因素, 构建矩阵分块模型。其次, 研究通过优化硬件和进程来实现并行I/O或减少容量冲突, 以达到减小访存开销的目的。最后, 还将继续研究适用于SAR成像程序的更多并行优化方法。

摘要:合成孔径雷达SAR (Synthetic Aperture Radar) 成像仿真对处理速度和存储空间都有很高的要求, 因此基于并行计算平台的局部性优化技术成为了降低访存开销、提高SAR成像速度的关键技术之一。以典型SAR成像仿真程序——R-D程序为代表, 研究SAR成像并行仿真中的访存局部性优化技术, 重点根据循环变换和数据布局变换的局部性优化理论, 提出对大规模SAR回波数据进行转置和分块的局部性优化技术。实验结果证明, 经过访存局部性优化的SAR成像程序能够获得显著的性能提升。

访存优化 篇3

随着计算机的发展, 计算机处理器的性能越来越高, 而且处理器核心数量也越来越多, 强大的处理性能使得系统对内存带宽的要求越来越高, 而对于服务器领域, 代表访存性能的内存带宽非常重要, 也常常成为性能瓶颈, 尽可能提升内存带宽才能充分发挥服务器级CPU超强的处理能力。

龙芯CPU是目前国产服务器领域的主力军, 对其性能进行与目前高端处理器的差异对比, 能帮助我们找到改进和提升国产服务器性能的方法。本文从访存性能方面对龙芯3号系列CPU进行分析, 并将其与Intel的高端服务器处理器至强E5-2690进行对比, 需要注意的是, 访存性能是由多种因素决定的, 因此本文将从CPU的架构和内存管理设备等多方面来分析对比, 并且通过STREAM测试工具来测试其实际内存带宽, 通过测试结果找出龙芯3号系列处理器的不足, 并对龙芯将来的发展方向给出建议。

2 龙芯3A/3B介绍

目前应用在服务器领域的龙芯3A芯片是中国第一个具有完全自主知识产权的四核CPU, 龙芯3A的工作频率为800 MHz~1 GHz, 频率为1 GHz时, 双精度浮点运算速度峰值达到160亿次/s, 单精度浮点运算速度峰值320亿次/s。其采用65 nm CMOS工艺生产, 功耗小于15 W。

龙芯3B1500则是龙芯3A的改进版本, 其主频提升至1.2 GHz, 内部的超标量处理核也增加到了八个, 这使得其峰值运算能力可达192 GFLOPS, 制造工艺也改进为32 nm, 相应的其总体功耗提升为40 W。

3 处理器参数对比与分析

分析龙芯处理器芯片内部结构, 在一次访存操作中数据经过的器件有内存、内存控制器、缓存、CPU核心以及连接总线。若不考虑访存算法的影响, 这些器件的性能和传输速度决定了访存的性能, 这些器件便是需要重点关注的对象。

3.1 处理器主要参数

龙芯3A/3B与Intel至强E5-2690的性能对比如表1所示。

3.2 内存控制器性能分析

龙芯3A/3B与Intel至强E5-2690都采用了将内存控制器集成至CPU内部的技术, 因而双方在内存控制器方面的差距便在于内存控制器本身性能之间的差距。内存带宽的计算公式如下[1]:

数据传输率 (GB/s) =传输频率 (MHz) ×传输位宽 (bit) /8 (1)

龙芯3A的DDR2/3内存控制器最高支持800 MHz频率下的DDR3内存, 根据内存带宽的计算公式计算出其理论工作速度为6.4 GB/s, 而龙芯3B1500因为本次测试中主板稳定性的原因, 内存控制器暂时只支持到1 066 MHz的内存频率, 理论带宽为8.5 GB/s。Intel至强E5-2690的DDR3内存控制器最高则能支持工作在1 600 MHz的频率下的DDR3内存, 理论工作速度12.8 GB/s。

3.3 内存通道分析

龙芯3A/3B使用双通道内存技术, 而Intel至强E5-2690使用四通道内存技术。这使得龙芯3A理论内存带宽由6.4 GB/s提升了一倍至12.8 GB/s, 龙芯3B1500则提升至17 GB/s。而E5-2690的内存控制器可以提供的理论内存带宽由12.8 GB/s提升到51.2 GB/s。虽然在实际应用中, 四通道内存和双通道内存提供的内存带宽差距并非完全是单通道的四倍和两倍的区别, 但四通道仍然优于双通道。

3.4 主频与CPU核心分析

龙芯3A/3B的主频最高达到1 GHz, 龙芯3A的理论浮点运算速度为16 GFLOPS, 龙芯3B1500的理论浮点运算速度为150 GFLOPS, 而E5-2690的理论浮点运算速度达到了320.9 GFLOPS。

核心方面, 龙芯3A的CPU核心为四个64位超标量处理器核, 龙芯3B1500则为八个, Intel至强E5-2690的CPU核心则有八个64位处理器核。龙芯3A/3B的处理器核心在性能和数量上的落后会导致内存带宽和Intel至强E5-2690产生不小的差距。

在缓存方面, 龙芯3A仅有4 MB的二级共享缓存, 龙芯3B1500扩展到三级共享缓存, 大小也仅有8MB, 而Intel至强E5-2690有高达20 MB的三级缓存。但是提升缓存并不能提升内存带宽, 因此缓存性能的差距在本次测试内存带宽时并不会带来太大的影响。

3.5 互联结构分析

龙芯3A/3B的芯片互联结构采用的是800 MHz的16位Hyper Transport 1.0控制器, 两片CPU互联时双向16位模式的总线带宽为6.4 GB/s, 而Intel至强E5-2690中采用的QPI互联总线能够提供最高达96 GB/s的总线带宽。双方在互联总线速度上差距很大, 不过当使用对称多处理系统服务器时, CPU之间进行数据交换带来的延迟究竟会对内存带宽带来多大的影响, 还需要对比单路和双路服务器的测试结果。

3.6 其他因素分析

STREAM测试程序属于访存密集型的程序, 其中循环非常频繁, 循环迭代间无数据相关, 且循环内表达式的数据访问利于向量化, 因此对其源代码进行编译的方式也会影响到STREAM程序测试的执行效率, 若在编译时进行优化, 便能使测试结果大幅提升[2]。通过优化Cache锁机制, 降低Cache缺失率, 也能在一定程度上影响STREAM的测试结果。这些因素都需要避免在测试中出现。

内存时序也是影响内存带宽的因素之一, 内存时序越低, 内存的读写效率就越高, 内存带宽也随之提升。但调低内存时序对内存带宽带来的提升非常有限, 且内存时序属于内存的参数, 因此在测试中应该尽量避免内存时序的不同带来的结果差异。

此外, 还有许多外界因素如运行环境的温度和湿度或是测试部件的新旧程度等, 这些外界因素通常不会对结果产生非常大的影响, 但是在测试中应该尽量避免。

4 测试结果与分析

4.1 STREAM测试与结果

在实际测试开始前还需要对测试环境进行调整, 在硬件方面, 主板上的BIOS和BMC都需要升级至最新版本, 调整对性能有影响的参数设置。在软件方面, 由于操作系统本身会占用一部分系统资源, 因此双方都采用Linux作为测试平台, 并且将一些没有必要的系统守护进程关闭, 还可以关闭除irqbalance和messagebus之外的系统服务进程来节省系统资源。

测试使用STREAM对采用龙芯处理器的服务器进行测试, 使用频率为1 333 MHz的DDR3内存条, 分别测试四项操作copy、scale、add、triad。其中copy操作先访问一个内存单元读出其中的值, 再将值写入到另一个内存单元。scale操作先从内存单元读出其中的值做乘法运算, 再将结果写入到另一个内存单元。add操作先从内存单元读出两个值, 做加法运算, 再将结果写入到另一个内存单元。triad操作为将copy、scale、add三种操作组合起来进行测试。测试结果如表2所示。

MB/S

使用STREAM对采用Intel至强E5-2690处理器的双路服务器进行测试, 使用频率为1 600 MHz的DDR3内存条。测试结果如表3所示。

使用STREAM对采用Intel至强E5-2690处理器的双路服务器进行测试, 使用频率为1 333 MHz的DDR3内存条, 测试中对CPU主频进行调节, 测试得出的不同主频下的结果如表4所示。

4.2 STREAM测试总结

测试结果由四项数值组成, 这里以经过综合操作得出的Triad项数据作为内存带宽的参考数据。通过以上测试得出的数据, 对比实测数据和理论数据并计算实测数据达到理论数据的百分比绘制出图1。

MB/S

MB/S

4.3 结果分析

如图1所示, 测试中单片Intel至强E5-2690的内存带宽达到了35 GB/s。而单片龙芯3A的内存带宽仅为4 GB/s, 甚至不如单通道能提供的6.4 GB/s, 而龙芯3B1500的内存带宽也仅有9 GB/s, 龙芯3A/3B除了实际内存带宽较低以外, 在内存控制器的性能发挥上也不及E5-2690。原因可能是CPU核心不能及时地处理传送进来的信息, 导致内存控制器无法全速运行, 也可能是内存控制器无法和CPU核心全速协同工作或者缓存传送数据的延迟过大。

对比图1中单路与双路测试的结果, 可以发现双路的性能基本都略低于单路, 这说明CPU在多片互联时访存性能都会在一定程度上降低, 性能的降低或许是由于互联总线的通讯延迟, 也有可能是由于两个CPU同时请求访问一段内存地址时需要花费额外的资源来解决争用问题导致访存性能降低。不论是何种原因, 访存性能降低的幅度都不大, 即使对互联总线的性能进行优化, 访存性能能够得到提升的幅度也非常有限。对至强E5-2690进行调频测试的结果如表4所示,

可以看出主频的提升带来的更高处理能力确实对内存带宽的提升带来了非常显著的效果, 而且当Intel至强E5-2690的主频达到一定程度后, 继续提升主频对内存带宽的影响已经非常小, 说明内存控制器此时已经基本发挥出1 333 MHz内存的全部的性能。

5 结语

龙芯3A/3B采用了片内集成内存控制器、Hyper Transport控制器以及双通道内存等先进技术, 但是其性能仍然无法与至强E5-2690相比, 而造成其差距的主要原因在于其片内内存控制器的性能没有全部发挥, 且内存控制器能支持的内存频率也不如E5-2690。对于内存控制器而言, 最基本的性能参数就是内存频率。围绕内存频率提升龙芯CPU内存带宽的方法总结如下:

(1) 提升主频, 提高处理器核心性能, 改进制造工艺限制功耗提升;

(2) 在CPU的处理能力足够发挥内存控制器的全部性能时, 改进内存控制器, 使其支持更高的内存频率;

(3) 在CPU内部集成更多的内存控制器, 组成更多内存通道;

(4) 提升HT总线的性能, 优化访存算法和进程调度等算法来保持现有多路CPU的稳定性。

在改进CPU本身的访存性能的同时, 还可以从改进内存控制原理上着手, 比如之前提到的内存时序, 在降低内存时序的同时优化其算法能有效提升内存带宽, 有研究提出通过预测的方法来控制内存读写的预充电时机[3], 针对空间局部性的情况选择是否在读写操作完成后立即进行预充电, 从而提升性能, 以此为原理进行改进后的优化在实验中能使平均内存访问延时减少7.35%[4], 而延迟的减少便能带来内存带宽的提升。同理, 改进CPU与内存间的直连总线、减少数据传输延迟也能在一定程度上提升内存带宽。对于多片CPU互联造成的性能下降可以通过改进算法优化, 如何进行地址映射将决定系统中的内存空间跨芯片访问方式和访问效率[5], 通过优化龙芯CPU的地址映射方式能在一定程度上减少多片CPU互联对访存性能带来的影响。

单纯提升内存带宽并不能无限提升系统整体性能, 却需在内部集成越来越多的内存控制器, 既增加了芯片的面积和制造难度, 也增大了功耗。单纯追求技术的改进和数据上的提升是不可取的, 龙芯需要在保证较低功耗的前提下提升主频, 改进内存控制器, 做到性能和功耗平衡发展。

摘要:阐述了龙芯3号CPU的性能特点及应用情况, 分析了影响内存带宽的因素以及龙芯与至强处理器之间的差别, 并使用STRAM测试工具测试出它们之间实际的内存带宽差距。提升龙芯CPU的主频并且改进片内内存控制器来提升内存带宽, 同时保证龙芯系列低功耗特点。

关键词:龙芯3号CPU,Intel,至强CPU,STREAM,内存带宽,内存控制器,CPU主频,功耗

参考文献

[1]Edk.双通道一定具有更高的内存带宽吗[J].现代计算机 (普及版) , 2006 (02) :114-115.

[2]孟小甫, 高翔, 从明, 等.龙芯3A多核处理器系统级性能优化与分析[J].计算机研究与发展, 2012 (49) :137-142.

[3]Schumann R C.Design of the 21174 Memory Controller for Digital Personal Workstations[J].Digital Technical Journal, 1997, 9 (02) :57-70.

[4]李文, 唐志敏.一种减少内存访问延时的方法[J].计算机工程, 2006, 32 (03) :242-244.

上一篇:无限的起源及发展研究下一篇:非线性编辑的应用软件