Migrate x86-64 SIMD to Arm64
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
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.
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
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.
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.
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.
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.
The first section maps x86 SIMD extensions to Arm vector extensions. It highlights scalable vector length and matrix operations to guide code adaptation.
Yes. You can use either GCC or Clang to build the examples.