2010-04-20 5 views
12

무거운 수의 크랭킹을 수행하고 부동 소수점 성능이 매우 중요합니다. 인텔 컴파일러의 성능은 대단히 좋으며 제작 한 어셈블리의 품질이 상당히 만족 스럽습니다.컴파일러의 품질을 최적화하는 C++ 0x

나는 어느 시점에서 설탕 부분을 중심으로 (예 : auto, 이니셜 라이저 목록 등) 람다를 사용해 보려고합니다. 이 시점에서 나는 boost의 수단으로 일반 C++에서 이러한 기능을 사용합니다.

C++ 0x 컴파일러가 얼마나 좋은 어셈블리 코드를 생성합니까? 특히 인텔 및 gcc 컴파일러. SSE 코드가 생성됩니까? C++에 필적하는 성능입니까? 벤치 마크가 있습니까?

내 Google 검색에서별로 알려지지 않았습니다.

감사합니다.

ps : 어느 시점에서 직접 테스트 하겠지만 C++과 관련하여 기대할 사항을 알고 싶습니다.

+2

인텔 C++ 컴파일러는 현재 람다만을 지원하며 단순하고 고유 한 이름의 펑터 인 것처럼 구현됩니다. 따라서 최적화 관점에서 다른 함수처럼 최적화됩니다. –

답변

8

최적화 프로그램에서 컴파일러가 최적화되지 않았기 때문에 코드에 대해 동일한 최적화를 기대할 수 있습니다. 따라서 새로운 C++ 0x 기능 만 사용하면 영향을받을 수 있습니다. 하지만 핵심 루틴이 C++ 0x 전용 기능을 사용하기 위해 갑자기 완전히 변경 될지 의심 스럽습니다.

auto과 λ는 구문상의 설탕이라는 점을 명심하십시오. 그것은 어쨌든 당신이 동일한 코드를 생성하는 방법 일 뿐이므로 컴파일러 최적화에는 아무런 영향을 미치지 않습니다. 따라서 이니셜 라이저 목록과 같은 새로운 "물건"에 대해서만 걱정할 필요가 있습니다. 그러나 비효율적이라면 나는 놀랄 것이다.

이동 의미 체계로 인해 많은 개선이 예상됩니다. 더 이상 데이터를 복사 할 필요가 없으며 단지 주변을 이동해야합니다. 이러한 이점을 최대한 활용할 수 있도록 코드를 디자인하십시오.

+3

이동 의미로 인해 거의 즉시 혜택을 얻을 수 있다면 –

+0

@Billy : 실제로 중요한 점입니다. 나는 추가 할 것이다. – GManNickG

+0

잘 컴파일 된 C++ 소스는 C++ 0x g ++이며 실제로 부동 소수점 또는 인텔 내장 함수를 사용할 때마다 차이가 없습니다. 그래서 성능면에서 그들은 같은 것처럼 보입니다. 어셈블리를 보지 못했지만 내 추측은 동급입니다. – Anycorn