关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > 探索内存架构:处理性能的基石

探索内存架构:处理性能的基石

作者:时间:2007-10-08来源:网络收藏
处理器架构的一个主要性能特点是单位时间内能执行多少专用工作。EEMBC (微处理器基准协会)基准与Dhrystone MIPS (每秒百万次指令) 评分不同,它描述了在系统应用中执行任务的处理器性能。EEMBC 基准的1.0版本并未涉及对处理器性能系统级的影响,如内存子系统,因为该基准经常在处理器的第一内起作用。但EEMBC的第二代针对网络与数字娱乐的系统级基准,更实际地强调具有较大内存的处理器。

处理器内存子系统的系统级影响越来越重要,因为内存类型和大小及系统中的存取方式规定了处理器内核性能的上限。据 ARM处理器部门的Gerard Williams III认为,理 想内存系统的处理器必然要采用,并有理想的存取总线的方式。芯片设计师必须首先了解处理器的IPC (每周期指令)能力,然后尝试实现能将性能损失降到最低的内存架构。这种性能损失可能来自缓存或内存存取影响,如由于容量损失、缓存大小或冲突失效形成的丢失率。

匹配良好的内存子系统可以保持处理器的最大IPC 率,而匹配不好的内存子系统会空置内核的执行单元,而大大地降低处理器的性能。虽然构建与实现内存子系统不会影响处理器内核的性能,但还是具有很大的挑战性,因为在处理器逻辑与内存间存在的性能差异正随着每次工艺技术的变化而逐步增大。实际上,内存存取延迟的改进及每个工艺技术步骤接收内存请求的时间都比处理器内核逻辑的同量时钟速率提高要少。

同样,软件开发人员通过有预见性地在内存子系统中安置编程指令与数据,可实现的最佳性能影响,就是保持处理器的最大IPC率。然而,在设备使用情况下,内存子系统中匹配不当的程序指令和数据,会极大地降低处理器的性能。Freescale关于防止M1存储冲突的应用注释提供了一个范例,说明了由于存储冲突会造成54% 处理器性能下降,开发人员可通过更好地安置数据器来避免发生这种情况(参考文献1)。

一般而言,编译器与仿真工具以全局的优化对在内存中放置指令和数据可提供有限的帮助。Green Hills的优化编译器支持内存中的功能重新安排,以优化缓存命中率。Texas Instruments的CodeSizeTune 基于仿真的编译工具可帮助开发人员探索配置,采用影响代码大小和执行速度的不同的编译器设置自动构建和仿真不同版本软件(图1)。一般来说,对许多高效和实时约束系统来说,软件开发人员的困难就是要了解内存子系统以避免由于系统不能有效地使用处理与内存资源,而承担不必要的BOM (物料清单)成本。

延迟容差

在实现内存架构时最主要的担心就是使处理器能够对系统使用的内存的存取延迟实现容差。设计合理的内存子系统可以掩藏系统多数的内存存取延迟,并能提供足够的读/写吞吐速率,即相同数据模块中随后发生的数据内存存取时间,以支持连续存取。这种情况避免了空置处理器的执行单位的指令和数据。内存设计人员必须根据内存的芯片面积、内存消耗的总功率、软件开发人员对内存使用的方便性及工具等因素对内存存取延迟进行权衡(参见附文1“方便使用”)。

内存存取延迟的直接诱因为用来执行地址解码、激活适当字线、检测位线及驱动检测放大器输出的时间。地址解码延迟为锁定地址,确定哪个字线需要激活的时间,此过程将O(n log n) 时间作为内存行与列寻址大小的函数。因此,随着内存结构的扩大,解码与寻址所需的时间也相应增加。字线激活延迟是字线上升所需的时间,主要是与线长相关的RC 延迟,线长越长则延迟越长。位线检测延迟是检测放大器检测单元内容所需的时间。位线架构、检测驱动线的RC、单元与位的容量比、及检测放大器拓扑等都会影响位线检测延迟。输出驱动延迟是一种RC 延迟,驱动从检测放大器到输出端传送数据的时间。

内存与管理内存的逻辑占用了许多基于处理器设备的芯片面积。结果,内存可以是设备的芯片成本最大的部件,也是系统中消耗动态和静态功率最大的部件。许多类型的易失与非易失内存各有好坏,系统设计人员必须要兼顾并管理重要的参数,以较低的成本和功耗来实现足够好的内存性能。

