Arm Community
Site
Search
User
Site
Search
User
Groups
Education Hub
Distinguished Ambassadors
Open Source Software and Platforms
Research Collaboration and Enablement
Forums
AI and ML forum
Architectures and Processors forum
Arm Development Platforms forum
Arm Development Studio forum
Arm Virtual Hardware forum
Automotive forum
Compilers and Libraries forum
Graphics, Gaming, and VR forum
High Performance Computing (HPC) forum
Infrastructure Solutions forum
Internet of Things (IoT) forum
Keil forum
Morello forum
Operating Systems forum
SoC Design and Simulation forum
SystemReady Forum
Blogs
AI and ML blog
Announcements
Architectures and Processors blog
Automotive blog
Graphics, Gaming, and VR blog
High Performance Computing (HPC) blog
Infrastructure Solutions blog
Internet of Things (IoT) blog
Operating Systems blog
SoC Design and Simulation blog
Tools, Software and IDEs blog
Support
Arm Support Services
Documentation
Downloads
Training
Arm Approved program
Arm Design Reviews
Community Help
More
Cancel
Community Management
Archive
中文社区
Jump...
Cancel
中文社区
中文社区博客
ARM点积指令探究
Blogs
视频和文件
Members
Mentions
Sub-Groups
Tags
Jump...
Cancel
New
中文社区 requires membership for participation - click to join
More blogs in 中文社区
ARM中国大学计划博客
Arm新闻
中文mbed博客
中文社区博客
恩智浦汽车电子MCU讨论区博客
Tags
Arm Compiler 6
DS-5 Development Studio
arm cycle models
Cortex-A55
Fast Models
Actions
RSS
More
Cancel
Related blog posts
Related forum threads
ARM点积指令探究
feng
December 6, 2017
Less than one minute read time.
原文链接:
https://community.arm.com/tools/b/blog/posts/exploring-the-arm-dot-product-instructions
ARM最近的
DynamIQ
CPU如
Cortex-A55
,
Cortex-A75
实现了新的点积计算指令,包括有符号点积(
SDOT
)与无符号点积(
UDOT
)。这些指令是可选项,主要用于
DynamIQ
CPU提高机器学习应用的性能。关于SDOT and UDOT有很多不同的用法,本文主要描述一个使用UDOT指令计算二维数组点积的示例。下图示出如何将一个32bit寄存器的四个8bit单元进行点积并累加至一个32bit目标寄存器的过程。
本文通过介绍使用UDOT指令的例子,解释如何确定CPU的点积支持功能,查看工具支持信息,并演示如何在Cortex-A55的Fast Models和Cycle Models上运行。
编程小示例
下面是一个用于计算2维数组的简单函数描述。演示的附件软件使用64字节的数组。为了汇编更易读,函数避免使用内联。
如果不使用专门的指示,Arm Compiler 6将会把上述dot_product()函数编译为用
MADD指令
来完成这64个数的乘加。
同样的,可以用汇编方式使用四条UDOT指令来完成相同功能,每个指令处理16个数组单元。UDOT指令完成后再讲4个数值累加到结果里。
相应的反汇编如下:
下面我们看看不同实现方法编译运行在Arm Fast Models 与 Arm Cycle Models上的性能。
确认点积支持
Cortex-A55与Cortex-A75都有包含点积支持的配置选项。在使用新的指令前,首先确认CPU配置是否支持。 AArch64状态下可以通过读 ID_AA64ISAR0_EL1寄存器,AArch32下读ID_ISAR6寄存器。
最简单的办法是使用内联汇编把读取值返回给一个C变量。对于Arm Compiler 6,示例如下:
寄存器信息请参考文档
Cortex-A55 Technical Reference Manual
。根据Cortex-A55 TRM文档,Bit44代表点积支持的状态。
DS-5 编译支持
目前最新的DS-5版本是
5.28
, 包括
Arm Compiler 6.9
. 这个版本对Cortex-A55及点积指令完全支持。要使用 Arm Compiler 6编译示例,需要使用-mcpu或者-march选项来支持UDOT指令。下面几种armclang的选项都有效:
-mcpu=cortex-a55
-march=armv8.4-a
-march=armv8.2-a+dotprod
更多关于UDOT指令信息可以参考
armasm User Guide
文档。fromelf反汇编也支持点积指令。有时fromelf需要添加--cpu选项以保证完整解码系统寄存器信息。
Fast Models与DS-5 调试支持
ARM Fast Models
提供ARM IP的快速、灵活可编程模型,帮助用户在硅片准备好之前进行驱动、固件、操作系统、应用软件等开发,同时允许对仿真进行全面控制,包括Profiling, debug,trace。检查代码功能,调试问题,确保UDOT指令执行顺序,Fast Models是绝好的选择。
点积例子可以运行在使用Fast Models搭建的系统上。下图给出一个简单示例,包括Cortex-A55,memory以及用于打印信息的UART。
目前Fast Models的版本是11.2,Cortex-A55 Fast Model默认配置支持点积指令,不需要额外参数设置。
DS-5也可以与Fast Models仿真连接调试,具体参考
Using DS-5 with custom Fast Model systems
. 下图示出了DS-5中系统ID寄存器 ID_AA64ISAR0_EL1,bit 44设置为1,表明点积指令是支持的。
DS-5的反汇编窗口可以看到点积指令:
当代码在Fast Models上正常运行,我们可以再把它迁移到Cortex-A55 Cycle Model来比较两种不同点积实现性能。
Cortex-A55 Cycle Model
Arm Cycle Models
是直接从ARM IP的RTL编译而来,保证了完整的准确性,可以再ARM
SoC Designer
或其他SystemC 仿真器上运行。使用Cycle Model可以进行安全的架构设计,性能优化及裸机固件开发。
Cycle model一个创新的功能是所有模型可以在一个网页入口配置,即
Arm IP Exchange
。用户可以制定相应的配置选项,模型就会在后台有RTL编译生成。准备好后,用户会收到一封包含下载链接的邮件。
下面是Arm IP Exchange 上Cortex-A55配置页面的截图,其中包括点击指令的支持选项,将其设置为True,相应的功能便会包含在模型中。
下面给出在SoC Designer中一个等效的Cycle Model系统,可以用于点积指令的周期级精确性能仿真来进行性能比较。
示例在Cortex-A55 cycle model运行时,有无使用点积指令实现相应的执行周期数会在终端窗口打印出来。可以看出通过Arm Compiler 6的-Omax选项,没有使用点积指令需要402个周期,使用点积指令仅需要73个周期。周期数通过读取周期计数寄存器获得。本例通过使用点积指令大幅降低了执行周期数。不用编译器选项结果可能不同。本文附件给出来完整的参考软件以及Arm Compiler 6的编译Makefile。
总结
从上述示例看出,使用点积指令可以大幅提高性能。 DynamIQ CPUs 比如Cortex-A55 and Cortex-A75也提供了支持点积指令的配置选项。本文给出了一些相关背景(如何在编译,模型,调试环境检查点积功能支持)帮助用户开始使用。Fast Models是试用点积指令的很好方式,Cycle Models则提供了使用点积指令优化软件的准确性能比较工具。
更多工具与模型信息请参考
developer.arm.com
。
dot-product-sw.tgz
x1941
over 4 years ago
请问是否可以理解为C语言编写的卷积,无法编译成SDOT/UDOT的指令?
Cancel
Up
0
Down
Reply
More
Cancel
x1941
over 4 years ago
请问是否可以理解为C语言编写的卷积,无法编译成SDOT/UDOT的指令?
Cancel
Up
0
Down
Reply
More
Cancel
zzjzly
over 5 years ago
请问Snapdragon 845 支持dot proudct instruction吗?
Cancel
Up
0
Down
Reply
More
Cancel
Song Bin 宋斌
over 6 years ago
最近骁龙845超火
Cancel
Up
0
Down
Reply
More
Cancel
中文社区博客
Arm A-Profile构架2022扩展
Zenon Xiu (修志龙)
原文:
Arm A-Profile Architecture Developments 2022 - Architectures and Processors blog - Arm Community blogs - Arm Community
作者:Martin Weidmann翻译:修志龙(Zenon Xiu) 与arm构架授权和生态伙伴一起,arm持续演进其构架,开发新功能以满足现有和新市场的要求…
October 17, 2022
深入理解 Arm A-profile的non-maskable interrupt -NMI
Zenon Xiu (修志龙)
原文:
https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/a-profile-non-maskable-interrupts
翻译: 修志龙 Zenon Xiu Arm A-profile构架一个长久以来的局限性是:缺乏对non-maskable interrupt (NMI…
August 24, 2022
Arm A-Profile 构架2021扩展
Zenon Xiu (修志龙)
原文:
https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/arm-a-profile-architecture-developments-2021
Martin Weidmann
September 8, 2021 翻译注释:Zenon Xiu Arm与arm构架授权公司及生态伙伴一起…
August 17, 2022