Who is this for?

This is an advanced topic for developers migrating vectorized (SIMD) code from x86-64 to Arm64.

What will you learn?

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

  • Identify how Arm vector extensions including Neon, Scalable Vector Extension (SVE), and Scalable Matrix Extension (SME) map to vector extensions from other architectures
  • Plan a migration strategy using autovectorization, intrinsics, or library substitution

Prerequisites

Before starting, you will need the following:

  • Familiarity with vector extensions, SIMD programming, and compiler intrinsics
  • Access to Linux systems with Neon and SVE support

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 migrate vectorized code from x86-64 (SSE and AVX) to Arm by mapping features to Neon, SVE, and SME. You’ll compare autovectorization, intrinsics, and library substitution. Then, you’ll build a SAXPY kernel in plain C and with vector extensions on Arm and x86. You’ll compare each result with a scalar reference and use vector width and throughput to choose an approach for your codebase.

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
?
Which migration approach should I pick: autovectorization, intrinsics, or a library?
First check whether a tuned library provides the routine you need. If it does, prefer the library. Otherwise, try autovectorization first and use intrinsics when you need tighter control.
What result should I expect when I run the SAXPY variants?
Build and run the plain C and vectorized versions, then compare them across instruction sets. Their outputs match the scalar reference, and the measurements show how vector width affects throughput. Use those observations to inform your migration plan.
What should I do if my Arm hardware doesn't support SVE or SME?
Run the plain C and Neon versions supported by your hardware. SVE and SME sections need compatible systems, but the conceptual mapping still informs portability decisions.
Where do I find how SSE and AVX map to Neon, SVE, and SME?
The first section maps x86 SIMD extensions to Arm vector extensions. It highlights scalable vector length and matrix operations to guide code adaptation.
Can I use GCC or Clang to build the examples?
Yes. You can use either GCC or Clang to build the examples.
Next