为了兼顾掩藏内存存取延迟、芯片成本及功耗,基于处理器的设备通常都依赖一个多层内存结构,将少量快速而昂贵的内存靠近处理器内核,而将大量慢速内存远离处理器内核(图2)。处理器寄存器是系统中最快且最难得的内存资源,内存体系还可以使用局部内存或TCM(紧密耦合的内存)、多阶缓存、及易失性与非易失性片上内存与片外内存。

现代的优化编译器在管理使用处理器寄存器方面很合适,但在管理与优化其它内存上则较差。这种情况部分是由于利用本地查看程序代码,优化使用寄存器与战术实施配合良好。为了在基于处理器的系统中优化使用其它内存结构,如TCM,需要更具全局性地查看系统,此功能正出现在多数的编译器中。

局部内存或连接到处理器核的TCM通过局部或专门的内存总线来存取类似于缓存的性能。内存存取确定机制为TCM与缓存间的主要区别。人工暂时锁定缓存线可在线级使能缓存,使其作为一个TCM。程序指令与通过TCM实施代码存取具有确定的能力,但对于缓存,设计人员必须考虑缓存丢失的最坏情况。“对于缓存丢失处理的典型经验法则是,存取延迟比前一级别增长一个数量级”Innovative Silicon的架构总监David Fisch 说。“L2 内存存取延迟是L1 缓存存取延迟的10 倍,而L3缓存存取延迟又是L2 内存存取延迟的10倍。”使用TCM将任务加给软件开发人员手动的管理内存空间,通常是使用DMA 控制器,以便在处理器 需要时,使必要的代码和数据在TCM 中。

缓存由速度稍慢的内存构成来掩藏大量速度较慢内存的延迟。较慢的内存密度更大,所以也更便宜。缓存依赖暂存的空间局部区域来掩藏较慢内存的存取延迟。“暂存局部性” 描述了这种区域特点:如果处理器请求一些数据,那么,处理器很快又需要相同的数据。通过在存储中保留数据复本,缓存可以避免数据进入较慢的内存中。“空间局部性” 描述了区域的另一种特性:即处理器请求在某个内存位置的代码,而下一处理器请求为下一内存位置或与其相近位置的代码。利用在初始取数同时预取靠近当前请求数据的一定量的数据,缓存在其存储中就可以有下几个数据位置,而不会从较慢内存中发生另一取数的延迟。

较大缓存通常意味着牺牲更多芯片面积而实现较少的缓存丢失。提高表示特定的内存可存在于缓存中的位置数的缓存相关性,几乎总能减少缓存丢失。缓存线长度可根据应用的特性作正向或反向变化。Tensilica首席架构师Bill Huffman告诉我们:“配置缓存是一项迭代任务,它高度依赖可在处理器中执行的应用集。”

平衡各种缓存参数是一个复杂的过程,涉及到在芯片面积与丢失率间的取舍(图3)。图中列出了JPEG编码应用的缓存配置范围:从负载丢失率为13.4% 的4k字节直接映射的16 字节线的配置,到负载丢失率为1.9%的32k字节、四路相关的64 字节线的配置(参考文献2)。尽管缓存越大越好,但对32k字节缓存有优势收益递减的趋势。提高缓存线大小所具有的性能优势比缓存大小增加一倍所提高的性能更多,缓存线越长,芯片成本越小。尽管大缓存相关性越高越好,但在此例中,从两路到四路相关性能产生的优势很少。简而言之,对于配置缓存并没有明确的经验法则。

决策驱动器


处理器内核架构为内存架构选项中设计人员的第一选择。原因是设计人员构建内核时假定了内存组件与内核如何接口并对其如何补充。Von Neumann 和Harvard 架构为两种常见的处理器架构,分别模仿并实施不同的方法来查看和存取内存。基于von Neumann 架构模型的处理器将系统内存建模成保存程序指令和数据的单一存储结构,并有单一总线接口服务所有程序和数据存取。基于Harvard 架构的处理器对系统内存建模,程序指令和数据作为物理和逻辑分离存储结构,以不同的总线接口,一个用于指令,另一个用于数据。Harvard 架构支持同时存取程序指令与数据,而von Neumann 架构则不会。

为了选择一个优化的内存设计 ,设计人员还必须了解应用的特点和要求。对内存设计的考虑有: 应用的数据如何进出系统,处理器能否直接加载数据或外部代理,DMA控制器能否将数据载入处理器的局部RAM中?同时也必须对输出提出类似的问题:处理器会不会直接驱动输出端口?或由外部代理,如DMA 控制器来驱动,能否将数据从处理器的局部RAM 传输到I/O 接口中?其它问题包括:什么是应用的启动过程?系统能否有效地利用特殊内存接口?片上内存资源能否容纳所有的代码与应用数据,还是仅能容纳性能敏感的代码与数据?

