2008-09-09 3 views
1

Intel Core-2Duo 플랫폼의 Microsoft VS 2005에서 C 코드의 프로파일 링을 수행하고 있습니다. 필자는 내 기능으로 시간 (초 : 밀리 초)을 측정합니다. 하지만 운영 체제가 지속적으로 내 응용 프로그램을 실행하지 않고 대신 다른 응용 프로그램/서비스를 내 코드 실행 사이에 일정을 세우므로이 측정의 정확성에 의문을 제기합니다. (프로필을 작성하는 동안 주요 응용 프로그램이 실행되지는 않지만 실행, 여전히 Windows 내 애플 리케이션을 선점하여 실행됩니다 자체 코드를 많이합니다.). 이 모든 때문에 나는 프로필 번호 (내 애플 리케이션을 실행하는 데 걸리는 시간) 믿을 정확하지 않습니다.운영체제 프로파일 링하는 동안 오버 헤드가 있습니까?

내 질문에 운영 체제 오버 헤드, 일반적인 Windows 시스템 (예 : Windows XP를 실행)에서 오버 헤드를 예약하는 등의 방법을 찾을 수 있습니다. 내 응용 프로그램이 60 밀리 초 동안 실행되었다고 말하면 60 밀리 초에서 내 응용 프로그램이 실제로 얼마나 많은 시간을 사용했는지 나타냅니다. 운영 체제에 의해 예정된 다른 작업에 의해 선점 되었기 때문에 유휴 상태에서 얼마나 많은 시간을 보냈습니까? 비슷한 일을하는 동안 당신의 경험을 바탕으로

또는

이어야 등의 OS 오버 헤드를 얻을 수있는 볼 파크 번호가, 당신은에서왔다? 멀티 CPU 시스템에

답변

0

제안

한번에 실행.

0

1 -, 여러 번 반복 - 코드에서 일부 디버그 로깅을 착용 할 것 (물론 타임 스탬프를 포함), 디버거

이 외부에서 실행 - 다시 디버거

3 을 실행 통계적으로 유효한 데이터를 얻습니다.

4 - 비교.

독립 실행 형과 디버거의 평균 실행 시간에 큰 차이가 있다면 OS (또는 디버거 오버 헤드의 오버 헤드)를 의심 할 수 있습니다. 차이가 없다면, 그것을 땀을 내지 마십시오.

Edit0 : 분명히 디버그 메시지에는 약간의 오버 헤드가 있습니다. 디버거에서 실행 중일 때도 코드에 남겨 둘 수 있습니다. 그런 식으로 독립 실행 형 및 디버거 모두 매우 동일한 코드를 실행합니다.

편집 1 : 질문을 잘못 이해했습니다. 귀하의 우려는 - 디버깅 중 - OS가 정상적인 실행 모드보다 더 자주 앱을 중단시킬 수 있다고 생각했습니다. 앱이 실제로 얼마나 많은 시간을 보냈는지 알고 싶다면 작업 관리자에서 'CPU 시간'과 걸린 시간을 비교하면됩니다.

편집 2 : 프로세스에 대해 GetProcessTimes에서 반환 된 시간을 실제 실행 시간과 비교하십시오. 차이점은 CPU가 다른 사람에게 보낸 시간입니다.

1

@Kogus : 디버거 (명령 프롬프트에서 독립 실행 형 응용 프로그램)를 실행해도 여전히 OS에 의해 선점 될 수 있으며 내 응용 프로그램에서 소요되는 시간을 잘못 측정 할 수 있습니다.

Is'nt it?

-ad

0

이렇게하는 가장 좋은 방법은 전용 프로파일 링 도구입니다. 거기에 많은 것들이 있습니다. 나는 C 용으로 몇 년 동안 사용하지 않았다. 다른 누군가가 더 나은 조언을 줄 수 있기를 희망한다. Visual Studio 2005를 사용할 때 이것은 시작하기에 좋은 장소 일 수 있습니다 : AQ, 그러나 나는 그것을 사용한 적이 없습니다.

관련 문제