70
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 ==
=== 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 QEMU usermode systemsoftware. 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.}}