淘姐妹

淘姐妹

麒麟980是什么cpu 麒麟980芯片和820哪个好

手机 0

淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】

麒麟980是几纳米工艺,麒麟980是高端还是中端,麒麟980是哪国的,麒麟980是哪一年出的

2022年年末,紫光展锐正式发布了新款5G SoC T820,这是一款采用台积电6nm工艺、八核CPU架构、集成金融级安全方案的中端芯片,支持5G高速连接、5G双卡双待等通信特性。2023年,5月17号,这款芯片将搭载在中国电信发布的天翼铂顿10手机上,这是一款以行业市场为目标客群的5G旗舰安全手机。

那么,紫光展锐T820的性能究竟如何呢?它能否与市场上昔日的麒麟旗舰芯片相媲美呢?为了回答这个问题,我们可以从CPU、GPU等方面来对比它与麒麟980和麒麟990这两款高端芯片的差异。

首先,从CPU方面来看,紫光展锐T820采用了1+3+4三丛集八个CPU核心,包括一个2.7GHz A76大核、三个2.3GHz A76大核、四个2.1GHz A55小核,3MB三级缓存。而麒麟980则采用了2+2+4三丛集八个CPU核心,包括两个2.6GHz A76大核、两个1.92GHz A76小核、四个1.8GHz A55微核,3MB三级缓存。麒麟990则采用了1+3+4三丛集八个CPU核心,包括一个2.86GHz A76超大核、三个2.09GHz A76大核、四个1.86GHz A55小核,4MB三级缓存。

从这些参数可以看出,紫光展锐T820在CPU方面有着较高的主频和较强的大核配置,相比麒麟980有着明显的优势,而与麒麟990也互有来回。根据GeekBench 5的测试结果,紫光展锐T820的单核分数为760分,多核分数为3341分;麒麟980的单核分数为710分,多核分数为2550分;麒麟990的单核分数为785分,多核分数为3100分。由此可见,在CPU性能方面,紫光展锐T820无论是单核性能还是多核性能都超过了麒麟980,然而与麒麟990相比,单核性能略弱,多核性能略强!

其次,从GPU方面来看,紫光展锐T820集成了Mali-G57 MC4 GPU,运行频率为850MHz。而麒麟980集成了Mali-G76 MC10 GPU,运行频率为720MHz。麒麟990则集成了Mali-G76MC16 GPU,运行频率为600MHz。从这些参数可以看出,紫光展锐T820在GPU方面有着较高的频率但是架构较旧。

根据测试,紫光展锐T820曼哈顿3.0、曼哈顿3.1分别为91FPS、551FPS,麒麟980在同样的测试中的帧率分别为90FPS、56FPS,麒麟990在同样的测试中的帧率分别为118FPS、76FPS。由此可见,在GPU性能方面,紫光展锐T820略微超过了麒麟980,但还不及麒麟990。

总之,在CPU、GPU等方面对比之后我们可以发现,在中端芯片市场上紫光展锐T820表现出色,并不输给昔日的麒麟高端芯片。而且,因为采用了更新的制程工艺,功耗方面也会好于麒麟980和麒麟990。虽然它还不能与最新一代的高端芯片如天玑9200或者A16相比拼,在某些方面还有一定的差距需要弥补,但是它已经证明了国产芯片的实力和潜力,并且给中国电信新机带来了更多的关注和期待。



perf浣跨敤鏂规硶


Simpleperf是一个强大的命令行工具,它包含在NDK中,可以帮助我们分析应用的CPU性能。Simpleperf可以帮助我们找到应用的热点,而热点往往与性能问题相关,这样我们就可以分析修复热点源。

如果您更喜欢使用命令行,可以直接使用 Simpleperf。Simpleperf 是一个通用的命令行 CPU 性能剖析工具,包含在面向 Mac、Linux 和 Windows 的 NDK 中。

如需查看完整的文档,请先阅读 Simpleperf 。

官方的资料:

  • Simpleperf 命令和选项参考
  • Simpleperf 用法

现代 CPU 具有一个硬件组件,称为性能监控单元(PMU)。PMU 具有一些硬件计数器,计数一些诸如经历了多少次 CPU 周期,执行了多少条指令,或发生了多少次缓存未命中等事件。

Linux 内核将这些硬件计数器包装到硬件 perf 事件中。此外,Linux 内核还提供了独立于硬件的软件事件和跟踪点事件。Linux 内核通过 perf_e【【微信】】 系统调用将这些暴露给用户空间,这正是 simpleperf 所使用的机制。

