0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

测试手机芯片带宽性能及优化测试方法

电子设计 来源:互联网 作者:佚名 2018-01-02 11:36 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

手机的带宽吞吐性能是影响手机总体性能的一个重要指标,目前几乎所有第三方的手机评测软件都有对这一项指标的单独测试。但这些测试基本上都存在一些问题,并不能全面真实地反映手机的带宽吞吐性能。文章从硬件的角度深入分析了CPU、Cache、DDR等模块的实现方式对带宽测试软件的影响,并结合最常用的ARM系列CPU做了对比,最后提出了新的带宽吞吐性能评价方式。

0引言

随着智能手机的快速普及,2015年全球的出货量已达14亿台。这其中大半部分都是Android系统的手机,它们的核心操作系统基本一样,但硬件平台就各有不同了。对手机硬件性能的评测成为了业界以及用户所关注的重点。相应的,第三方的手机测评软件就应运而生了。这些测评软件往往将纷繁复杂的各项硬件性能转化为一个个清晰明了的数字,让消费者以最直观的方式了解一部手机的性能水平。由于其使用的简便性和直观性,不光是手机的最终消费者经常使用它作为手机选择的参考,不少方案厂商也利用这些测评软件作为手机芯片选择的依据。

现代的手机主控芯片都是多核系统,运算能力越来越强,但内存性能却提升有限。因此内存性能往往成为系统性能的瓶颈,对内存带宽吞吐性能的测试也显得尤为重要。本文将分析目前带宽性能测试软件的一些局限性,结合硬件设计探讨影响带宽性能测试的因素,最后提出对带宽性能测试优化的方向。

1 CPU测试带宽的局限性

手机的主控芯片是个复杂的SoC(System on Chip),有多个主设备可以访问DDR(内存),DDR控制器的复杂程度也越来越高,它可以协调均衡各个主设备的访问。但除了CPU,其他的主设备第三方用户是不方便直接用软件来控制的,如视频编解码模块,这些模块都需要专门的驱动程序来控制,而驱动程序都是由硬件厂商提供,第三方用户不了解其中的细节。因此一般是利用统计CPU访问DDR的速度来评估芯片总的带宽吞吐性能。这就带来一个问题,可能CPU全速运行测试程序所需要的带宽也达不到DDR能提供的理论带宽,这时带宽吞吐性能受限于CPU发读写命令的能力,而不是受限于DDR。

例如,以ARM cortexA9 CPU做仿真实验,在CPU访存接口上挂一个理想的32位DDR模型(有访问请求立即响应,没有延时),CPU频率为1 008 MHz时,测得数据拷贝带宽为2 140 MB/s。而手机上一般会配置540 MHz 32位DDR,能提供的理论带宽为4 320 MB/s,已经远超cortex-A9的带宽吞吐能力了,这种情况下带宽性能测试得到的只是CPU的访存性能,而不是DDR的总体带宽性能。

2 Cache对带宽吞吐测试的影响

现在的带宽吞吐性能评测软件都是利用统计CPU访问DDR的速度来评估芯片总的带宽吞吐性能,这就需要考虑CPU Cache的影响。

为了加快访问数据的速度,现代多核处理器通常包含私有缓存(L1 Cache)和末级共享缓存(L2 Cache)[3]。L1 Cache大小通常有几十KB,L2 Cache通常有数百KB到几MB。CPU对数据的访问都会经过Cache再到DDR。不同的Cache行为实现会导致CPU对DDR访问量的巨大差异。

目前手机主控芯片几乎都是采用ARM Cortex系列的CPU,下面就以ARM cortex系列最常用的CPU(A5,A7,A9,A53)来分析不同的Cache配置对CPU访存性能的影响。

2.1对连续地址的写操作

CPU对连续地址的写入速度是反映带宽性能的重要指标,软件上对应memset操作,用C语言描述如下:

int *dst;

