오픈 소스 라이브러리에 SVE2 지원 추가 - 파트 I
나의 첫 번째 작업은 SVE2 지원을 구현하기 위한 오픈 소스 라이브러리를 찾는 것입니다. 이상적으로는 암호화 또는 멀티미디어 라이브러리와 같은 대량의 데이터를 처리하는 데 사용되는 라이브러리입니다. 오디오 및 오디오 프로그래밍에 관심이 있으므로 거기를 살펴보고 좋은 후보를 찾을 수 있기를 바랍니다. 내 검색 기준은 다음과 같습니다.
나는 내가 아는 오픈 소스 오디오 응용 프로그램을 생각하는 것으로 시작했고 가장 먼저 떠오른 것은 Audacity였습니다. 나는 교수가 AArch64 서버에서 패키지를 조회하도록 권장하고 하나가 사용 가능한지 확인하면서 dnf 목록을 사용했습니다.
그런 다음 dnf deplist를 사용하여 최적화를 위한 좋은 대상이 될 대상을 좁히고 시도해야 하는 종속성을 확인했습니다. 좋은 후보가 될 수 있는 여러 라이브러리가 있습니다.
고급 Linux 사운드 아키텍처 라이브러리(ALSA)
무료 무손실 오디오 코덱(FLAC)
리보그
거기에서 FLAC 라이브러리를 확인하여 소스 코드에 액세스하고 SVE2 최적화가 어떻게 작동할 수 있는지 자세히 알아보았습니다. 웹 사이트의 git URL이 다운되었으므로 지금은 다른 라이브러리를 확인하고 패닝되지 않으면 다시 원을 그리십시오.
ALSA 라이브러리를 복제하기 위한 관련 정보가 있는 page을 찾았고 그렇게 했습니다.
git clone git://git.alsa-project.org/alsa-lib.git alsa-lib
불행히도 sve, Neon 또는 AArch64 특정 구현과 관련된 것을 찾으려고 많은 검색을 시도했지만 아무 것도 찾을 수 없었습니다. 다시 나는 계속해서 벽에 부딪히면 이것으로 돌아갈 것입니다.
내 목록의 마지막은 Libogg입니다. 위치here에 있고 FLAC를 유지 관리하는 동일한 조직에서 유지 관리한다는 사실을 알게 되었습니다. 고맙게도 이 git 링크는 깨지지 않았습니다. 안타깝게도 Neon 또는 SIMD에 대한 참조를 찾을 때 다시 빈 공간이 생겨서 앞서 언급한 FLAC 및 ogg 라이브러리의 유지 관리자인 다양한 xiph 프로젝트를 살펴보기 위해 검색을 확장했습니다. 그렇게 함으로써 저는 AArch64 및 Neon에 대한 특정 참조가 있는 opus라는 훌륭한 후보를 찾았습니다.
opus/cmake/OpusFunctions.cmake
에서 CPU와 컴파일러가 Neon을 지원하는지 확인하는 검사를 찾을 수 있었습니다.이는 이 패키지가 SIMD를 활용하고 Neon이 하나의 구현임을 나타냅니다.
라이브러리를 구성한 후 Makefile을 찾고 어떤 컴파일 옵션을 사용하고 있는지 확인할 수 있었습니다. 이 경우 다음과 같은 내용이 있었습니다.
CFLAGS = -g -O2 -fvisibility=hidden -D_FORTIFY_SOURCE=2 -W -Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes
이 수준을
-O3
로 올리면 SVE2 자동 벡터화 최적화가 시작되며, 더 나아가 이 패키지는 opus/celt/arm/pitch_neon_intr.c
소스 파일과 같은 내장 기능을 활용한다는 것을 알았습니다.for (i = 0; i < N - 7; i += 8) {
x_s16x8 = vld1q_s16(&x[i]);
y_s16x8 = vld1q_s16(&y[i]);
xy_s32x4 = vmlal_s16(xy_s32x4, vget_low_s16 (x_s16x8), vget_low_s16 (y_s16x8));
xy_s32x4 = vmlal_s16(xy_s32x4, vget_high_s16(x_s16x8), vget_high_s16(y_s16x8));
}
SVE2 버전의 내장 함수를 사용하여
pitch_neon_intr.c
및/또는 celt_neon_intr.c
에 해당하는 SVE2를 생성하면 SVE2용으로 이 패키지를 최적화할 수 있습니다. 나는 opus 개발자 메일링 리스트에 그렇게 하겠다는 의사를 표명하는 이메일을 보냈고, 이제 남은 것은 그것을 하는 것뿐입니다! 곧 더 많은 정보를 얻을 수 있습니다.
Reference
이 문제에 관하여(오픈 소스 라이브러리에 SVE2 지원 추가 - 파트 I), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/gusmccallum/adding-sve2-support-to-an-open-source-library-part-i-349m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)