ARM点积指令探究

原文链接:
  
ARM最近的DynamIQ CPU如 Cortex-A55Cortex-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
Anonymous
  • CiiF现场速递丨好多人围观!Arm物联网设备到数据平台一系列解决方案太秀了

    本周三,第二十届中国国际工业博览会在上海国家会展中心拉开帷幕,并将持续到23日。恰逢周末假日,大伙组队去看一看? 此次Arm同样“盛装出席”,携最新物联网设备管理平台诸多解决方案参展。在此,小编为还没到现场的小伙伴们稍稍剧透一下,希望都能有空去现场感受满满的干货吧~ 谁才是物联网架构首选?有图有真相 Arm此次展位号E170,位于7.2馆的信息与通信技术应用展,今年重点聚焦“工业互联网”领域,吸引了国内外权威的工业互联网…
  • Arm NN 软件开发套件

    Arm NN 填补了现有 NN 框架和底层 IP 之间的空白。它可以帮助 TensorFlow 和 Caffe 等现有神经网络框架实现高效转换,并在 Arm Cortex CPU 和 Arm Mali GPU 上高效运行,无需修改。 Arm NN 不收取任何费用。 下载 Arm NN SDK (GitHub) 关于 Arm NN SDK Arm NN SDK 是一套开源 Linux 软件和工具,支持在高能效的设备上运行机器学习工作负载…
  • 使用Streamline分析RTOS系统性能

    本文翻译自Analyzing the performance of RTOS-based systems using Streamline ============================================================= Streamline是DS-5中的性能分析工具, Streamline可以用来分析裸机系统,RTOS,Linux,Android和Tizen系统的性能…