Simpleperf 具有三个主要的功能:stat,record 和 report。

Stat 命令给出了在一段时间内被剖析的进程中发生了多少事件的摘要。以下是它的工作原理:

  1. 给定用户选项,simpleperf 通过对 linux 内核执行系统调用来启用剖析。
  2. Linux 内核在调度到被剖析进程时启用计数器。
  3. 剖析之后,simpleperf 从内核读取计数器,并报告计数器摘要。

Record 命令记录一段时间内被剖析进程的采样。它的工作原理如下:

  1. 给定用户选项,simpleperf 通过对 linux 内核执行系统调用来启用剖析。
  2. Simpleperf 在 simpleperf 和 linux 内核之间创建映射缓冲区。
  3. Linux 内核在调度到被剖析进程时启用计数器。
  4. 每次给定数量的事件发生时,linux 内核将样本转储到映射缓冲区。
  5. Simpleperf 从映射缓冲区读取样本并stat生成 perf.data。

Report 命令读取 “perf.data” 文件及所有被剖析进程用到的共享库,并输出一份报告,展示时间消耗在了哪里。

为了使用Simpleperf, 需要以下环境:

  • 待分析的App应运行在Android 5.0或者更高版本的设备上
  • 手机的USB 连接到操作机器
  • 应用程序应该是 debuggable 的。由于安全限制的原因,只有 【【微信】】ebuggable 设置为 true 的应用程序才能剖析。(在一个已经 root 的设备上,所有应用程序都可以剖析。)在 Android Studio 中,这意味着我们需要使用 debug 构建类型,而不是 release 构建类型。
  • 为了能够运行Python scripts,宿主机器应安装:
    • Python 2.7或者更高版本
    • NDK的版本应不低于r13b

通常剖析 Android 应用程序性能包含三个步骤:

  1. 准备应用程序。
  2. 记录剖析数据。
  3. 生成剖析数据的分析报告。

Simpleperf的获取路径:

在页面内,可以直接压缩包下载,既可以选择NDK相对应的版本(R13~N21),也可以选择master。建议直接选择NDK对应的版本即可。当然,也可以git直接拉取仓库。

git clone https://android.【【微信】】source.com/platform/prebuilts/simpleperf

查看下载的simpleperf目录,可以看出:它的工具集包涵client端和host端;client端运行在Android系统上,负责收集性能数据;host端则运行在开发机上,负责对数据进行分析和可视化(这些可执行文件在下载后的bin文件夹的android和win/linux下)。

除了bin文件夹之外,最上层还有很多.py的脚本文件。这些脚本和配置文件主要是官方写的一些傻瓜式的使用脚本,只需要对配置文件进行配置,就可以在直接在开发机上直接运行脚本,一键生成最终的结果。

Python 脚本根据它们的功能被分为三个部分:

  1. 用于简化剖析数据记录的脚本,如 app_profiler.py。
  2. 用于生成剖析报告的脚本,如 report.py,report_html.py,inferno。
  3. 用于解析剖析数据的脚本,如 simpleperf_report_lib.py。

主要的脚本是:app_profiler.py和report.py两个。

在【【微信】】k\simpleperf中包含了 simpleperf 可执行文件和 Python 脚本,它们的功能如下:

  • bin/:包含可执行文件及共享库,里面包含了android和windows。
  • bin/android/${arch}/simpleperf:设备上运行的静态 simpleperf 可执行文件。其中 ${arch} 为目标设备的 CPU 架构,如 arm 和 arm64。
  • bin/${host}/${arch}/simpleperf:用于主机的 simpleperf 可执行文件,只支持生成报告。其中 ${host} 为主机的操作系统平台,如 linux,${arch} 为主机的 CPU 架构,如 x86_64。
  • bin/${host}/${arch}/libsimpleperf_report.${so/dylib/dll}:用于主机的报告生成库。其中 ${host} 指主机的操作系统平台,${arch} 为主机的 CPU 架构。
  • app_profiler.py:用于记录剖析数据的 Python 脚本。
  • binary_cache_builder.py:用于为剖析数据构建二进制缓存的 Python 脚本。
  • report.py:用于生成剖析报告并输出到标准输出的 Python 脚本。
  • report_html.py:用于生成剖析报告并输出为 html 文件的 Python 脚本。
  • inferno.sh (或 Windows 平台的 inferno.bat ):用于生成火焰图并输出为 html 文件的脚本工具。
  • inferno/:inferno 的实现。由 inferno.sh 使用。
  • pprof_proto_generator.py:将剖析数据的格式转换为 pprof 使用的格式的 Python 脚本。
  • report_sample.py:将剖析数据的格式转换为 FlameGraph 使用的格式的 Python 脚本。
  • simpleperf_report_lib.py:解析剖析数据的库。

