Who is this for?

This is an advanced topic for software developers who want to learn how to use the full range of features available in SVE, SVE2, and SME2 to improve software performance on Arm processors.

What will you learn?

Upon completion of this Learning Path, you will be able to:

  • Improve SIMD code performance using Scalable Vector Extension (SVE) and Scalable Matrix Extension (SME)
  • Describe what SIMD Loops contains and how kernels are organized across scalar, Neon, SVE, SVE2, and SME2 variants
  • Build and run a selected kernel with the provided runner and validate correctness against the C reference
  • Choose the appropriate build target to compare Neon, SVE/SVE2, and SME2 implementations

Prerequisites

Before starting, you will need the following:

  • An AArch64 computer running Linux or macOS. You can use cloud instances, refer to Get started with Arm-based cloud instances for a list of cloud service providers
  • Some familiarity with SIMD programming and Neon intrinsics
  • Recent toolchains that support SVE and SME (GCC 13+ or Clang 16+ recommended)

Summary

AI-assisted

This summary was drafted with an approved AI-assisted workflow and reviewed by Arm contributors before publication. Human technical review remains part of the process so the final page reflects engineering rigor, accuracy, and Arm editorial standards.

Close
?
You’ll use the SIMD Loops project to explore Arm Neon, SVE and SVE2, and SME2 kernels. First, you’ll clone the repository, verify the Arm environment, and inspect loops.inc. You’ll study loop 202 and matmul_fp32 across scalar, Neon, SVE and SVE2, and SME2 variants. Then, you’ll build selected kernels, compare them with the C reference, and examine predication, vector-length-agnostic programming, gather/scatter, streaming mode, and ZA tiles.

Frequently asked questions

AI-assisted

These FAQs were drafted with an approved AI-assisted workflow and reviewed by Arm contributors before publication. Human technical review remains part of the process so the final page reflects engineering rigor, accuracy, and Arm editorial standards.

Close
?
How do I know I’m running on an Arm machine before using SIMD Loops?
Run uname -m. Expect aarch64 on Linux or arm64 on macOS. If you see another value, switch to an Arm-based system before continuing.
Where do I find the list of available loop kernels and their descriptions?
Browse the loops directory and open loops.inc. It lists the kernels with brief descriptions and the identifiers used by the project.
Which files should I open to study the matrix multiplication example?
Open loops/loop_202.c and locate inner_loop_202() around lines 60–70. Then open loops/matmul_fp32.c, which implements C[M × N] = A[M × K] × B[K × N].
What SIMD features can I explore with the kernels in SIMD Loops?
You can explore predication, vector-length-agnostic (VLA) programming, gather/scatter, streaming mode, and ZA tiles. Implementations use C and Arm C Language Extensions (ACLE) intrinsics.
How do I validate a kernel and compare Neon, SVE and SVE2, and SME2 implementations?
Build and run the selected kernel with the project runner, then validate its results against the C reference implementation. Choose the build target for each variant to compare scalar, Neon, SVE and SVE2, and SME2 behavior.
Next