for(int i=0;i

*dst= value

实际上由于Cache的存在,数值并不是直接写到DDR中。对于ARM cortexA5和cortexA9 CPU,这一过程如图1所示。

L1 data Cache一般都配置为write back + write allocate。但ARM对所有系列CPU的L1 Cache都做了优化:检测到连续地址3次Cache line的write操作,即自动切换为write through + write no allocate。所以可以看到在图中L1 data Cache只有前3个Cache line(0x1000000~0x1000040)的数据从DDR中读取出来了,后面的数据就直接写入L2 Cache了。

CortexA5和cortexA9的L2 Cache 依然是write back+write allocate。但没有类似于L1 Cache那样的自动切换到write through + write no allocate的机制。所以每次从L1 data Cache有数据写到L2 Cache,都应该从DDR中读取相应地址的一个Cache line大小的数据分配到L2 Cache中,再对这个分配好的Cache line做写操作。但实际上由于L1 data Cache每次对L2 Cache的写操作都是一个Cache line的大小,即整个Cache line都被重写了,因此也不用关心DDR中对应这个Cache line地址的数据是什么了。这里L2 Cache就直接分配了一个Cache line来存放L1 data Cache写过来的数据,没有再去读DDR。

ARM cortexA7和cortexA53的情况又有所不同,如图2。

CortexA7和cortexA53的L1 data Cache 实现机制与前面一样,但L2 Cache的实现不同。虽然同样是write back + write allocate,但其有个自动检测机制,检测到连续地址的127次Cache line的write操作可以自动切换到write through+write no allocate。如图2所示,地址0x1002000之后的数据就直接写到DDR中了。

根据上面的分析,对于CPU向外写数据的操作,在小于一定大小的情况下,实际上并不会操作DDR,而是在操作L2 Cache。表1是两款手机CPU 同频下的memset性能对比,它们的CPU分别使用了ARM cortexA7和cortexA9。

从表中数据可以看出,在size小于10 KB时,cortexA9性能好于cortexA7,此时都是对L2 Cache的访问,性能决定于CPU的指令发射能力以及流水线的乱序执行能力,这些能力cortexA9都强于cortexA7。在10 KB 100 KB时,cortexA9的性能逐渐被cortexA7反超,因为此时cortexA9也开始有访问DDR的操作了,size越大访问DDR占比越大,最后几乎完全是对DDR的访问了。这时性能主要由DDR的性能决定。

2.2对连续地址的读操作

CPU对连续地址的读取速度也是反映带宽性能的重要指标,可用C语言描述如下:

int *src;

for(int i=0;i

value = *(src + i);

cortexA5和cortex-A9的L2 Cache是非exclusive模式,即L1不命中时,从DDR读取回来的Cache line会保存在L2 Cache中。如图3。

CortexA7和cortexA53的L2 Cache是exclusive模式,即L1不命中时,从DDR读取回来的Cache line不会保存在L2 Cache中。只有当被改写过的Cache line从L1 Cache刷出来时才会存到L2 Cache中。如图4。

以上两种实现方式各有利弊。做重复读取性能测试时,如果数据量小于L1 data Cache size,exclusive模式和非exclusive模式性能相当。当数据量大于L1 data Cache size,且小于L2 Cache size时,非exclusive模式性能较好。当数据量大于L2 Cache size时,exclusive模式性能略好,如果除了读操作还有其他的写操作,那么exclusive模式性能优势就更明显了,因为这种模式下读操作占用了较少的L2 Cache,可以分配给其他操作使用。

2.3数据拷贝性能

数据拷贝是CPU最常见的访存行为,也是带宽性能测试软件最常用的测试方式。数据拷贝包含了从源地址的读数据操作和向目标地址的写数据操作。一般来讲数据地址都是连续的。前面两节讨论了连续地址的写操作和读操作,这两项性能也大致决定了数据拷贝的性能。

除此之外,DDR控制器在读写交替时的处理也会影响数据拷贝的性能。

DDR的地址线分为bank、row和column。一个bank中同时只能打开一个row,而处于不同bank中的row是可以同时打开的。为了充分利用这一特性来优化DDR访问效率,bank、row、column地址和物理地址的对应方式会被精心设计,有多种映射方式[4]。图5是某款手机的地址排列方式。

假设做数据拷贝,源地址是0x100000(对应row2,bank0),目标地址是0x200000(对应row4,bank0),它们对应同一个bank的不同row。从源地址读一组Cacheline大小的数据,需要打开DDR的bank0_row2,然后CPU将这组数据写入目标地址,这时就需要先关闭bank0_row2,再打开bank0_row4。在这个读写交替的过程中,就有对DDR某一row的关闭和打开操作,需要耗费较多的时间。

同样还是做这样的数据拷贝,如果将目标地址换成0x201000(对应bank1_row4),再做写操作时就不用将bank0_row2关闭,直接打开bank1_row4就可以了。并且由于源和目标地址的row都没有关闭,后面的读写操作都不用再做打开row的操作了,这就大大地提高了数据拷贝的性能。表2是某款手机(采用cortex-A9 CPU)在不同目标地址条件下数据拷贝性能的测试数据。

可以看到,仅仅是改变目标地址就使连续地址的数据拷贝性能出现了很大差异,避免读写地址冲突后数据拷贝性能可提高31%。

3带宽性能测试的优化方向

前面分析了目前手机带宽性能测试的局限性,并结合硬件设计探讨影响带宽性能测试的因素。根据这些因素,可以从以下几个方面进一步优化完善带宽性能测试方式:

(1)多个主设备同时访问DDR,尽量达到DDR的带宽极限。手机主控芯片中除了CPU,对带宽需求最大的就是GPU,而GPU一般都可以通过上层的openGL软件操作。GPU的测例可以使用多个图层的叠加操作,这种操作对GPU的运算能力需求较弱,对带宽要求较高。在测试时,让CPU密集执行数据拷贝操作,同时让GPU做图层叠加,结合两者的实际完成时间给出带宽性能评估分数。

(2)用CPU测试数据拷贝性能,数据量要远大于L2 Cache的大小,避免Cache的影响。除了连续地址的数据拷贝,还要增加非连续地址的数据读取性能测试,以避免CPU预取功能的影响,更真实地反映DDR的单次延时。如以下C代码:

int *src;

for(int i=0;i

value = *(src+i);

注意STRIDE的取值要大于两个Cache line size,以免触发连续Cache line的预取操作。将连续地址的数据拷贝和非连续地址的数据读取性能结合评估并打分。

(3)为全面考察不同地址对数据拷贝性能的影响,做多次数据拷贝操作,每次都改变一下目标数据地址的偏移,如以下C代码:

int *src, *dst;

for(int j=0;j

for(int i=0;i

*(dst+i+j*0x1000) = *(src+i);

4结束语

第三方的带宽吞吐性能测试软件不仅为终端消费者提供了手机性能的比较手段,也为手机方案厂商选择芯片提供了可靠依据,甚至最上游的芯片设计厂商也会利用这些测试软件来指导芯片架构的设计。本文提出的带宽吞吐性能测试优化方式可以更全面公正地评估手机芯片的实际性能,加快了芯片设计性能问题的收敛,具有良好效果。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    135

    文章

    9499

    浏览量

    388729
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11216

    浏览量

    222952
  • 带宽
    +关注

    关注

    3

    文章

    1029

    浏览量

    43025
  • soc
    soc
    +关注

    关注

    38

    文章

    4514

    浏览量

    227619
  • 手机芯片
    +关注

    关注

    9

    文章

    375

    浏览量

    50594
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    提高RISC-V在Drystone测试中得分的方法

    :编译器如何优化生成的机器代码也会影响Drystone的得分。优化的编译器能够生成更高效的机器代码,从而提高性能。 提高 RISC-V 在 Drystone 测试中得分的
    发表于 10-21 13:58

    新思科技测试IO方案加速HPC和AI芯片量产

    方法和经过改进的自动化测试设备(ATE),才能保持信号的完整性、准确性和性能。 随着半导体复杂性的增加,器件的结构测试变得更具挑战性,既要求配备高
    的头像 发表于 10-15 11:33 538次阅读
    新思科技<b class='flag-5'>测试</b>IO方案加速HPC和AI<b class='flag-5'>芯片</b>量产

    FPGA测试DDR带宽跑不满的常见原因及分析方法

    在 FPGA 中测试 DDR 带宽时,带宽无法跑满是常见问题。下面我将从架构、时序、访问模式、工具限制等多个维度,系统梳理导致 DDR 带宽跑不满的常见原因及分析
    的头像 发表于 10-15 10:17 545次阅读

    干簧继电器:芯片测试仪的“性能催化剂”

    在集成电路(IC)制造领域,测试环节是确保芯片性能和可靠性的重要步骤。然而,测试过程往往伴随着高昂的成本和复杂的设备需求。本文将探讨如何通过优化
    的头像 发表于 04-07 16:38 1355次阅读
    干簧继电器:<b class='flag-5'>芯片</b><b class='flag-5'>测试</b>仪的“<b class='flag-5'>性能</b>催化剂”

    单晶硅纳米力学性能测试方法

    在材料纳米力学性能测试的众多方法中,纳米压痕技术凭借其独特的优势脱颖而出,成为当前的主流测试手段。
    的头像 发表于 03-25 14:38 1129次阅读
    单晶硅纳米力学<b class='flag-5'>性能</b><b class='flag-5'>测试</b><b class='flag-5'>方法</b>

    射频产品测试基础

    射频芯片有哪些测试项一、射频芯片测试方法射频芯片测试
    的头像 发表于 02-28 10:03 1144次阅读
    射频产品<b class='flag-5'>测试</b>基础

    怎样使用防水测试仪对手机进行测试

    在当今手机不离手的时代,手机的防水性能越来越重要。那么,如何使用防水测试仪来测试手机呢?以下是一个简单易懂的操作过程的详细说明。一、前期准备
    的头像 发表于 02-27 16:58 1716次阅读
    怎样使用防水<b class='flag-5'>测试</b>仪对<b class='flag-5'>手机</b>进行<b class='flag-5'>测试</b>

    电源浪涌测试方法

    电源浪涌测试是评估电气设备在电源浪涌条件下的性能表现的重要手段。以下是电源浪涌测试的一些常用方法
    的头像 发表于 01-27 11:31 2488次阅读

    如何测试谐波减速器的性能

    测试谐波减速器的性能是一个综合性的过程,涉及多个关键方面的检测。以下是一个详细的测试步骤和方法: 一、明确测试目标 在进行谐波减速器的
    的头像 发表于 01-21 17:31 1689次阅读

    如何进行FDD网络的性能测试

    、数据传输等。这可以通过专业的测试设备或测试手机来进行。功能测试是确保网络基本功能正常运行的基础。 二、信号质量测试 测试FDD网络的信号质
    的头像 发表于 01-07 17:20 1202次阅读

    如何测试电子开关的性能

    测试电子开关的性能是确保其质量和可靠性的重要环节。以下是一些常用的测试方法和步骤: 一、基本性能测试
    的头像 发表于 12-30 14:55 1766次阅读

    华为云 X 实例 CPU 性能测试详解与优化策略

    引言   1. 测试环境搭建   1.1 测试实例的选择   1.2 CPU性能测试工具介绍   1.3 安装和配置Sysbench   2. CPU
    的头像 发表于 12-30 14:52 1182次阅读
    华为云 X 实例 CPU <b class='flag-5'>性能</b><b class='flag-5'>测试</b>详解与<b class='flag-5'>优化</b>策略

    使用 Memtester 对华为云 X 实例进行内存性能测试

    测试环境   3.3 测试命令   4 测试数据及性能分析   4.1 带宽测试结果   4.
    的头像 发表于 12-30 14:52 937次阅读
    使用 Memtester 对华为云 X 实例进行内存<b class='flag-5'>性能</b><b class='flag-5'>测试</b>

    如何测试ptp网络性能

    测试PTP(Precision Time Protocol)网络性能是一个涉及多个方面的过程,以下是一些关键的测试步骤和方法: 一、基本功能测试
    的头像 发表于 12-29 09:57 1751次阅读

    什么是芯片的HAST测试

    )。是一种用于评估产品在高温、高湿以及高压条件下的可靠性和寿命的测试方法。该测试通过在受控的压力容器内设定特定的温湿度条件,模拟产品在极端环境下的性能表现。HAST试验能
    的头像 发表于 12-16 16:22 1837次阅读
    什么是<b class='flag-5'>芯片</b>的HAST<b class='flag-5'>测试</b>?