2014-08-29 3 views
0

출시 빌드가 항상 디버그 빌드보다 빠릅니다 (릴리스 빌드가 많이 최적화되어 있기 때문에)? 가능한 가장 빠른 성능 코드를 작성하더라도?릴리즈 빌드 대 디버그 빌드 성능

또는 릴리스 빌드만큼 빠른 C++ 코드 (디버그 사용)를 작성할 수 있습니까?

내 코드가 너무 느리다는 것이 궁금합니다. 성능 테스트를 할 때, 상당한 차이가 있음을 알기 때문입니다.

+2

프로파일 링 할 때 매우 간단한 코드 또는 인라인 어셈블리를 제외하고는 종종 다른 명령어가 생성되기 때문에 (또는 심지어 라이브러리의 경우 MSVC에서 다른 C++ 코드가 컴파일 될 것이므로 항상 최적화를 사용하여 실행해야합니다 STL 구현). –

+0

작은 코드를 호출하는 간단한 프로그램 (gettet/setter)에 대해서도 differnce가 있음을 알 수 있습니다. 루프를 사용하면 좋은 성능을 얻기 위해 인라인 등을 사용할 때도 다른 라이브러리가 필요 없습니다. – jeromintus

+0

그 이유는 컴파일러는 최적화가 가능한 릴리즈 모드 (예 : 자동 벡터화/자동 병렬화, 루프 언 롤링)에서 다양한 성능 향상 연산을 수행 할 수 있으며,''inline ''을 사용한다고 컴파일러가 보장하지는 않습니다 그것을 인라인 할 것이다. –

답변

7

알고리즘을 잘 선택하면 디버그 빌드의 속도가 크게 달라 지지만 디버그 빌드가 결코 빠르지는 않습니다. 왜냐하면 디버거 컴파일러가 디버거에서 읽을 수 있도록 임시 변수의 값을 보존하려고 시도하는 동안 최적화 프로그램이 완전히 다르게 레지스터를 예약하기 때문입니다.

CPU 레지스터보다 훨씬 많은 변수가 있으므로 디버그 컴파일러가 해당 값을 RAM에 복사하는 명령을 내 보냅니다. 릴리스 빌드에서 값을 다시 사용하지 않으면 옵티마이 저는 방금 값을 버립니다.

0

일반적으로 달라집니다.

일부 릴리스 빌드는 디버그 빌드와 다를 수 없습니다.

또한 디버그와 릴리스 빌드 간의 구성 차이에 따라 달라집니다. 유일한 차이점은 디버그 릴리스의 심볼 정보이므로 동일한 성능을가집니다.

저희 가게에서는 디버그 소프트웨어를 출시 할 예정입니다. 실행 파일은 기호없이 Flash로 이동합니다.

+0

* "디버그와 릴리스 빌드 간의 구성 차이에 따라 달라집니다."* 왜 "또한"? 나는 "유일한"이라고 말할 것입니다 ... –

0

코드에 데이터 구조 유효성 검사가 있으면 디버그가 릴리스보다 훨씬 느려질 수 있습니다.

한편 앱이 I/O, 메모리 할당, 세마포어 대기 등과 같은 시스템 루틴을 호출하는 대부분의 시간을 소비하는 유형 인 경우 릴리스는 디버그보다 훨씬 빠르지 않습니다.

다른 한편으로는, 프로그램에 많은 자체 시간을 사용하는 기능이있는 경우에는 릴리스 빌드에서 빠를 것입니다.

+0

왜 릴리스 시간이 더 빨리 걸리는 기능이 더 빠른가요? – jeromintus

+0

@Sleicreider : 코드는 프로그램 카운터가 실제로있는 시간의 일부만 최적화 할 때 이점을 얻습니다. 이것이 바로 자체 시간입니다. 프로그램 카운터가 메모리 할당, 수학 라이브러리 또는 I/O를 기다리는 시간의 99 % 인 경우 최적화 프로그램이 코드를 무한히 가속화하더라도 전체적으로 1 %를 초과하여 저장할 수 없습니다. –

+0

제 경우에는 간단한 메소드 호출을 사용했습니다 : 'string & GetText() {return text :}' – jeromintus