Warum sagt mir VSPERFMON mir, dass die inklusive Zeit der Funktion länger dauert als die Wurzelfunktion?

StackOverflow https://stackoverflow.com/questions/9322121

Frage

Daher habe ich mit VSPERFMON über die Befehlszeilen -Tools vSsperFrport/vsperfcmd mit VS 2010 experimentiert. Ich habe ein wirklich einfaches Programm zum Profilieren und Versuch, die Zahlen zu verstehen, die diese Tools ausgeben:

void DoStuff()
{
    double res = 0.0;
    for (double i = 0.0; i < 10000.0; ++i)
    {
        res += sin(i);      
    }
    printf("res is %lf", res);
}


int _tmain(int argc, _TCHAR* argv[])
{
    DoStuff();  
    return 0;
}

Ich profiliere die ausführbare Datei, indem ich die Schritte wie detailliert ausführe hier in der Befehlszeile. Das obige wird zu perfplay.exe zusammengestellt, dann mache ich die folgenden Schritte:

vsinstr perfPlay.exe
vsperfcmd /start:trace /output:perfPlay.vsp
perfPlay.exe
vsperfcmd /shutdown
vsperfreport perfPlay.vsp /output:singleFile /summary:All

Hier ist das Seltsame, was ich nicht herausfinden kann. Die verstrichene inklusive Zeit für Dostuff ist weniger als Die inklusive Zeit für SIN () sowohl in der Funktion als auch im Anrufer/Callee -Bericht: Hier ist der Anrufer/Callee -Bericht für Dostuff (), beachten Sie die verstrichene inklusive Zeit für Thunk: Sin vs

Type        Function Name       Elapsed Inclusive Time  Elapsed Exclusive Time  
Root        DoStuffInLib(void)  2157487                 0
Caller      _wmain  2157487 0   2157487                 0
Callee      __RTC_CheckEsp      57                      57  
Callee      _printf             347667                  347667  
Callee      THUNK:sin           2282622                 81435   

Verstrichene inklusive Zeit ist definiert als die Zeit, die für die Ausführung von Code in Ihrer Funktion benötigt wird einschließlich Funktionen, die Sie anrufen. Nach dieser Definition sollte Dostuffs inklusive Zeit immer die inklusive Zeit der Sünde sein. Der obige Unterschied ist relativ klein, aber wenn ich dieses Ding für eine Weile laufen lasse, wird es größer. Dieser Unterschied besteht sowohl im Debug- als auch im Release -Modus.

Warum ist es der Fall, dass die inklusive Zeit der Sünde höher ist? Ich würde erwarten, dass es einen Teil der Zeit des Stammeintrags darstellt. Ich bin mir nicht ganz sicher, was los ist oder auch wenn ich diesem Tool vertrauen kann, wenn es scheinbar seltsames Zeug tut. Ich vermute jedoch, dass mir nur etwas fehlt, das die Dinge für mich klarer machen würde.

War es hilfreich?

Lösung

Der Leistungsmonitor verwendet Sonden, um Daten zu sammeln. Es versucht, die Zeit, die von den eigenen Sonden von den gesammelten Daten benötigt wird, zu subtrahieren, diese Korrektur ist jedoch ungefähr und wird häufig konsequent in die eine oder andere Richtung ausgeschaltet. Je kleiner die Funktion, die Sie zu untersuchen möchten, desto ungenauer die Messungen, da die Zeit zum Sammeln der Daten ein höherer Prozentsatz der Zeit ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top