Learn SVE and SME programming with SIMD Loops
Introduction
About Single Instruction, Multiple Data loops
Using SIMD Loops
Code example
Learning with SIMD Loops
Next Steps
Learn SVE and SME programming with SIMD Loops
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
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.
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
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.
uname -m. Expect aarch64 on Linux or arm64 on macOS. If you see another value, switch to an Arm-based system before continuing.loops directory and open loops.inc. It lists the kernels with brief descriptions and the identifiers used by the project.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].