It seems that just yesterday we released ARM Compiler 6.01 and it’s already time for a new major release of the most advanced compiler from ARM.
Let’s see the major highlights for this release:
Previous versions of ARM Compiler included only the Rogue Wave C++ libraries, which haven’t been updated from the C++03 standard. In ARM Compiler 6.02, we are moving closer to the leading edge by incorporating libc++ from the LLVM project, having passed our extensive internal validation suites.
The new libraries support the C++11 and C++14 standards and, in conjunction with the LLVM clang front-end, ARM Compiler 6.02 is the most modern and advanced toolchain to develop software for your ARM-based device. Look at some of the advantages of the new C++ standards in my recent blog post on C++11/14 features.
If you want to use the old libraries you can still do it by using the --stdlib=legacy_cpplib command line option.
Performance is an important aspect of a toolchain and benchmarks are a convenient way (although not perfect) to evaluate the quality of the optimizations performed by the compiler.
During the last months, ARM engineers worked on identifying and implementing optimization opportunities in the LLVM backend for ARM. The results are shown in the following graph.
As you can see, the improvements between ARM Compiler 6.01 and ARM Compiler 6.02 are significant and show we are working on the right direction. Even though your code base is different from a synthetic benchmark, you may also see a boost in your code base as well: let's give it a try!
clang is often used to build high performance code Cortex-A cores and it plays a fundamental role in this area. Embedded ARM microcontrollers have been less of a focus for the LLVM community and ARM is now filling the gaps by making ARM Compiler 6 a toolchain able to build efficient code across all range of ARM processors, from the smallest Cortex-M0+ to the latest Cortex-A72 64-bit processor.
ARM engineers have focused on Cortex-M processors and we are now confident enough to change the support level for Cortex-M family cores from alpha to beta: this means that the code generated for the ARMv7-M and ARMv6-M architectures has reached a good quality level and has been sufficiently tested by ARM (but still work to do hence the beta support moniker). We expect to complete support for ARMv7-M and ARMv6-M in the next release of ARM Compiler at the end of this year.
If you want to know all the changes in this release of the compiler you can take a look at the release notes on ARM infocenter.
This version of the compiler will be included in the next version of DS-5 (5.22) but if you can’t wait, you can get the standalone version from ds.arm.com and add it to DS-5 (if you have DS-5.20 or greater) as shown in this tutorial.
As always, feel free to post any comment or question here or send me an email.
Any feedback is welcome and it helps us to continue delivering the most advanced toolchain for ARM from ARM.
Ciao,Stefano
Hello,
Yes, I can confirm that the best Coremark score which we have achieved for Cortex-M7 has not changed - we would of course welcome any further uplift from compiler vendors
Regards
Ian
Hello Koumoto-san,
unfortunately the official CoreMark/MHz numbers for Cortex-M7 haven't been changed.
The efforts on ARM Compiler 6 went mainly to enhance support for Cortex-M class cores, new libraries and general performance optimizations across different benchmarks: I personally think focusing on a single benchmark might lead to develop optimizations that are applicable only to that benchmark, without improving (and potentially decreasing) performance of generic users code base.
Best Regards,
Stefano
I'm adding Ian Johnson in this discussion as that's his product.
Hello Stefano,
Does the official performance of Cortex-M7 become from 5.04 CoreMark/MHZ to 5.69 CoreMark/MHz?
If it was correct, it would be very nice.
Best regards,
Yasuhiko Koumoto.
Hi,
Keil MDK will ship with ARM Compiler 6 alongside ARM Compiler 5 starting Q2 2016. While DS-5 can generate code for Cortex-M MCUs, it does not ship with the rich device support available in MDK, like header and startup files, flash programming algorithms, debug configuration and ready-to-run example projects.