应用启动要求从何处存储初始化代码,以及系统通过什么接口进行存取。片上OTP(一次性可编程)ROM很小且具有较高的芯片密度,所以对于储存启动代码非常有用。它支持快速启动,因为在启动后到开始执行不需要等待时间。初始化代码可能在闪存中的某个位置驻存并执行,也可以存在于芯片外内存中,也可映射到片上指令RAM中,这可造成系统启动时间较长。如果应用代码和数据能驻存于片上内存中,就没有必要支持片外内存接口。如果性能敏感的程序代码可载入局部内存中,设计人员就不需要实施缓存了。

设计人员可根据已知应用的约束条件调整处理器,这些处理器仅包括应用所需的随机和非易失性内存量。TCM的大小和参数、缓存或特殊内存都是针对应用而设计的。针对较宽应用的处理器通常实施一个普通的内存架构,这些架构包括应用的最大资源要求,以提供较少资源的各种设备来满足较低的成本要求。对于采用类似处理器核架构的系统,内存子系统成为更高级的驱动器,以提供系统可交付的处理性能、功耗及价格(参见附文2“多种选择”)。

内存控制器对所服务的内存模块的实现进行抽象处理,使其成为对处理器系统的数据管道。它们包含读取内存模块所必须的逻辑,根据所服务内存的类型,还包括写入、刷新、测试与校正错误内存等。对于片上内存,内存控制器能够显示公司的专有发明,它的处理器设备不同于竞争者的类似设备。结果,多数的处理器厂商不愿过于详细地讨论其内存控制器。他们指出了一种用于内存控制器的技术,包括使用宽数据总线,多路复用或交错式存取内存库、、流水线、交易记录以及专门和不确定的存取模式等。

除了实现的内存的特性外,影响内存控制器设计和效率的系统级因素还包括物理寻址如何映射到内部演示内存系统上,寻址模式的类 型(如突发、随机与并行存取模式)、混合读写、未使用的内存如何进入低功耗模式。其主要的使用模型通常确定了内存控制器的架构,以使图形或多媒体控制器可优化进行序列存取,而通讯系统的内存控制器可在较大的内存范围内优化随机存取。对于有系统级可靠性要求的嵌入式内存,针对额外的复杂性,内存控制器可提供ECC(错误纠正代码)保护。

内存控制器的流量模式在单核处理器系统与多核处理系统之间有很大区别。单核系统的内存处理器可使用一个数据流,但在多核心系统中的共享内存,内存控制器需要有处理多个数据流及随机流量的能力。对于多核设计,内存架构必须支持快速及有效的信息传递,以及处理器间的数据共享。尽管不同的方法可实现这些目标,但没有单一配置对所有类型的通信都有效。快速的点对点通道及队列,对交换短小且重要的信息非常重要,然而共享内存对于共享较大的数据结构更为有益。当使用共享内存时,用户需要对同步和内存管理的编程支持。

随着越来越多的嵌入式系统组合到多内核作为设计的一部分,特别的异构内核,开发工具的发展会更好地协助开发人员从空间和时间上安置代码和数据,来实现更好的延迟容差,并使复杂性越来越高的设计发挥出最佳性能。开发工具必须可协助开发人员更好地了解系统的全局行为。并将该行为与系统中可用的内存子系统进行匹配。否则,内存和芯片设计人员必须继续将更复杂的控制算法组合到内存控制器中,以明确地补偿软件设计人员和开发工具对内存系统的行为缺少可视性的缺点。

参考文献
1. Schuchmann, David, “Tuning an Application to Prevent M1 Memory Contention,” Application Note AN3076, Freescale Semiconductor Inc, May 2006.
2. “How to Optimize SOC Performance Through Memory Tuning,” White Paper, Tensilica.

附文1:方便使用

编程的简易性对软件开发人员来说是一种十分重要的特性。可隐藏内存体系的平坦的地址空间,便于开发人员进行编程。Microchip Technology数字信号控制器部门的技术人员Brian Boles 说,“一般来讲,将应用针对通用的内存架构而设计编译器比较容易些。”要让编译器最佳地将代码和数据分配到专用的内存结构,而对应用代码的全局的动态特性没有可视性是比较困难的。

