电子产品世界 » 论坛首页 » 嵌入式开发 » ARM » ARM点积指令探究


共2条 1/1 1 跳转至

ARM点积指令探究

菜鸟
2018-01-23 14:52:38    评分

作者:feng


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 ModelArm 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则提供了使用点积指令优化软件的准确性能比较工具。


感谢作者的辛苦创作。

本喵是EEPW论坛新劳工,主要负责搜集、搬运、整理各类干货,以后大家将在论坛的各个板块中见到我。因个人力量有限,如有任何需要的资料都可私信本喵,喵会尽力满足大家。

你们的回帖是喵搬运的动力,劳烦各位看官留下宝贵的意见。





关键词: 点积     Cortex-A55    

管理员
2018-01-24 11:29:22    评分
2楼

谢谢 喵 喵


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]