GCC에서 -fno-strict-aliasing을 지정하여 성능이 으로 저하되는 벤치 마크가 있습니까? (또는 다른 컴파일러에서는 에 해당)?-fno-strict-aliasing의 성능 영향
답변
다른 컴파일러가 다양한 수준의 공격성을 구현하기 때문에 컴파일러마다 많은 차이가 있습니다. GCC는 상당히 공격적입니다. 엄격한 앨리어싱을 사용하면 사람과 "명백하게"동등한 포인터 (예 : foo* a; bar * b; b = (foo*)a;
)가 별칭이 될 수 없으므로 매우 공격적인 변환이 가능하지만 생각보다 심각하지는 않습니다 작성된 코드. Apple의 GCC는 기본적으로 엄격한 앨리어싱을 비활성화합니다. 반면에 LLVM은 심지어 에의 엄격한 앨리어싱을 가지고 있지 않으며, 계획 중에는 다른 사람이 동등성을 판단 할 수 없을 때이를 폴백 케이스로 구현할 계획이라고합니다. 위의 예에서는 여전히 a와 b를 동일하게 판단합니다. 다른 방식으로 관계를 결정할 수 없으면 유형 기반 앨리어싱 만 사용합니다.
내 경험상 엄격한 앨리어싱의 성능에 미치는 영향은 대부분 루프 불변 코드 모션과 관련이 있습니다. 유형 정보를 사용하여 루프 내로드가 반복되는 배열의 별칭이 될 수 없음을 증명할 수 있습니다. 루프 밖으로 빠져 나간다. YMMV.
LLVM의 접근 방식은 나에게 맞는 것 같습니다 – Spudd86
내가 경험할 수있는 것은 (PS3의 대형 프로젝트에서 이것을 테스트 한 결과, 많은 레지스터로 인해 실제로 SA에서 상당한 이점을 얻을 수있는 아키텍처이기 때문에 PowerPC는 실제로 볼 수있는 최적화가된다는 것입니다. 일반적으로 매우 지역적 (범위 현명)이고 작을 것입니다. 20MB의 실행 파일에서 .text 섹션 (= 코드) 80kb를 긁어 냈습니다. 이것은 모두 작은 범위 인 & 루프에있었습니다.
이 옵션을 사용하면 생성 된 코드가 현재보다 (1 ~ 5 % 범위로 생각하면) 약간 더 가볍고 최적화 될 수 있지만 큰 결과는 기대할 수 없습니다. 따라서 -fno-strict-aliasing을 사용하면 여러분의 성능에 큰 영향을 미치지 않을 것입니다. 즉, -fno-strict-aliasing이 필요한 코드를 갖는 것이 최선의 차선책입니다.
코드 크기 == 속도이기 때문에? PS3 예제는 여기에 없으며 거기에 없습니다. 어떻게 실행 되었습니까? – Eloff
더 빨리 말할 수 있습니까? 잠재적 인로드/저장이 생략된다는 점을 고려할 때 전혀 생각할 사항이 아니며, 어쨌든 메모리 바인딩 된 머신에서 작은 실행 파일이 더 바람직합니다. 그래서 그것은 여기에 있고, 또한 거기에 있습니다. – nielsj
OP는 성능에 영향을 미쳤고 코드 크기 만 논의했습니다. 그럼 당신은 큰 성능 차이를 보지 못할 이유에 관해서는 사실상의 인수를 사용했습니다. 그런 다음 당신은 리눅스 커널을 "최상의 상황에 차선책"이라고 불렀다. 나는 왜 당신이 downvote를 얻었는지 알 수 있다고 생각합니다. – Eloff
다음은 2004 년에 실시한 연구로, http://docs.lib.purdue.edu/cgi/viewcontent.cgi?article=1124&context=ecetr과 같이 코드 성능에 대한 엄격한 앨리어싱 영향에 관한 링크입니다. 그림 2.5는 3 ~ 10 %의 상대적 향상을 보여줍니다. 성능 저하의
연구원 '설명 : 어셈블리 코드를 검사에서
, 우리는 저하 레지스터 할당 알고리즘의 효과가 있음을 발견했다. GCC는 그래프 채색 레지스터 할당 자 [2, 3]를 구현합니다. 엄격한 앨리어싱을 사용하면 변수의 라이브 범위가 길어지고 레지스터가 높고 누수가 발생합니다. 보다 보수적 인 앨리어싱 (aliasing)을 사용하면 같은 변수가 짧은 라이브 범위의 끝에 메모리 전송을 초래합니다.
[2] Peter Bergner, Peter Dahl, David Engebretsen 및 Matthew T. O'Keefe. 누출 코드 간섭 영역 누출을 통한 최소화. SIGPLAN Programming on Programming 언어 디자인 및 구현, 287-295, 1997.
[3] Preston Briggs, Keith D. Cooper 및 Linda Torczon. 그래프 채색 향상 기능 레지스터 할당. 프로그래밍 언어 및 시스템에 대한 ACM 트랜잭션, 16 (3) : 428-455, 1994 년 5 월.
엄격한 앨리어싱 *에 의해 허용되는 최적화의 가치를 살펴본 연구는'restrict' 한정자 *를 통해 얻을 수 없었습니다. – supercat
이러한 요구 사항을 충족시키는 최적화에 대해 알고 있습니까? – SzymonPajzert
'restrict' 한정자는 정적 지속 기간 오브젝트가 별명을 지정하지 않는다는 것을 컴파일러에 알리는 데 효과적으로 사용할 수 없으며 경우에 따라 프로그램이 서로 별명을 지정할 수있는 동일한 유형에 대해 여러 개의 관련 포인터를 가질 수 있습니다. 유형 기반 앨리어싱은 그렇지 않은 경우에는 최적화를 허용합니다. IMHO의 경우, 더 나은 한정어를 추가하면 더 잘 처리 될 수 있습니다 (예 : 객체가 외부 코드에 노출 될 수있는 경우 'register'한정자 허용). 포인터를 통해 액세스 할 때와 달리 액세스 할 때 새 주소를 얻는 것처럼 동작 할 수 있습니다). – supercat
- 1. 성능 카운터의 성능에 미치는 영향
- 2. EntityFramework에있는 엔티티 인스턴스의 성능 영향
- 3. Delphi에서 제스처 인식의 성능 영향?
- 4. 인덱스 정의 : 어떤 컬럼 및 성능 영향?
- 5. PHP 변수를 복사 할 때의 성능 영향
- 6. 마커 대 벡터 점 - 성능 영향
- 7. 다른 데이터베이스의 테이블 조인의 성능 영향
- 8. 문화 불변 자원을 사용한 성능 영향
- 9. 영향
- 10. 응용 프로그램의 성능에 미치는 영향
- 11. 성능 관련
- 12. Oracle 사용시 성능에 미치는 영향
- 13. SQLite의 성능에 대한 주요한 영향
- 14. 가변 범위가 성능에 미치는 영향? (C#)
- 15. .Net 정적 메서드 및 동시성에 미치는 영향?
- 16. GADT 사용시 성능에 미치는 영향
- 17. 신용 카드 처리 스크립트/봇의 영향 미치는 영향
- 18. 게시 영향 평가
- 19. 성능에 대한 javax.servlet.Filter의 영향?
- 20. 빈번한 sdcard 쓰기의 영향
- 21. mysql_data_seek의 성능에 미치는 영향
- 22. 매시간 재시작 OWSTIMER의 영향?
- 23. AWS 계정 식별자의 영향
- 24. QtScript의 변수 영향 문제
- 25. 벤치마킹 프로세서 친화도 영향
- 26. Systemtap 성능에 미치는 영향
- 27. 코드 변경시 테스트 영향
- 28. 카산드라 - ColumnFamilies 구성의 영향
- 29. 오라클 성능 질문
- 30. SQL : 긴 varchar 및 성능에 미치는 영향
정확한 중복 : http://stackoverflow.com/questions/754929/strict-aliasing – GManNickG
해당 토론에서 성능 번호를 찾을 수 없습니다. 일부 테스트 결과/데이터를 찾고 있습니다. 내가 뭐 놓친 거 없니? – Carlos
FWIW, 승인 된 응답에 성능 번호가 없습니다. – peterchen