脚本的主要内容,就是读取配置文件,然后执行adb shell ...的命令,其实本质上和命令行的输入没什么区别。但是,如果直接运行,不仅仅需要查看配置文件各个配置项的含义,还可能会出现许多意想不到的BUG,不太建议直接使用脚本,不得精髓啊。

debug-unwind命令:基于debug / test dwarf的离线展开,用于调试simpleperf。

dump命令:转储perf.data中的内容,用于调试simpleperf。

help命令:打印其他命令的帮助信息。

kmem命令:收集内核内存分配信息(将被Python脚本替换)。

list命令:列出Android设备支持的所有事件类型。

记录命令:配置文件处理并在perf.data中存储分析数据。

report命令:报告perf.data中的分析数据。

report-sample命令:报告perf.data中的每个样本,用于支持集成Android Studio中的simpleperf。

stat命令:profiles处理并打印计数器摘要。

每个命令都支持不同的选项,可以通过帮助消息查看,如下示例:

# List all commands. $ simpleperf --help # Print help message for record command. $ simpleperf record --help

1、将simpleperf文件push到手机

在simpleperf/bin/android目录下包含有不同体系架构的 Android 上运行的静态二进制文件,在arm目录下打开命令窗口,执行命令:

adb push simpleperf  data/data/

2、将simpleperf授权为可读可写可执行文件:

adb shell cd data/data/ chmod 777 simpleperf

3、对某些特定进程或者线程监控

https://blog.csdn.net/weixin_47465999/【【微信】】tails/simpleperf record -p 4281(pid 或tid) --duration 30(时间/s)

得到错误提示,说只读分区无法写入 perf.data:

simpleperf E 04-19 15:09:29  4109  4109 【【微信】】.cpp:47] failed to open record file 'perf.data': Read-only f

4、 用 -o 参数设置存储记录的路径

simpleperf I cmd_record.cpp:729] Recorded for 29.9851 seconds. Start post 【【微信】】ing. simpleperf I cmd_record.cpp:809] Samples recorded: 1457. Samples lost: 0.

5、用report 报告perf.data中的分析数据

simpleperf record -p 17465--duration 4 -f 1000 -o /data/local/tmp/perf.data --call-graph fp

simpleperf report -i /data/perf.data -n --sort dso
simpleperf W 04-19 15:31:17  4564  4564 dso.cpp:274] /data/local/r【【微信】】't contain symbol table simpleperf W 04-19 15:31:17  4564  4564 dso.cpp:335] 【【微信】】 /proc/kallsyms are all zero. `echo 0 >/proc/sys/kernel/kptr_restrict` if possible. Cmdline: /data/local/tmp/simpleperf record -p 4281 --duration 30 -o /data/perf.data Arch: arm64 Event: cpu-cycles (type 0, config 0) Samples: 125526 Event count: 【【QQ微信】】  【【微信】】 Object 88.93%    106529  /data/local/【【微信】】.05%     10560   /system/lib/libc.so 3.01%     8437    [kernel.kallsyms]

其中的 Csort 参数是用来指定结果显示哪些列,我们这里只写了一个 dso(即 dynamic shared object),所以结果只显示一列 “Shared Object”,而且按 dso 分类,结果也只有三行而已。

如果不加 Csort 参数,默认显示这几列:Command,Pid,Tid,Shared Object,Symbol,相当于:

--sort comm,pid,tid,dso,symbol
  • -n 参数用来显示 Sample 那列,表示该行共命中了多少个 Sample,加不加随意。
  • 可以看到,百分之 88.93 的时间都耗费在了我们的被测程序上,这是预期中的。

6、查看app 内部,函数占比:

simpleperf report -i /data/perf.data --dsos /data/local/r【【微信】】
  • 结果如下:
impleperf W 04-19 15:57:34  5046  5046 dso.cpp:274] /data/local/r【【微信】】't contain symbol table simpleperf W 04-19 15:57:34  5046  5046 dso.cpp:335] 【【微信】】 /proc/kallsyms are all zero. `echo 0 >/proc/sys/kernel/kptr_restrict` if possible. Cmdline: /data/local/tmp/simpleperf record -p 4281 --duration 30 -o /sdcard/perf.data Arch: arm64 Event: cpu-cycles (type 0, config 0) Samples: 106529 Event count: 【【QQ微信】】  【【微信】】 5.06%     5373    rvdecApp[+24380] 4.57%     4890    rvdecApp[+24420] 1.43%     1588    rvdecApp[+13a44] 1.01%     1083    rvdecApp[+21f94] 0.94%     999     rvdecApp[+20188]  ...