对于操作系统的复杂应用,如Linux,内存架构需要支持虚拟寻址。然而,使用大型操作系统满足上市时间表压力的开发人员来说,可能会失去对如何分隔软件利用片上资源来节能和节省成本的深入考虑。冲突的某些问题是权衡与确定有多少片上内存需要操作系统通过片上内存运行,以及这种方法留给应用的内存数量。“到目前为止,通用操作系统没有什么虚假的连接规定完整的物理到内存系统的映射,促进基础内存系统最佳使用。”Intel嵌入式与通讯集团营销经理Phil Ames说。“然而,在嵌入式设计中采用手动调整软件,使内存系统得到最佳使用是十分普遍的。”

管理各种不同类别的内存需要专门的软件。例如,小容量NAND闪存(528 字节/每页)与大容量 NAND 闪存(2112 字节/每页)通常需要不同的闪存管理软件。一个解决这种情况的方法是将软件设计成模块化嵌入层中,以使软件开发人员在必须修改时,尽量减少重写量。Toshiba内存产品集团的技术人员Doug Wong说:“NAND 闪存为最早的商品化内存,将重要的智能特性加入内存设备中,以使其更易使用。”Toshiba的LBA-NAND 与兼容eMMC的嵌入式NAND 中都含有可执行NAND管理功能的内置控制器,如模块管理、损耗均衡、及逻辑到物理模块的转换及自动错误校正等。这种方法明显地降低了系统架构师或软件工程师在对FFS(闪存文件系统)或FTL(闪存转换层)管理NAND闪存设备的负担。

附文2:多种选择

以下的范例使用基于ARM7的NXP LPC2129 处理器内核,说明了某些处理器核架构对内存架构可能的第一决策影响(图A)。ARM7 为三级流水线von Neumann架构机器,有一个端口通过AHB(高级高性能总线)桥连接到ARM 高性能总线。该桥是提供在处理器与外设频率间同步的必要途径。以容纳处理器接口,或作为与多个主控设备总线的接口。尽管该桥非常必要,但当处理器通过AHB存取任何数据时,应用一个双时钟延迟处理,如果地址超出序列,则应用一个额外的性能处理。

一个放置程序和数据内存的明显位置是在AHB 一侧的总线上,以便处理器可存取内存,且外设可直接存取内存数据。但是,AHB 桥还是应用了两周期的延迟处理。为了优化 处理性能,设计人员将程序内存放置在AHB桥的处理器的局部总线一侧。尽管这种结构提高了处理性能,但其它总线主控设备不能直接存取此内存,迫使设计人员将更多的内存放置在DMA 主控设备的AHB 一侧。这种方法增加了旧工艺的成本,但在深亚微米工艺中,性能增加比成本增长更重要。

闪存比6T(6个三极管)SRAM 单元速度慢,但由于闪存具有非易失性、固态可靠性、较低的功耗及设计灵活性,所以在嵌入系统中使用闪存非常重要。在单一内存类型内的许多子体系结构允许你调整架构以满足应用的需求。这些需求包括存取速度、编程速度、读电压功耗水平及成本等。其它对闪存的重要考虑有,使用年限及支持的擦除次数。

嵌入式闪存的随机存取速度约为50 ns、商业闪存约85 ns,在针对速度超过100 MHz的处理器时就会出现问题。然而,因为存取嵌入式闪存并不受针脚限制,嵌入式闪存子系统可使用带有某些接口逻辑的较宽的位宽来提高性能。在此例中,128 位的宽度允许系统同时存取四个处理器数据字,该数据字为线性码提供了80 MHz 的有效存取频率。将以可逻辑四字的存取与读取结合,在以闪存执行时,可允许分支预测实现可接受的性能。这种方法实现了更为节省成本和功耗的SRAM 或闪存作为本地内存以随机存取数据,多数为程序代码的线性存取,而不仅是SRAM 实现。

有多种选择可以实现总线架构来支持高带宽外设。一种是使用多层总线,它是一种矩阵,允许多个主控设备以不同方式存取内存资源。另一种方法是设计一个AHB至AHB 桥,这样就有两个或更多的独立总线。由于局部内存SRAM 并不支持DMA,不论选择哪种方法,任何高带宽外设(如以太网或USB)都应有专门的内存资源可直接存取内存。所存储的数据包和帧的数量、数据速率及处理器速度决定着专用内存的大小。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)


关键词: 嵌入式 缓存 缓冲

评论


相关推荐

技术专区

关闭