문제

우리는 G ++ 버전 3.2.3 및 4.2.4를보고 있습니다. 4.2.4를 사용하면 일부 코드 기반의 성능 향상이 중요합니다.

나는 검색을 시도했다 GCC Buzilla 데이터베이스 버그가 무엇인지에 대한 힌트를 찾기 위해서는 극적인 개선이 있었지만 후보자로서 눈에 띄는 개별 버그를 찾지 못했습니다.

개선이 천천히 영향을 미쳤던 많은 작은 변화의 결과입니까? 아니면 차이를 만들 수있는 상위 5 가지 개선 세트가 있었습니까?

일부 배경에서 우리의 코드베이스는 STL 컨테이너 및 알고리즘뿐만 아니라 '인라인'키워드와 같은 C ++ 기능을 잘 활용합니다.

도움이 되었습니까?

해결책

내 경험상 3.4는 성능이 기본적으로 정점에 달하는 곳입니다. 4.2는 실제로 내 프로젝트에서 3.4보다 느리게, 4.3은 4.3의 첫 번째 성능과 동일합니다. 4.4는 3.4보다 약간 빠릅니다.

이전 버전의 GCC가 코드로 믿을 수 없을 정도로 지연된 일을 한 곳에서 찾은 특정 몇 가지 사례가 있습니다. 불필요한 몇 가지 지침을 추가하면 성능이 크게 손상된 짧은 루프였습니다).

나는 개인적으로 3.4를 훨씬 더 빠르게 컴파일하기 때문에 테스트를 훨씬 빨리 만듭니다. 나는 또한 최신 버전을 피하려고 노력합니다. -최근 GCC 버전의 Core2는 예를 들어 내 프로그램에서 SEGFAULTS를 유발합니다. 예를 들어, 정렬되지 않은 주소에서 정렬 된 액세스를 수행하려고 시도하는 자동 변형 코드가 방출되기 때문입니다.

전반적으로 차이는 거의 크지 않습니다. 3-5%가 절대입니다 대부분 성능 변화 측면에서 보았습니다.

이제 이것은 C입니다. C ++에서는 상황이 다를 수 있습니다.

다른 팁

나는 최적화가 GCC4 시리즈에서 완전히 재 작업되었다고 생각합니다. 예를 들어 벡터화에 대해이 페이지를 참조하십시오.

http://gcc.gnu.org/projects/tree-ssa/vectorization.html

정보를 위해, 나는 한 번 동적 배열, 정적 배열 및 std :: 벡터를 사용하여 c [i] = a [i] + b [i]의 벤치 마크를 수행했으며 가장 빠른 std :: 벡터였습니다 (w/ gcc 4.1). 성능의 30% 차이.

스트림은 3.3에서 매우 느 렸으며 3.4에서 훨씬 더 빨랐습니다. (GCC 메일 링리스트의 메시지) 나는 다른 것들도 향상되었다고 확신했다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top