2009-08-17 5 views
4

Windows에서 cygwin을 실행 중이고 최신 버전의 gprof를 사용하여 코드를 프로파일 링합니다. 내 문제는 평면 프로필 내 코드에서 각 기능에 대한 초를 보여줍니다, 나는 심지어 함수를 반복하려고했지만 (백만 회선에 대한 루프를 시도) gprof 언제든지 축적 할 수 없습니다. 도와주세요. 여기 내 샘플 함수 중 하나입니다.gprof - gnu 프로파일 러를 사용하여 시간을 축적 할 수 없습니다.

bool is_adjacent(const char* a ,const char* b) 
{ 
    for(long long iter=0;iter<=1000000;iter++){ 
    string line1="qwertyuiop"; 
    string line2="asdfghjkl"; 
    string line3="zxcvbnm"; 
    string line4="1234567890"; 
    int pos=line1.find(*a); 
    if(pos!=string::npos){ 
    if ((line1[pos++]==*b)||((pos!=0)&&(line1[pos--]==*b))) 
     return true; 
    else return false;} 
    pos=line2.find(*a); 
    if(pos!=string::npos){ 
    if ((line2[pos++]==*b)||((pos!=0)&&(line2[pos--]==*b))) 
     return true; 
    else return false;} 
    pos=line3.find(*a); 
    if(pos!=string::npos){ 
    if ((line3[pos++]==*b)||((pos!=0)&&(line3[pos--]==*b))) 
     return true; 
    else return false;} 
    pos=line4.find(*a); 
    if(pos!=string::npos){ 
    if ((line4[pos++]==*b)||((pos!=0)&&(line4[pos--]==*b))) 
     return true; 
    else return false;} 
    } 
} 
+0

이 문제를 해결하는 데 도움이되는 정보가 더 필요합니다. gprof를 실행하기 위해 전달한 명령 줄 (1)과 (2) 프로그램 컴파일에 사용한 명령 줄 (2)을 줄 수 있습니까? – quark

+0

1.compiling : $ g ++ -pg comp.cpp 2.execution : $/a.exe를 3.Gprof $ gprof은 a.exe를 –

답변

0

어떤 gprof 버전을 사용하고 있습니까? 일부 오래된 버전에는이 정확한 버그가 있습니다.

gprof --version을 실행하고 결과를 알려주십시오. 전반적인 목표는 찾아 성능 문제를 제거하는 경우

+1

2.18.50.20080625. –

1

, 당신은 consider this.

은 거의 0 %를 떠나, 그것은 발견 및 문자열 비교에 소요되는 CPU 시간의 본질적 100 %가 표시됩니다 의심 할 수 귀하의 코드. 프로그램 카운터 만 샘플링 할 때 발생합니다.

호출 스택을 샘플링하면 찾기 및 문자열 비교를 호출하는 코드 줄이 해당 시간과 동일한 빈도로 스택에 표시됩니다.

그것은 영광의 gprof입니다.

P. 디스 어셈블리 레벨에서 코드를 한 단계 씩 실행하여이를 파악할 수도 있습니다.

1

나는 때때로 그 문제를 겪고있다. Esp. 무겁게 스레드 코드.

valgrind를 --callgrind 옵션 (도구)과 함께 사용하면 함수 호출 당 얼마나 많은 시간을 더 자세히 볼 수 있습니다. kcachegrind라고하는 출력 (및 callgraph)을 시각화하는 kde 도구가 있습니다. Cygwin에서 설치할 수 있는지 모르겠다.

관련 문제