프로젝트 2단계 - 구현(2부)

3167 단어 stage2spo600

소개



안녕하세요 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로 실행했습니다.

좋은 웹페이지 즐겨찾기