其中的 Cdsos 参数是 simpleperf 的 5 个 filter 之一,意思是按照指定的 dynamic shared objects 进行过滤,只显示参数指定的 dso 里面的结果。全部 5 个 filter 是:

Ccomms: 按 command 过滤,比如:--comm r【【微信】】>

Cpids: 按 pid 过来

Ctids: 按 tid(线程id)过滤

Cdsos: 按库文件/可执行文件名过滤

Csymbols: 按函数名过滤,比如: --symbols "RVComFunc::getPUMVPredictor(RefBlockInfo*, unsigned int, int, int, unsigned int)",注意函数里有空格的,需要用双引号引起来。

可以看到,结果里没有函数名字。那是因为我们的 rvdecApp 是没有符号表的版本。我们用带符号表的 app 进行分析即可。

带符号表的 app 可执行文件可以在 obj 目录下找到。把它 push 到手机上,覆盖原来的可执行文件。

注意,不用重新执行 rvdecApp 并重新采集 perf.data, 只需要在分析时使用带有符号表的 rvdecApp 即可。

还用刚才的命令:

https://blog.csdn.net/weixin_47465999/【【微信】】tails/simpleperf report -i /data/perf.data -n --dsos /data/local/r【【微信】】
  • 得到如下结果:
【【微信】】 10.45%    5354   RVComFunc::DBFShiftedProcess8x8(unsigned char**, int*, unsigned char*, int, unsigned char*, int, bool, bool, bool, bool, unsigned char) 5.55%     3722    RVComFunc::deblockCUTree(TCBDataTree*, unsigned char**, unsigned int*, int, int, RefBlockInfo*, int, unsigned char**, int*, unsigned char) 4.49%     3675    RVComFunc::reconstructInterPredictors(TCUData*, unsigned char**, unsigned int*, TRefPicList*, RefBlockInfo*, unsigned int, unsigned int, unsigned int, unsigned int) 2.25%     3518    RVComFunc::deriveDBFStrengthFUbyMotionInfo(unsigned char*, unsigned char*, int, int, RefBlockInfo*, int, int, unsigned char, unsigned char, bool, bool) 2.68%     3320    Decoder::parseBitStream_FrameNew() 2.79%     2927    NEON_DBF_EdgeFilter4_【【微信】】.52%     2651    RVComFunc::DBFShiftedProcessFu(unsigned char**, int*, unsigned char*, int, unsigned char*, int, int, bool, bool, bool, bool, unsigned char) 2.36%     2553    (anonymous namespace)::decode_gen_vlc(【【微信】】*, int, (anonymous namespace)::VLC*, int, int) ...

可以看到DBFShiftedProcess8x8函数是最耗时的函数,需要被优化。

1、 运行app-profiler.py

进入simpleperf目录下,我们可以使用 app-profiler.py 剖析 Android 应用程序。输出路径等可以修改app_profiler.py配置文件

14:47:33,547 [INFO] (app_profiler.py:206) prepare profiling 14:47:33,730 [INFO] (app_profiler.py:208) start profiling 14:47:33,806 [INFO] (app_profiler.py:244) run adb cmd: ['adb', 'shell', '/data/local/tmp/simpleperf', 'record', '-o', '/data/local/tmp/perf.data', '-e task-clock:u -f 1000 -g --duration 10', '--log', 'info', '--app', 'com.afmobi.boomplayer'] simpleperf I cmd_record.cpp:696] Recorded for 9.96625 seconds. Start post 【【微信】】ing. simpleperf W dso.cpp:446] /vendor/lib64/egl/libGLES_mali.so doesn't contain symbol table simpleperf W dso.cpp:446] /vendor/lib64/hw/android.hardware.graphics.mapper@4.0-impl-mediatek.so doesn't contain symbol table simpleperf W dso.cpp:446] /data/app/~~EKnZoTKaDLH3FYfxteqUvg==/com.【【微信】】.android.trichromelibrary_541411734-【【微信】】Pg==/base.apk!/lib/arm64-v8a/【【微信】】.so doesn't contain symbol table simpleperf W dso.cpp:446] /data/app/~~3WfX5_4-OAPL17xSEBkRfg==/com.afmobi.boomplayer-yFLZ【【微信】】==/lib/arm64/libmmkv.so doesn't contain symbol table s