最新要闻
- 酒店比价网站_酒店比价
- 【当前独家】“保时泰”破产重整后凄凉!股权六折甩卖仍无人接盘
- 每日速看!韩国拟取消校园暴力者读大学资格:转学脱罪也没用
- 环球精选!网友拍下真实版“乌鸦喝水” 原来是表演节目 两只乌鸦都会
- 今亮点!魅族20系列1元36月超长质保加码!电池最大容量低于80%免费换
- 全球新资讯:神舟十五号乘组太空出差过半:完成多项首次实验测试
- 全球新消息丨《最终幻想16》仍然只有白人:没有对人种多样性妥协
- 全球聚焦:AMD Zen4正式登顶!16核7954HX性能战平24核13980HX、功耗低得多
- 老司机全程不踩刹车?特斯拉潮州事故车主不服鉴定:官方尚未出责任认定书
- 天天百事通!3888元 + 可叠加百亿补贴:天猫无门槛红包12点正式开抢
- 4条狼青犬咬死几十只羊!警惕:性情凶狠、攻击性非常强
- 全球微头条丨211文科硕士吐槽均薪5500引争议:文科生转码或成趋势 还是理科香?
- 报道:“RNG老板道歉”登热搜 CEO:轮换中单是我的决定
- 【世界播资讯】李想:理想汽车要占20万元以上市场35% 将对标苹果特斯拉
- 垂头丧气的丧是什么意思?关于垂头丧气的反义词有哪些?
- 父亲的兄弟如何称呼?写给父亲的一封信作文模板
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
环球简讯:mperf:移动/嵌入式平台算子性能调优利器
作者:旷视 MegEngine 架构师 张孝斌
快速了解 mperf
在移动/嵌入式平台,为了最大程度发挥硬件算力,对算子极致性能的追求变成必然,不同于桌面/服务器平台,移动/嵌入式平台在算子性能调优方面可选择的工具很少。
MegEngine 团队一直在探索什么样的工具能够在算子调优流程中带来助益,来帮助达成如下的算子性能调优反馈回路,这也是 mperf 诞生的背景。
(资料图片仅供参考)
图1 算子性能调优反馈回路
mperf 是一个微架构层次的算子性能调优工具箱,主要面向移动/嵌入式平台的 CPU/GPU 核心,目标是“为构建一个更接近闭环的算子调优反馈回路”提供系列基础工具。
核心功能:
[基础能力] 测试微架构层次的各类常用性能分析参数(GFLOPS/Multi-level Bandwidth/Latency...)
[基础能力] 提供 PMU(Performance Monitoring Unit) 数据获取能力
[性能分析] 绘制 Hierarchical Roofline
[问题定位] 加工 PMU 数据得到各种指标(如 IPC, Instructions per cycle)、TMA(Top-Down Microarchitecture Analysis Method)分析能力,可以作为部分 vendor 提供的 GUI 分析工具的平替
[优化指引] 提供 OpenCL Linter 方案(后续版本提供)
...
作为一个 C++ API 级别的工程,mperf 外部依赖少,可以简单方便(侵入式)集成到目标工程中,目前已经开源到 GitHub,欢迎大家试用交流。
使用方法参考 README 文档;快速上手指南见 Tutorial 文档
对 mperf 的实现原理感兴趣的同学,可以继续往下看~~
展开说说 mperf 的工程实现
缘起
算子调优目前还是一个难以闭环的工作,需要开发者对目标硬件架构特性、算子优化水平评估、性能瓶颈定位、丰富的优化技巧等都有很深的了解之后才能变得游刃有余。同时随着 CPU/GPU 架构越来越多,越来越复杂,普通的开发者很少有精力去深入理解各个架构的特性,问题变得更加棘手。
理想中的调优过程是能够形成如上图所示的闭环,甚至可以走向编译器全自动化调优方案,过程中往往需要依赖工具完成,在桌面/服务器平台的工具较为完备,如 linux perf, lmbench/stream,NVIDIA NSight Compute,Intel vtune/Advisor/pmu-tools 等开闭源工具等都提供了一部分能力,通过人为组合还是能得到比较全的能力;与此同时,在移动/嵌入式平台,也有 simpleperf、Arm mali streamline、snapdragon profiler、MegPeak、ArchProbe、HWCPipe 等优秀的开闭源工具,但是完备性和易用性方面都存在很多问题:
GUI 工具不支持函数级/代码片段分析(如基于 PMU 的指标分析等,详见下方“PMU 数据搜集、加工和分析”),还不容易扩展新的分析指标
不支持 ARM CPU 的 TMA 分析(详见下方“PMU 数据搜集、加工和分析”)
绘制 Roofline 等所依赖的基础数据的获取能力散落在多个工具中,普通同学很难入手
很少的优化指导能力
因此我们启动了 mperf 项目,希望提供系列工具来完整获得这些基础能力:
常见 CPU/GPU 微架构参数,目前已经支持 ARM CPU/Mali GPU/ Adreno GPU 的部分型号
通过 Hierarchical Roofline 模型评估算子优化水平
通过丰富的指标和 TMA 分析模型来定位性能瓶颈/提示性能问题
通过 OpenCL Linter 等工具能固化专家优化经验,扫描用户代码后给出性能优化建议
...
常见 CPU/GPU 微架构参数
为 Roofline 绘制/Metrics (指标)计算等模块提供架构相关的基础参数,如多级存储 bandwidth/latency,指令 throughput/latency,各种基础 micro-kernel的bandwidth,GPU 特有的参数(warp size 等)等,这部分是常规功能,测试原理很多都参考了 MegPeak/lmbench/ArchProbe 等工程的实现,此处不再展开,仅举一个小例子方便大家看到它的价值。
例1. 在移动端 GPU 上在做向量计算的时候,我们会关心 int8:int16:int32 算力是否一定存在 4:2:1 的关系?mperf 实测数据显示在 Adreno A640 呈现难以解释的 int16>int8>int32,在 Mali G78 上则满足比例关系,实测的详实数据会告知开发者 float->int16 定点化是否能带来性能收益。
Hierarchical Roofline 绘制
原生 Roofline Model 建模了“算子计算模式、目标硬件架构、性能”三者之间的关系,可以为算子调优提供大方向的指引,比如:
确认瓶颈:位于 Machine Balance Point 左侧是访存 bound,右侧是计算 bound
指导优化方向: 如果是访存 bound,可以考虑结合各种已知的专家经验如 tiling/prefetch/aligned allocator 等进行优化尝试,也就是知道了努力的方向
提示停止优化的时机:如果是计算 bound 且已经接近屋顶(峰值性能上限),可以考虑停止优化
预测性能:如果已知架构峰值性能数据、算子本身的计算访存比、计算规模这三个数据就能算估算出执行时间
但因为原生 Roofline Model 存在一些问题:
未区分多级存储的情况,一般只考虑 DRAM Bandwidth,如果输入 Tensor 小到可以塞入 L1 Cache,采用 L1 Cache Bandwidth 更加准确
未区分执行环境的复杂性,比如是否启动多线程,处于 Turbo Mode 等,这些都影响实际理论峰值
未区分指令类型(instruction mixes),一般默认采用单一指令如 FMA 进行测试,实际理论峰值可以是不同指令性能的加权求和
未区分 read/write/access,比如 sum(Tensor),采用 read Bandwidth 更加准确
之后发展出了 Hierarchical Roofline,实际中为了方便绘制,mperf 提供了不同的手段来获取上述基础数据。
绘制Roofline需要两组数据:
架构理论峰值性能(GFLOPS)和带宽(Bandwidth)
理论峰值性能:单指令测试原理参考此文;分析不同指令占比的方案还在验证中;
理论带宽: 提供的方案可以测试多级存储带宽,并提供各种基础 micro-kernel (如纯 read 函数)来测试贴近实际访存模式的带宽上限
算子实测性能/带宽: 通过 PMU 的方式获取
PMU 数据搜集、加工和分析
PMU 数据搜集
CPU/GPU 架构大多都包含 PMU 硬件,用于计数一些底层硬件事件,如 CPU Core 所属的执行指令数和时钟周期,Cache 所属的 L1 Cache Miss 等;mperf 提供了 CPU/GPU 的 PMU 数据获取能力,特别是 Adreno GPU 这种缺乏官方开源支持的平台。
加工指标(又名 Metrics)
以 ARM A55 Core 为例,有超过 100 种硬件事件,Adreno A6xx 系列 GPU 则有约 125 种硬件事件,这些事件的数值可以用来加工计算各种指标,如 IPC=INST_RETIRED 计数(指令数)/ CPU_CYCLES 计数(Cycle 数),也可以用来计算 DRAM Bandwidth、算子 GFLOPS、L1 MISS Ratio 等等,具体的指标支持列表及其计算方式可阅读文档及源码。
图2 Arm A76 Core 微架构图(来源)
TMA 分析
TMA 是一套自顶向下的 Intel CPU 算子性能瓶颈分析方法,这套思想可以扩展到其它架构。上图描述了 A76 Core 指令的生命周期,过程中涉及到的硬件资源(如可执行 FMA 的端口数量)都可能成为指令执行过程中的瓶颈,TMA 用于分析瓶颈所在,从而指引优化方向,详细思想大家可以阅读官方文档。
mperf 计算得到的所有指标中一部分可以归类进 TMA 范式,另一部分作为单独的指标存在用于辅助性能分析。不管是 TMA 还是独立指标都可以提供细粒度的优化方向指引。
在 mperf 里面我们将 TMA 扩展到了 ARM CPU 上,过程中我们得到了一些经验:
因为 ARM CPU 提供的硬件事件的类别/定义与 Intel CPU 有很多差异,完美复刻 TMA 各类别的定义很困难也不现实,但是 ARM CPU 本身提供的硬件事件的类别也很丰富,可以摸索和总结出适合自身的 TMA 方案和独立指标,实践中我们证明了这条路行的通。
ARM 不同系列 CPU 微架构之间有明显差异,比如 A55(in-order)与 A76(out-of-order)在 TMA 各类别/定义上有很多不同,每个架构都需要单独处理。
由于 vendor 相关资料开放程度不同,部分指标的定义可能会在长期实践验证中被修正。
本模块 GPU 部分的长期目标是成长为移动端 GPU 类似 NVIDIA Nsight Compute 的等价物。目前已经总结了很多有优化指导意义的 GPU 指标,但 TMA 在 GPU 上可行性和必要性我们还在探索中。在通用计算相关指标方面(不涉及渲染相关),目前已经具备替代 ARM 官方 GUI 工具 streamline 和高通官方 GUI 工具 snapdragon profiler 的能力,使用这两个 GUI 工具的同学可以尝试替换为 mperf,一方面 API 级别更加灵活,另一方面可以享受到不断增补指标(Metrics)带来的好处。
这里同样举一个实际例子来展示 mperf 的工作逻辑:
例2:GPU 支持不同向量宽度的浮点数据加载,如 vload4/8/16 等等,不同的架构有不同的限制,并不是向量宽度越宽越好,我们观察到 Mali G78 GPU 上 vload4 比 vload16 快很多,在 mperf 中的分析逻辑如下:
首先搜集一系列 event 的数值(下图 3 展示了其中一部分),如 ExternalMemoryReadBytes 含义是 DDR→Unified L2 Cache 的 read 数据量,可以看出 vload16 相对 vload4 增加了 4 倍还多, LoadStoreReadFull(LS_MEM_READ_FULL) 含义是 full-width read 的次数,LoadStorePartial(LS_MEM_READ_SHORT)代表了 partial-width read 的次数,发现在 vload16 的时候 partial-width read 的次数增大了很多,额外发射了更多的 read 指令,解释了速度变慢的原因。为了方便快速发现此类问题,mperf 也专门整理了一个 PartialReadRatio 的指标,其计算公式见下方。
图3 Mali G78 vload4/vload8
// PartialReadRatio 计算公式GpuCounter::PartialReadRatio, [this] { return get_counter_value(MALI_NAME_BLOCK_SHADER, "LS_MEM_READ_SHORT") / (float)(get_counter_value(MALI_NAME_BLOCK_SHADER,"LS_MEM_READ_FULL") + get_counter_value(MALI_NAME_BLOCK_SHADER, "LS_MEM_READ_SHORT"));}
更多关于 PMU 数据搜集、加工和分析的细节,欢迎大家阅读源码。
OpenCL Linter
MegEngine 团队在做 OpenCL 算子开发的过程中积累了一系列优化经验,希望能通过工具化的方式将这部分经验固化下来。
目前初步计划参考 Linter 思路,大体有两个部分:
静态代码分析扫描 OpenCL Kernel,检查规则是预置的 OpenCL 专家优化经验,如使用 select 指令而非三目运算符,对齐检查等,给出优化建议。
在动态执行过程中监测各种预置的指标,结合专家经验对一些异常数据给出提示,如寄存器使用量分析等,引导用户调优。
这部分工作目前正在做 POC 验证,敬请期待。
总结
mperf 为移动/嵌入式平台性能调优提供了系列工具,其中在 PMU 获取/ARM TMA/分层 Roofline 绘制/OpenCL Linter 等方面都有不同程度的创新,希望这个工具箱能为开发人员提供更多的分析手段和调优建议。
当前阶段 mperf 开发方向会以优先丰富基础工具为主,部分工具暂时还需要一些体系结构的知识才能用好,更长远来看,我们会做更多的工作来降低使用门槛,朝着更易用更自动化的方向努力。与此同时,大家都希望有一套闭环的方法论来告诉我们算子调优的时候每一步先分析什么指标,然后建议尝试 N 种优化方法,不断迭代到最优,但是目前业内距离这个愿景还有点远,mperf 也是如此,它的主要能力此刻还停留在为开发者提供更多决策信息的阶段。
为了能更近一步,下一阶段我们会先从积累丰富的实操案例入手,和 mperf 的使用者一起探索在不同的案例下什么样的指标能发现问题,什么样的优化方法可以尝试;之后在发现特定指标异常的时候可以将积累的优化方法展示给用户。因此,mperf 是一个具有成长性的工程,欢迎大家一起参与共建,聚沙成塔,打造好用的调优工具!
mperf 开发过程中受到了上面提到的各种优秀开源工程的启发和指引,方法论上参考了大量包括 Intel/ARM 官方文档在内的诸多资料,在此一并致谢!
-
全球微资讯!Adobe Photoshop 键盘快捷键 备忘清单_开发速查表分享
AdobePhotoshop键盘快捷键备忘清单AdobePhotoshop中283个键盘快捷键的可视化备忘单键盘快捷键,为开发人...
来源: 全球微资讯!Adobe Photoshop 键盘快捷键 备忘清单_开发速查表分享
环球简讯:mperf:移动/嵌入式平台算子性能调优利器
天天动态:玩转Angular系列:组件间各种通信方式详解
焦点要闻:DL 基础:PyTorch 常用代码存档
世界热推荐:MySQL学习笔记-多表查询(下)
酒店比价网站_酒店比价
【当前独家】“保时泰”破产重整后凄凉!股权六折甩卖仍无人接盘
每日速看!韩国拟取消校园暴力者读大学资格:转学脱罪也没用
环球精选!网友拍下真实版“乌鸦喝水” 原来是表演节目 两只乌鸦都会
今亮点!魅族20系列1元36月超长质保加码!电池最大容量低于80%免费换
全球新资讯:神舟十五号乘组太空出差过半:完成多项首次实验测试
美团2面:如何保障 MySQL 和 Redis 数据一致性?这样答,让面试官爱到 死去活来
宕机了,Redis 如何避免数据丢失?
世界简讯:风控系统就该这么设计,万能通用,稳的一批!(建议收藏)
焦点要闻:权限提升(1)
全球新消息丨《最终幻想16》仍然只有白人:没有对人种多样性妥协
每日报道:sonar代码扫描bug:Use try-with-resources or close this "FileInputStream" in a "f
世界时讯:通过手动创建hibernate工厂,自动生成表,完成数据库备份还原功能
每日简讯:【36oj】 画圣诞树
全球聚焦:AMD Zen4正式登顶!16核7954HX性能战平24核13980HX、功耗低得多
老司机全程不踩刹车?特斯拉潮州事故车主不服鉴定:官方尚未出责任认定书
【播资讯】不为人知的网络编程(十五):深入操作系统,一文搞懂Socket到底是什么
轻松玩转makefile | 变量与模式
天天百事通!3888元 + 可叠加百亿补贴:天猫无门槛红包12点正式开抢
4条狼青犬咬死几十只羊!警惕:性情凶狠、攻击性非常强
全球微头条丨211文科硕士吐槽均薪5500引争议:文科生转码或成趋势 还是理科香?
报道:“RNG老板道歉”登热搜 CEO:轮换中单是我的决定
【世界播资讯】李想:理想汽车要占20万元以上市场35% 将对标苹果特斯拉
垂头丧气的丧是什么意思?关于垂头丧气的反义词有哪些?
头条焦点:百分比堆叠柱状图适用情形有哪些?速戳!
父亲的兄弟如何称呼?写给父亲的一封信作文模板
张靓颖的海豚音是哪首歌?张靓颖终于等到你的歌词是什么?
李想:如果不卖电池 电动车成本可以比燃油车低
热议:马斯克最疯计划曝光!给我10万亿美元:可拯救地球
梅西花百万买苹果手机送给阿根廷队友:定制了35部24K金的iPhone 14 Pro
天天微头条丨河南小伙1:1打造歼10战斗机模型!司机:这辈子拉过最硬的货
每日简讯:奇瑞背刺长城 捷途旅行者实车亮相:10多万的“硬汉”登场
早晨问候客户的正能量句子有哪些?早晨问候语有哪些?
仓央嘉措是哪个朝代的?仓央嘉措经典诗句有哪些?
蓝码健康码是什么意思?蓝码健康码是正常的吗?
32开纸是多大?32开纸有多大是几个A4?
ps字体怎么加描边?ps字体太小怎么调大?
移动硬盘参数怎么看?移动硬盘参数错误怎么解决?
usd是什么意思?usdt属于什么币种?
全球快讯:带有雨的诗句有哪些_带有雨的诗句具体有哪些
环球观焦点:WebLogic JNDI注入(CVE-2021-2109)
天天通讯!Java 根据模板导出PDF
从菜鸟程序员到高级架构师,竟然是因为这个字final
剑指 Offer 64. 求 1 + 2 + … + n(java解题)
当前简讯:浙江女子1600公里追到广州找到被偷的爱猫:苹果AirTag定位器立了大功
比亚迪豪华MPV成了!腾势D9上月热销7325台:均价41.5万
简讯:俞敏洪最新演讲:不喜欢《狂飙》 企业家只想赚钱就会像高启强后患无穷
复旦MOSS团队:取名是致敬《流浪地球2》 参数规模约ChatGPT的1/10
世界热推荐:跑着跑着会熄火 日产北美召回超80万辆奇骏:车钥匙背锅
环球头条:Git介绍下载安装以及基本使用
全球新消息丨解释器模式
每日时讯!promethues【centos7】时间同步
What is Point ?
【全球新要闻】那舅特大桥建成 又一时速350高铁开铺 南宁至玉林仅50分钟
3899元起 惠普战66六代锐龙版上架:锐龙7000系列加持
世界热议:3月17日开启Beta测试!《暗黑破坏神4》新预告片透露更多游戏内容
焦点短讯!拳头《无畏契约》3月14日起不再支持Win7/8/8.1系统:为了打击外挂!
论文阅读笔记(四):AS-MLP AN AXIAL SHIFTED MLP ARCHITECTUREFOR VISION
(数据库系统概论|王珊)第七章数据库设计-第五、六节:物理结构设计和数据库的实施和维护
全球消息!苹果何时大降价?iPhone 14 Plus成系列销量最差:用户宁愿买安卓
焦点信息:寓言诚不欺我!网友拍下现实版“乌鸦喝水”
焦点报道:儿子篮球班倒闭家长花1000万买下 网友:这就是钞能力
全球热议:999元卷王小金刚!优派推出VX2758显示器:27英寸2K/170Hz
15万就能买特斯拉?特斯拉宣布重大目标:成本降低50%
哪吒汽车2月份交付10073台 同比大涨41.5%
未成年人沉迷短视频得治 TikTok默认限制每天可刷一小时
“自己造自己” 特斯拉人形机器人亮相!马斯克承认罕见事实
【世界速看料】腾讯新游《黎明觉醒:生机》开放60帧:骁龙888、iPhone 13以上都能开
每日视点!印度男子展示绝技“乌鸦召唤术” 网友:在古代至少巫师级别
读Java性能权威指南(第2版)笔记06_数据库性能JPA&SpringData
全省严查!正在进行!
每日看点!马斯克大力推荐!特斯拉Cybertruck实车亮相:超级未来感
天天消息!马斯克宏图计划公布:储能240TWh 制造投资10万亿美元
日本死亡人数是新生儿数量两倍有多可怕:850万“幽灵屋”遍布全国
信息:特斯拉下一代电机将不需要任何稀土成分!马斯克挑战全球车企
环球新动态:Spark系列 - (5) Spark Shuffle
热消息:Fireasy3 揭秘 -- 万物伊始(依赖注入与服务发现)
全球信息:英语四级阅读技巧
一加Ace 2V 12+256G起步行业罕见:友商还在搞8+128卡价位的版本
实时:Redmi Note 12 Pro极速版12+256G到手1999元:开机就是MIUI 14
造车新势力2月交付量出炉:理想、蔚来、哪吒破万 零跑压力大
【全球速看料】厦门征求意见!过马路玩手机或将罚款50元 你支持吗?
世界快看:东风概念飞行汽车外观曝光!“鸥翼门”相当炫酷
【当前热闻】2018巴彦淖尔国际马拉松
环球焦点!胡明轩:平时杜导叫我和徐杰一起训练 要求我们承担起更多责任
世界快讯:makefile
基于alpine基础镜像构建jdk镜像以及tomcat镜像及业务构建
Linux极简入门系列(六):其它补充
CSS全局关键字
环球聚焦:委员建议隔周三休成热搜第一 网友吵翻 专家:很难行得通
今日热闻!Model 2明天发?这款15万的特斯拉便宜车:马斯克已经说了17年
环球新消息丨LOJ 3276 JOISC 2020 Day2 遗迹 题解 (计数DP)
环球快资讯:MySQL学习笔记-多表查询(上)
当前视讯!量化交易基础 - 011 - 样本外检验
风语筑(603466):上海风语筑文化科技股份有限公司关于股东权益变动比例超过1%的提示性公告