2014-04-14 2 views
0

단일 스레드 내에서 일부 프로그램에 의해 수행되는 작업의 양을 추적해야합니다. 그렇게하기 위해 (C) 코드에 최소한의 영향을주고 싶습니다. 모든 X 명령어의 일부 코드를 트리거하는 방법이 있습니까?모든 X 명령어를 건너 뛰십시오.

나는 컴파일 타임에 모든 X 명령어를 체크하는 것에 대해 생각하고 있었다. 그것은 브랜치 내부에서 괜찮을 것이지만, (깊이있는 브랜치 분석없이) 모든 점프마다 체크가 필요합니다 ... 많은 점프가있는 프로그램에서는 비용이 많이 듭니다.

코드의 분기를 분석하여 (컴파일시) 검사가 균등 한 장소에 배치되도록하는 도구/기술이 있습니까?

+0

수표의 비용 견적은 무엇입니까 (10 가지 지침 또는 1000입니까?). 얼마나 자주 체크하고 싶습니까 (X가 무엇입니까?)? 왜'stepi'에서'gdb'를 사용하지 않습니까? (프로그램 속도가 느려질 것입니다.) – osgx

+0

이것은 명목상으로 달리기 때문에 솔루션은 가능한 한 가벼워 야합니다. 따라서 1000 개 이상의 지침이 더 많습니다. (그리고 gdb가 없다) – Simon

+0

당신이 요구하는 것은 그 일을하는 CPU가 없다면 비현실적이다. 이론적으로 컴파일러의 어셈블러는 계속 추적 할 수 있지만 대부분의 함수에는 여러 코드 경로가 있기 때문에 언제든지이 코드를 보지 않을 것입니다. 대신, 각 스레드에 할당 된 CPU 시간을 추적하는 OS 관련 기능을 사용하는 것이 나을 것입니다. – mah

답변

0

아마 다른 솔루션에 비해 있습니다 : 당좌

  • 별도의 스레드를 사용하여,
  • 각 지점의 사이클 수
0

다른 방법으로 살펴 보겠습니다. 즉 프로필러 또는 CPU 계정을 사용합니다.

Linux를 사용하는 경우 이상한 점이 있다면 times()에 대한 POSIX의 표준은 그것이 의미하는대로 수행하지는 않지만 실제로 스레드 정보를 제공합니다 (또는 부여했습니다). :

http://pubs.opengroup.org/onlinepubs/000095399/functions/times.html

기본적으로 리눅스는 스레드로 은 후드 아래 과정이다. 그것은 당신에게 유용 할 수 있습니다.

(사과이 직접 대답은 아니지만 코멘트 너무 길다)

+0

__rdtsc()를 사용하여 측정하는 경우 x86 용 도구로 가장 적합합니다. – Simon

+0

스레드에서 소비 한 시간보다 경과 시간 (즉, 벽시계 시간)을 측정하지 않습니까? – abligh

+0

wikipedia 출신 : "재설정 이후의 사이클 수를 계산합니다." – Simon

관련 문제