One of the most vital aspects of Arm’s ecosystem are developers. They come in all job titles and functions, and we try our best to provide each one with the information, tools, and guidance to make their lives easier. Being the lead of Developer Education for the Client line of business at Arm, there are so many areas of the stack we could focus on, from IP implementation to a game developer. We try and focus on the items that will make the most impact and one of these is Intrinsics.
An Instruction Set Architecture (ISA) is part of the abstract model of a computer. It defines how software controls the CPU. The Arm ISA family allows developers to write software and firmware that conforms to the Arm specifications, secure in the knowledge that any Arm-based processor will execute it in the same way. These ISAs also have extensions that can be used to optimize their use amongst a range of use cases. You have Arm Neon, an advanced Single Instruction Multiple Data (SIMD) architecture extension for the Arm Cortex-A processor series. Arm Helium, an M-Profile Vector Extension (MVE) that can deliver a significant performance uplift for machine learning and signal processing. Then you have Scalable Vector Extensions (SVE/SVE2), which are vector extensions for AArch64 execution mode for the A64 instruction set of the Armv8 architecture.
“Intrinsics are native C/C++ function calls that the compiler replaces with an appropriate instruction or sequence of instructions, providing almost as much control as writing assembly language, while leaving the allocation of registers to the compiler, so that developers can focus on the algorithms.”
On developer.arm.com we had two intrinsic reference documentation pages for Neon Intrinsics and, more recently, Helium (MVE) Intrinsics. The pages and their features performed the tasks at a basic level. However, end user and internal company feedback highlighted that the user experience and performance of the page needed some attention.
With the blessing of a large number of internal stakeholders, we set out to scope this project and came up with 4 goals:
Our partners on the project, Akendi, did fantastic user research as part of this project. The company conducted a number of in-depth interviews with developers of all kinds to fully understand what was missing, what features are needed and the best way to represent this on a single page.
A few months on and we have put the new search engine into production on Developer.arm.com. User acceptance testing and launch was met with positive feedback from both internal users and external end users.
The new user features focus on the user interface (UI) for end users, along with some upgrades on the Arm side to ensure the engine loads quickly for end users. For the UI upgrades, here is the brief overview of upgrades:
The following screenshots are what the search engine looks like on developer.arm.com:
Arm Intrinsics search engine can be filtered by SIMD ISA, base type, bit size and architecture.
The following is an example of the single view of a Neon Intrinsic example which shows a description, results, compatibility and an example operation:
Creating, publishing, and maintaining these items like the Arm Intrinsics was a priority for us over the last year, and it is a priority to keep it up to date, so we will add some new features as soon as we can. We welcome feedback on the search engine which you can provide directly on Arm Developer.
In the meantime, why not try out the Arm Intrinsics search engine? Need some resources? Check out the Neon and Helium developer pages for guides on how to get the best out of the search engine:
https://developer.arm.com/architectures/instruction-sets/simd-isas/neon
https://developer.arm.com/architectures/instruction-sets/simd-isas/helium
We are constantly updating these guides along with adding new ones. Please let us know if you have any suggestions on what you would like to see.
[CTAToken URL = "https://developer.arm.com/architectures/instruction-sets/intrinsics" target="_blank" text="Arm Intrinsics Search Engine" class ="green"]