SPO600 프로젝트 2부
마지막 부분에서는 SVE2 명령을 추가할 수 있는 훌륭한 후보를 찾고 있었습니다.
이 부분에서는 오픈 소스 디렉토리를 살펴보고 확장 가능한 벡터 확장을 구현하는 방법을 살펴봅니다.
우선, 나는 이전에 우리 프로젝트에서 VC 라이브러리로 작업하기로 결정했습니다. https://github.com/VcDevel/Vc
주변을 검색한 결과 이 리포지토리가 SSE 및 Neon보다 더 나은 프로젝트를 가지고 있음을 발견했습니다.
STD-SIMD는 제가 작업했던 프로젝트와 거의 동일하지만 조금 더 발전된 것입니다: https://github.com/VcDevel/std-simd .
여기에서 내 진행 상황을 볼 수 있습니다. 유지 관리 팀과 진행 상황:
문제-1: https://github.com/VcDevel/Vc/issues/320
문제-2: https://github.com/VcDevel/std-simd/issues/34
끌어오기 요청: https://github.com/VcDevel/std-simd/pull/35
저장소를 복제하고 코드를 검색하는 것으로 시작했습니다.
SIMD 명령어가 있습니까? 예.
SVE가 있습니까? 아니.
그러나 SSE가 있습니다. 예.
AVX도 있습니다.
또한 아키텍처를 확인합시다.
X86. 예.
팔/팔64. 아니
모든 파일을 확인한 후 코드 구현을 시작하기로 결정했습니다.
.s .S 파일이 없어서 조금 무서웠지만 계획이 있습니다.
기존 x86 기능을 arm/arm64로 전환하는 것은 If&def가 될 것입니다. arm/64로 SVE2를 구현하려고 합니다.
어떤 옵션이 있습니까?
우리가 무엇을 할 수 있는지 봅시다:
또한 다른 지침에 대한 If 문을 찾았습니다.
simd.c
#if _GLIBCXX_SIMD_X86INTRIN
#include "bits/simd_x86.h"
#elif _GLIBCXX_SIMD_HAVE_NEON
#include "bits/simd_neon.h"
#elif __ALTIVEC__
#include "bits/simd_ppc.h"
#endif
#include "bits/simd_math.h"
자동 벡터화로 시작하고 시간이 있으면 arm/arm64 인라인 어셈블리 또는 내장 함수로 약간 작업하기로 결정했습니다.
아직 하드웨어가 없기 때문에 시간의 증가를 볼 기회는 없지만 최소한 코드를 준비하고 성공적으로 빌드하도록 합시다.
방금 자동 벡터화에 대한 라이브러리 지침을 읽고 다른 시스템에서 빌드하려고 시도했습니다. 플래그를 내 빌드에 추가하기만 하면 됩니다.
gcc -O3 -march=armv8-a+sve2 ... // 03 flag to enable auto-vectorization
gcc -O2 -march=armv8-a+sve2 -ftree-vectorize ... // or -ftre...
arm64 및 x86 로컬 컴퓨터가 있으므로 두 컴퓨터를 모두 확인했고 모든 것이 빌드되었습니다. 하지만 위에서 언급했듯이 하드웨어 때문에 차이를 볼 수는 없지만 적어도 미래의 새로운 아키텍처에서는 작동할 것이라는 점은 알고 있습니다.
이 외에도 코드에 대해 더 깊이 알아보고 최소한 sve2용 내장 함수를 추가해 보기로 했습니다.
여기에서 모든 진행 상황을 볼 수 있습니다. 이미 몇 개의 파일을 변경했습니다. 헤더 포함:
#include <arm_sve.h>
그리고 다른 아키텍처와 명령어 사이를 전환하기 위해 ifdef 문을 작성했습니다.
3부 이후까지 이 작업을 더 진행할 예정이므로 관리자가 내 변경 사항을 코드에 적용할 수 있습니다.
끌어오기 요청: https://github.com/VcDevel/std-simd/pull/35
결론
참조:
https://developer.arm.com/documentation/100987/0000/
https://developer.arm.com/architectures/instruction-sets/intrinsics/#f:@navigationhierarchiessimdisa=[sve2]
⚠️ 풀 리퀘스트: https://github.com/VcDevel/std-simd/pull/35
연결
🖇 팔로우GitHub
🖇 팔로우
_p.s 이 게시물은 내 소프트웨어 이식성 및 최적화 수업을 위해 작성되었습니다. 프로젝트 2부
Reference
이 문제에 관하여(SPO600 프로젝트 2부), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/serputov/spo600-project-part-2-4198텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)