微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 在Cortex-A8平台下memcpy ARM/NEON汇编性能的测试

在Cortex-A8平台下memcpy ARM/NEON汇编性能的测试

时间:11-10 来源:互联网 点击:
  1. 表是运行环境的统计。

    硬件平台

    软件环境

    imx51 800MHZ

    openembedded-gpe

    imx53 1000MHZ

    openembedded-gpe

    imx53 800MHZ

    openembedded-gpe

    msm7230 1000MHZ

    Android + chroot

    msm7230 800MHZ

    Android + chroot

    msm8250 1000MHZ

    Android + chroot

    omap3430 550MHZ

    openembedded-gpe

    omap3730 1000MHZ

    openembedded-gpe

    s5pc100 665MHZ

    Android + chroot

    s5pc110 1000MHZ

    Android + chroot

    下表是测试项目的统计。

    实现方案

    i.MX51

    i.MX53

    Snapdragon

    s5pc1xx

    omap3430

    omap3730

    int32_cpy

    YES

    YES

    YES

    YES

    YES

    YES

    vec_cpy

    YES

    YES

    YES

    YES

    YES

    YES

    arm9_memcpy

    YES

    YES

    YES

    YES

    YES

    YES

    armv5te_memcpy

    YES

    YES

    YES

    YES

    YES

    YES

    memcpy_arm

    YES

    YES

    YES

    YES

    YES

    YES

    memcpy_arm_nopld

    YES

    NO

    YES

    YES

    YES

    YES

    memcpy_neon

    YES

    YES

    YES

    YES

    YES

    YES

    memcpy_neon_nopld

    YES

    NO

    YES

    YES

    YES

    YES

    memcpy_armneon

    YES

    YES

    YES

    YES

    YES

    YES

    memcpy_ple_arm

    YES

    YES

    N/A

    YES

    N/A

    YES

    memcpy_ple_neon

    YES

    YES

    N/A

    YES

    N/A

    YES

    memcpy_arm_codesourcery

    YES

    YES

    YES

    YES

    YES

    YES

    memcpy_arm_codesourcery_nopld

    YES

    NO

    YES

    YES

    YES

    YES

    memcpy_neon_codesourcery

    YES

    YES

    YES

    YES

    YES

    YES

    memcpy_neon_codesourcery_nopld

    YES

    NO

    YES

    YES

    YES

    YES

    memcpy_neon_qualcomm

    YES

    YES

    YES

    YES

    YES

    YES

    memcpy_neon_qualcomm_nopld

    YES

    NO

    YES

    YES

    YES

    YES

    memcpy_neon_siarhei

    YES

    YES

    YES

    YES

    YES

    YES

    注1:因为i.MX53 EVK板子发生故障,未能测试所有no pld的测试项。

    注2:在给omap3430打开preload engine后,测试产生非法指令错,未能测试ple的测试项。

    注3:要替换Snapdragon kernel有些麻烦,未能测试ple的测试项。

  2. 测试结果与分析

    下面的图表限于页面大小不能很好地显示细节。具体的数据和大图可到数据表文档中查看。

  3. 各个硬件平台上各种实现的表现

  4. imx51 800MHZ

  5. imx53 1000MHZ

  6. imx53 800MHZ

  7. msm7230 1000MHZ

  8. msm7230 800MHZ

  9. msm8250 1000MHZ

  10. omap3430 550MHZ

  11. omap3730 1000MHZ

  12. s5pc100 665MHZ

  13. s5pc110 1000MHZ

    1. 小结

  14. 在block size = 512B ~ 32K之间,有一个性能高台,block size = 256K也有一个性能的转折。
  15. 这个特性体现了32KB L1 / 256KB L2 cache的影响。
  16. 小于512B的性能不佳,可能与函数调用,函数开始的块对齐技巧造成的损耗有关,也可能与block size太小,cache没有准备好函数就结束了有关。
  17. 文档[]对memcpy的实现还是有指导意义的。但随着芯片内部的优化和工艺的提升,有些规则发生了变化。
  18. NEON指令的性能总是要高于ARM指令的性能。但交替使用ARM/NEON指令并不总是带来性能的提升。随着发展ARM/NEON指令之间性能差在缩小。
  19. pld指令的作用越来越小。在较老的芯片上,如omap3430,采用pld指令后,同一个实现可以有50%的性能提升。在较新的芯片上,如msm7230/s5pc110上,性能基本没有区别,甚至同一个实现没有pld指令后,性能稍稍有些提升。这也许是因为pld指令没有效果,倒反在每个循环中浪费了时钟周期造成的。
  20. 采用ple指令的实现的性能令人大失所望。这也说明如果没有很好的模型设计,软件去干预cache的使用,很容易会造成性能的恶化。
  21. Snapdragon平台有最好的cache性能。超出cache后,各种实现(包括C语言实现)的性能基本一致,也很高效。这也许是Snapdragon平台13-stage load/store pipeline[][]的设计造成的。这个特性对高级语言是有好处的。因为编程不可能在很多地方采用汇编语言。这样开发人员就不必过多地考虑汇编优化,依赖编译器就可以了。
  22. s5pc110平台有最好的平均性能。超出cache后,NEON实现的性能最好,基本保持一条水平线。
  23. 在small/big block size下各个硬件平台的表现

    性能因为block size分为fit in cache / out of cache两种表现,所以做两个剖面做对比分析。

  • 8K block size。体现fit in cache时的性能。
  • 8M block size。体现out of cache时的性能。
  1. M?ns Rullg?rd的实现

    因为M?ns Rullg?rd的实现最简单,除了一个循环体外,没有其它判断代码,可以认为是体现平台速度极限的实现。

  2. ARM的实现

  3. NEON的实现

  4. 小结

  5. NEON指令的性能总是要高于ARM指令的性能。随着发展ARM/NEON指令之间性能差在缩小。
  6. 交替使用ARM/NEON指令,在fit in cache条件下性能要差于NEON版本。在out of cache条件下,两个版本性能基本一样。
  7. 在fit in cache条件下,Snapdragon平台有最好的性能。超过第二名s5pc110大约为43%。
  8. 在out of cache条件下,s5pc110有最好的性能。超过第二名omap3730大约为57%。
  9. 在同一个硬件平台下,超频(如i.MX53 800/1000MHZ & msm7x30 800/1000MHZ)对memory性能影响很小。
  10. 实用ARM/NEON实现在各个硬件平台的表现

    通过同一种实现在不同硬件平台上性能的对比,结合上一节的图表,可

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top