2012-09-27 9 views
0

내 프로그램에서 쌍을 정렬해야하는 벡터가 있습니다. 뭔가 같이 Intel과 비교하여 쌍의 벡터를 정렬하는 동안 GNU C++ 컴파일러의 성능이 좋지 않음

std::vector<std::pair<int, uintmax_t> > temp; 
... 
std::sort(temp.begin(), temp.end()); 

내가 몇 가지 측정을 수행 GNU C++ 컴파일러로 컴파일 할 때 인텔 C++ 컴파일러 25 초 컴파일 할 때 요소의 16M 이상 크기의 무언가의 벡터를 들어, 정렬 3 초 걸리는 것을 알아 냈다. 이것은 저에게 극단적 인 차이가있는 것 같습니다 (GNU를 사용하면 8 배 이상 느려짐).

GNU C++로이 프로그램을 더 빨리 만드는 방법을 알고 있습니까?

구성이 Intel 12.1.5 및 GNU 4.7.1입니다. 불행히도 프로그램 실행을 위해 사용하는 컴퓨터에 대한 수퍼 유저 권한이 없습니다.

미리 감사드립니다. 다니엘.

편집 : 최적화 플래그 -O3가이 문제를 해결했으며 GNU C++는 이제 3-4 초가 걸렸습니다. 힌트를 가져 주셔서 감사합니다, 저를 수치스럽게 생각하지는 못했습니다. (그래서,이 게시물이 언젠가는 다른 사람에게 도움이되기를 바랍니다 :).

측정을 위해 최적화 플래그를 지정하지 않았습니다. (아마도 -O2는 Intel과 GNU 모두 기본값 일 수 있습니다).

+1

'-O3'으로 컴파일 하시겠습니까? – Anycorn

+1

결과를 복제하고 분석 할 수 있도록 전체 테스트 프로그램을 게시하십시오. 빨리 만드는 첫 번째 단계는 왜 그렇게 오래 걸리는지를 파악하는 것입니다. (개인적으로'callgrind'를 사용하겠습니다.) –

+0

@Anyconr : 덕분에 도움이되었습니다, 편집 된 질문에 대한 자세한 내용을 참조하십시오 :) –

답변

1

플래그 추가 -Ofast는 g ++의 가능한 모든 최적화 플래그를 켭니다.

예,이 문제는 -O2/-O3으로 충분합니다. 최적화 할 g ++ 플래그에 대한 자세한 내용은 여기 https://stackoverflow.com/a/3005673/1095974을 참조하십시오.

+1

대신 -O2 또는 -O3을 제안합니다. -Ofast가 켜지는 최적화 중 일부는 모든 프로그램에 유효하지 않습니다. –

+0

감사합니다. -O3이 도움이되었습니다. 자세한 내용은 편집 된 질문을 참조하십시오. –