프로젝트 3단계 - 분석
3080 단어 spo600
소개
안녕하세요 Tecca입니다. 이 게시물은 프로젝트에 대한 요약입니다. 자세한 내용은 프로젝트에 대한 이전 게시물을 확인하세요.
2단계에서 프로젝트에 자동 벡터화를 구현했고, 이번 포스트에서는 자동 벡터화가 적용되지 않은 부분과 그 이유에 대해 자세히 알아보겠습니다.
요약
djpeg를 실행하는 자동 벡터화를 적용하기 전에
자동 벡터화를 적용하고 qemu-aarch64에서 djpeg를 실행한 후
자동 벡터화 적용 후 whilelo 수
나는 위의 스크린샷이 자동 벡터화가 프로젝트에 성공적으로 적용되었고 원래 함수 djpeg가 충돌 없이 잘 작동함을 분명히 보여준다고 가정했습니다. 하지만 필요한 모든 위치가 자동 벡터화되었는지 궁금합니다.
qEmu-aarch64의 특성으로 인해 qemu-aarch64에서 테스트하면 내 구현이 실제로 원래 코드보다 느리게 실행될 것이라고 생각합니다. 이는 일반 코드가 프로세서에서 최고 속도로 실행되고 SVE2 명령을 더 느린 속도로 실행할 수 있도록 하기 때문입니다. .
어쨌든 벡터화된 파일이 아닌 모든 벡터화된 파일의 로그를 얻으려면 2단계에서 했던 방식으로 프로젝트를 다시 빌드해야 합니다.
make -j$((`nproc`+1)) |& tee make.log
이를 통해 make.log 파일에 make 프로세스 세부 정보를 저장하고 있습니다.
자동 벡터화에서 "누락된"장소가 분명히 있음을 로그에서 알 수 있습니다.
벡터화되지 않은 파일의 세부 정보
위의 스크린샷에서 알 수 있듯이 벡터화된 파일의 양이 벡터화되지 않은 파일보다 훨씬 적습니다.
많은 양의 데이터를 처리하지 않는 루프를 최적화하면 자동 벡터화의 이점이 거의 없기 때문에 많은 양의 데이터를 처리하는 루프가 있는 파일만 자동 벡터화에 의해 최적화될 것이라고 생각합니다. 그리고 중요한 루프가 덜 중요한 루프보다 훨씬 덜 중요하다는 것은 이치에 맞습니다.
다른 벡터화
두 가지 유형의 벡터는 가변 길이와 지정된 바이트 벡터를 사용했습니다.
벡터화되지 않은 코드를 조사하고 수정 사항을 적용하려고 합니다.
벡터화되지 않은 코드를 수정하고 수동으로 자동 벡터화할 수 있는지 확인하려고 했습니다. 그러나 내가 시도한 방법 중 어느 것도 작동하지 않으며 여기에는 여러 가지 이유가 있을 수 있으며 실제로 make.log에 설명되어 있습니다.
나는 약간의 조사를 했고 일부는 대부분의 경우 C/C++ 컴파일러가 for-loop의 구조를 미리 정의된 벡터화 템플릿과 일치시킬 수 없기 때문에 for-loop를 벡터화할 수 없다고 말합니다.
결론
3단계에 걸쳐 최적화를 위한 후보 오픈 소스 패키지를 선택했고, 3단계에서는 SVE2 지원을 수동으로 추가하려고 시도했지만 소스 코드 수정을 통해 더 많은 벡터화를 추가할 수 없었지만 2단계에서 아마도 자동 벡터화를 성공적으로 추가했습니다. 컴파일러 옵션을 수정하여 라이브러리에서 필요한 모든 위치.
Reference
이 문제에 관하여(프로젝트 3단계 - 분석), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/pykedot/4-19-fic
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(프로젝트 3단계 - 분석), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/pykedot/4-19-fic텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)