1,885
edits
Changes
SVE2
,no edit summary
[[Category:ARM]]
The Armv9 '''Scalable Vector Extensions verision 2''' (SVE2) provide a variable-witdh SIMD capability for [[AArch64]] systems. Note that SVE2 is a minor refinement and standardization of the original Scalable Vector Extensions (used on the [https://www.r-ccs.riken.jp/en/fugaku/ Fugaku] supercomputer), so most materials discussing SVE are also applicable to SVE2 (which will be used on systems ranging from smartphones to servers to supercomputers).
== Resources ==
* Arm Armv9-A A64 Instruction Set Architecture - https://developer.arm.com/documentation/ddi0602/2021-12/
* '''Introduction to SVE2 ''' - https://developer.arm.com/documentation/102340/0001/?lang=en
* Intrinsics - Arm C Language Extensions for SVE (ACLE) - https://developer.arm.com/documentation/100987/latest
* SVE Coding Considerations with Arm Compiler - Note that this documentation is specific to Arm's own compiler, but most of it will be applicable to other compilers including gcc - https://developer.arm.com/documentation/100748/0616/SVE-Coding-Considerations-with-Arm-Compiler
* [[AArch64 Emulation]]
== Building SVE2 Code ==
=== C Compiler Options ===
gcc -march=armv8-a+sve2 ...
Remember that in order to invoke the autovectorizer in GCC version 11, you must use <code>-O3</code>''or'' the appropriate feature options (<code>-ftree-vectorize</code>):
gcc -O3 -march=armv8-a+sve2 ...
gcc -O2 -march=armv8-a+sve2 -ftree-vectorize ...
=== Using SVE2 Intrinsics Header Files ===
To use SVE2 intrinsics in a C program, include the header file <code>arm_sve.h</code>:
#include <arm_sve.h> Note: some ARM documentation will refer to <code><arm_sve2.h></code>, but in gcc, the correct file is <code><arm_sve.h></code> === Macro for SVE2 === To detect SVE2 capability in the compilation target, use the macro <code>__ARM_FEATURE_SVE2</code>: #if __ARM_FEATURE_SVE2 ... #endif
== Running SVE2 Code ==
To run SVE2 code on an Armv8 systemcomputer, you can use the [[AArch64 Emulation|QEMU usermode system]] software. This will trap SVE2 instructions and emulate them in software, while executing Armv8a instructions directly on the hardware:
qemu-aarch64 ''./binary''
{{Admon/tip|Running AArch64 code on x86_64|The QMEU QEMU user mode software can also be used to run AArch64 code on an x86_64 system (albeit slowly). However, this requires a full AArch64 userspace (applications and tools, such as ld) to be installed on the x86_64 system. See [[AArch64 Emulation]] for details.}}