프로젝트 2단계 - 구현(2부)
소개
안녕하세요 Tecca입니다. 이 게시물은 SPO600 프로젝트 2단계를 위한 것입니다. 자세한 내용은 확인하시기 바랍니다. 이 게시물에서는 프로젝트 libjpeg-turbo에 대한 SVE2 지원으로 자동 벡터화를 추가할 것입니다.
2단계: 자동 벡터화 구현
지난번에 성공적으로 환경을 설정하고 Unix 시스템에서 옵션(-fast)으로 실행 파일(djpeg) 중 하나를 실행했습니다.
이번에는 새 컴파일러 옵션을 전체 프로그램에 추가하는 것으로 시작하겠습니다.
기본 컴파일 옵션은 위의 이미지에서 볼 수 있듯이 -O3 -DNDEBUG로 설정되었습니다.
내가 해야 할 일은 SVE2 구현에 맞게 수정하는 것입니다. 온라인 및 프로젝트 디렉토리를 통해 약간의 조사 후. 컴파일러 플래그와 CMAKE_ASM_FLAGS가 모두 첫 번째 실행 후 생성되는 CMakeCache.txt 파일에 있다는 것을 알았습니다.
cmake -G"Unix Makefiles"
//Flags used by the C compiler during all build types.
CMAKE_C_FLAGS:STRING=
...
//Flags used by the C compiler during RELEASE builds.
CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
...
//Flags used by the ASM compiler during all build types.
CMAKE_ASM_FLAGS:STRING=
...
//Flags used by the ASM compiler during RELEASE builds.
CMAKE_ASM_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
...
cmake를 처음 실행하기 전에 CMakeCache.txt 파일의 CMAKE_ASM_FLAGS_RELEASE:STRING 및 CMAKE_ASM_FLAGS_RELEASE:STRING을 수동으로 수정하거나 CFLAGS를 환경 변수로 내보낼 수 있습니다.
CMAKE_C_FLAGS를 수정하면 모든 빌드 유형에 영향을 주지만 현재 릴리스 빌드로만 작업하고 있으므로 RELEASE 빌드 중에 C 컴파일러에서 사용할 빌드만 수정하는 것이 좋습니다.
CFLAGS를 환경 변수로 내보내는 예제 명령
export CFLAGS="-g -fopt-info-vec-all -march=armv8-a+sve2"
컴파일러 옵션을 필요한 것으로 변경한 후 다시 cmake를 수행합니다.
두 컴파일러 플래그가 SVE2에 대해 원하는 것으로 변경된 것을 볼 수 있습니다.
이제 1부에서 했던 것처럼 다시 만듭니다.
make -j$((`nproc`+1))
빌드가 성공했습니다.
이제 whileo 명령이 가능한 모든 위치에 적용되는지 확인해야 합니다.
find 및 grep은 가능한 모든 위치 중에서 1972 whilelo 명령을 가져올 수 있었습니다. 이는 우리가 프로젝트를 올바르게 빌드했음을 의미합니다. 이제 djpeg가 1부에서 했던 것처럼 잘 작동하는지 봅시다.
참고: 현재 SVE2 명령어를 지원하는 하드웨어가 없기 때문에 파트 1에서 했던 것과 같은 방식으로 실행할 수 없습니다. 이제 SVE2 명령어를 사용할 수 있게 해주는 qemu-aarch64를 사용해야 합니다.
testimgint.jpg가 성공적으로 압축 해제되었고 1부에서 수행한 것과 마찬가지로 새로운 decompressed.pgm이 생성되었습니다.
결론
이 게시물에서는 프로젝트에 SVE2(자동 벡터화) 지원을 성공적으로 추가하고 아무 것도 중단하지 않고 qumu-aarch64로 실행했습니다.
Reference
이 문제에 관하여(프로젝트 2단계 - 구현(2부)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/pykedot/4-6-44e4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)