From: Yicong Yang yangyicong@hisilicon.com
Signed-off-by: Yicong Yang yangyicong@hisilicon.com --- .../WayCa-Kunpeng-SVE.md | 131 ++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 WayCa-Kunpeng-������/Wayca-Kunpeng-���������������/WayCa-Kunpeng-SVE.md
diff --git a/WayCa-Kunpeng-������/Wayca-Kunpeng-���������������/WayCa-Kunpeng-SVE.md b/WayCa-Kunpeng-������/Wayca-Kunpeng-���������������/WayCa-Kunpeng-SVE.md new file mode 100644 index 0000000..823baed --- /dev/null +++ b/WayCa-Kunpeng-������/Wayca-Kunpeng-���������������/WayCa-Kunpeng-SVE.md @@ -0,0 +1,131 @@ + + +# WayCa-Kunpeng-SVE + +������Linux���������Openeuler OLK-5.10��������������������� + +## 1. ������ + +������ Neon ������������������������������������������ 128 ������������������������������Arm ��������������������� +��������� (SVE) ������ AArch64 ������������ SIMD ���������SVE������������������������ ��������������������� +���������������������������������������������������������������������������������������CPU������������������������������ +��������������������������������������������� 128 ������������ 2048 ��������������� 128 ���������������SVE������ +���������������������������������������������SVE������������������������������������������������������������������������ +������������������������������������,������������������������������������������������������������������������������������ +������������������������������������������������������������������������������SVE2 ��������� SVE ������������������ +������������������������������������������������������������������������������������������������������������LTE ��������� +��������������������� + +sve��������������������������� +- 32���������������������������������Z0-Z31��� +![avatar](https://documentation-service.arm.com/static/63b8334140f3173eeee2a7ca?token=) +- 16���������������������������������P0-P15��� +![avatar](https://documentation-service.arm.com/static/63b8334140f3173eeee2a7cd?token=) +- ������First Fault ������������������FFR������ +���������������������������������������ZCR_Elx + +## 2. ������������������ + +SVE��������������������������������������� + +- CONFIG_ARM64_SVE + +## 3. ������������ + +### 3.1 ������������ + +Linux���SVE������������������CPU���������������/proc/cpuinfo������������������������������������������������ +���HWCAP_SVE���ID_AA64PFR0_EL1���������������������SVE��������������������� + +### 3.1 SVE������ + +- ������������SVE������������������ + +Linux������������/proc/sys/abi/sve_default_vector_length������������������������������������SVE +���������������������������������prctl���������SVE������������������������������������������������������������������ +������������������������ + +- ��������������������������������� + +Linux������������������������������������������������SVE���������������������������prctl������������������������ +������SVE������������������������������������������������������������������������������ + +``` +PR_SVE_SET_VL + ���������������������������������������PR_SVE_VL_INHERIT��������������������������������������������� + VL���������������������������������������������������������������������PR_SVE_SET_VL_ONEXEC������ + ������������������������������������execve()������������������������������������ + ���������������������P0-P15���FFR������Z0-Z31������������������128bits��������������������������� +PR_SVE_GET_VL + ������������������������������������������ +``` + + +## 4. ��������������������� + +| COMMITID | SUBJECT |openeuler OLK-5.10 enabled���Y/N��� +| ---------- | ---------- | -----------| +| 27e64b4be4b8 | regset: Add support for dynamically sized regsets |Y| +| 94ef7ecbdf6f | arm64: fpsimd: Correctly annotate exception helpers called from asm | Y | +| abf73988a7c2| arm64: signal: Verify extra data is user-readable in sys_rt_sigreturn |Y| +| 93390c0a1b20| arm64: KVM: Hide unsupported AArch64 CPU features from guests |Y| +| b472db6cf8c6 | arm64: efi: Add missing Kconfig dependency on KERNEL_MODE_NEON|Y| +| 38b9aeb32fa7| arm64: Port deprecated instruction emulation to new sysctl interface |Y| +| 9cf5b54fafed| arm64: fpsimd: Simplify uses of {set, clear}_ti_thread_flag()|Y| +| 672365649cca |arm64/sve: System register and exception syndrome definitions |Y| +| 1fc5dce78ad1| arm64/sve: Low-level SVE architectural state manipulation functions |Y| +| ddd25ad1fde8| arm64/sve: Kconfig update and conditional compilation support |Y| +| d0b8cd318788| arm64/sve: Signal frame and context structure definition |Y| +| 22043a3c082a | arm64/sve: Low-level CPU setup |Y| +| bc0ee4760364 | arm64/sve: Core task context handling|Y| +| 79ab007c75d6| arm64/sve: Support vector length resetting for new processes |Y| +| 8cd969d28fd2 | arm64/sve: Signal handling support |Y| +| 7582e22038a2| arm64/sve: Backend logic for setting the vector length |Y| +| 8f1eec57cdcc | arm64: cpufeature: Move sys_caps_initialised declarations |Y| +| 2e0f2478ea37 | arm64/sve: Probe SVE capabilities and usable vector lengths |Y| +| 1bd3f93641ec| arm64/sve: Preserve SVE registers around kernel-mode NEON use |Y| +| fdfa976cae5c | arm64/sve: Preserve SVE registers around EFI runtime service calls |Y| +| 43d4da2c45b2 | arm64/sve: ptrace and ELF coredump support |Y| +| 2d2123bc7c7f | rm64/sve: Add prctl controls for userspace vector length management |Y| +| 4ffa09a939ab| arm64/sve: Add sysctl to set the default vector length for new processes|Y| +| 17eed27b02da | arm64/sve: KVM: Prevent guests from using SVE |Y| +| aac45ffd1f8e | arm64/sve: KVM: Treat guest SVE use as undefined instruction execution |Y| +| 07d79fe7c223 | arm64/sve: KVM: Hide SVE from CPU features exposed to guests |Y| +| 43994d824e84 | arm64/sve: Detect SVE and activate runtime support |Y| +| ce6990813f15 | arm64/sve: Add documentation |Y| +| 94b07c1f8c39| arm64: signal: Report signal frame size to userspace via auxv |Y| + + +## 5.������������ + +- ������������������������������������������������sve������������������������sve������������: + +```C +void daxpy_1_1_no_sve(int64_t n, double da, double *dx, double *dy) +{ + for (int64_t i = 0; i < n; ++i) { + dy[i] = dx[i] * da + dy[i]; + } +} + +#include <arm_sve.h> +void daxpy_1_1(int64_t n, double da, double *dx, double *dy) +{ + int64_t i = 0; + svbool_t pg = svwhilelt_b64(i, n); + do + { + svfloat64_t dx_vec = svld1(pg, &dx[i]); + svfloat64_t dy_vec = svld1(pg, &dy[i]); + svst1(pg, &dy[i], svmla_x(pg, dy_vec, dx_vec, da)); + i += svcntd(); + pg = svwhilelt_b64(i, n); + } + while (svptest_any(svptrue_b64(), pg)); +} +``` + +- ������ +gcc -march=armv8-a+sve xxx.c xxx + +