Arm编译器现在基于LLVM 13

描述

Arm编译器Linux 22.0版现在提供了改进的编译器和库。Arm编译器Linux版(ACfL)是Arm C/C++编译器(armclang)、Arm Fortran编译器(armflang)和Arm性能库(ArmPL)的组合。在本博客中,我们将探讨此版本的新增功能。

Arm编译器现在基于LLVM 13

Arm编译器现在基于LLVM 13,这提高了性能。

Linux

我们看到SPEC CPU 2017的许多次级基准得到了改进,geomean总分比之前的21.1版本提高了2.2%。该基准测试在AWS c6g.metal(带Arm Neoverse-N1核心)上运行。

针对Neoverse-V1进行了更好的调整

(AWS Graviton 3核心)

22.0版本的Arm编译器为Neoverse-V1提供了一个优化的成本模型,并提供了许多与SVE代码生成相关的改进。这包括(1)优化使用SVE的Gather/Scatter功能(2)将循环(loop)填充对齐,以更好地利用指令缓存(3)在将向量的一个元素插入另一个元素时,优化使用SVE拼接操作。

Linux

这些优化的累积效应可以在前面的图中看到。我们在这里将Neoverse-V1优化的SVE代码和为Neoverse-V1优化的Neon代码做一个对比。我们的基准是在开发SVE架构扩展时使用的一组具有代表性的微基准(micro-benchmarks)。您可以看到,22.0(橙色条)中的编译器优于21.1版(蓝色条)。通过这些改进,22.0版本已准备好在AWS Graviton 3上开发HPC应用程序。

GCC 11更新

该软件包现在提供GCC 11系列编译器,并有许多性能改进https://community.arm.com/arm-community-blogs/b/tools-software-ides-blog/posts/performance-improvements-in-gcc-11

具有CPU运行时检测的单个ArmPL

Arm性能库不再为SVE和非SVE内核打包为单独的库。我们现在提供一个库,其中包含所有受支持内核(包括SVE)的优化版本。在运行时,库通过检测核的类型,来选择最佳的例程和配置。作为用户,您可以自动受益于库中最快的调整,而无需重新链接到特定于核的库。

更快的BLAS、LAPACK和FFT

ArmPL 22.0进一步改进了BLAS和LAPACK例程。

Linux

Linux

上图显示了22.0版本比21.0版本的改进(2021年初发布)。这些数据来自5000多个个案的基准测试,涵盖:广泛BLAS例程的基准测试,一系列重要的LAPACK例程,用于串行(1线程)和并行(8线程)执行中的小O(10)、中O(100)和大O(1000)不同的问题场景。

数学函数的改进

在22.0中,我们改进了许多数学函数的性能。其中包括标量函数(atan、atan2、atan2f、cos、exp、sin和erf)和向量函数(atanf、atan2f、cosf、erfcf、expo、logf、pow、sinf和tanf)的改进。在下图中,您可以看到Elefunt benchmark在AWS Graviton 2(Neoverse N1)系统上运行时的影响。

Linux

模块名称变更

该包提供模块文件,以便轻松加载所需的编译器或库。对于22.0版本,请使用以下模块命令。

Linux

结论

Arm编译器Linux 22.0版与前21.x系列版相比有许多改进和变化。我们将继续进行进一步的改进,并计划在2022年9月/10月发布下一版本22.1。

最新版本下载地址:

https://developer.arm.com/downloads/-/arm-compiler-for-linux

审核编辑 :李倩

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分