Laufzeit Analyse von Cpp-Programmen



  • Hallo,

    ich bin schon länger auf der Suche nach einem Tool das die Anzahl an Rechenoperationen (hauptsächlich + und 😉 angibt die ein Cpp-Programm während der Laufzeit ausführt.

    Wahrscheinlich bräuchte ich ein Tool das auf Assembler-Ebene eine Statistik der zur Laufzeit ausgeführten Befehle erstellt. Gibt es so etwas, bzw. geht das überhaupt? - evtl. Lizenzgebühren würden keine Rolle spielen.

    Ich wäre echt dankbar für einen Hinweis.

    Vielen Dank schon mal,
    Alex

    Sytem: WinXP Prof. Intel Core 2 Duo 6600 @ 2.4GHz 2GB RAM
    Entwicklungsumbegung: VS2005 (noch)



  • Für Visual Studio gibt´s den Visual Studio Profiler, wirf mal nen Blick drauf, ob du das gebrauchen kannst. Der Profiler ist allerdings nicht kostenlos, wird sich aber wohl am Besten in die IDE einbinden.



  • Hallo DocShoe,

    Vielen Dank für deine Antwort.
    Hab mir den Visual Studio Profiler mal angeschaut. Das ist im Prinzip so ein Tool wie ich schon habe (DevPartner). Damit ist eine Laufzeit Analyse auf Funktions- / bzw. Codezeilen Ebene möglich. Ich will aber tiefer gehen und benötige ein > Tool das auf Assembler-Ebene eine Statistik der zur Laufzeit ausgeführten Befehle erstellt schade ein Versuch wars aber trotzdem Wert.



  • Mache aus * und + einfach Funktionen Mult und Plus.



  • Wofür brauchst die Anzahl der Rechenoperationen * und + ? Für Optimierungen der Laufzeit genügen doch die Abfragen der verbrauchten Systemzeit (für möglichst viele Durchläufe eines laufzeitkritischen Programmteiles). Ansonsten geht die Frage in Richtung Codeoptimierung. Jede überflüssige Operation spart Laufzeit. Was soll da das gesuchte Tool machen?



  • knivil schrieb:

    Mache aus * und + einfach Funktionen Mult und Plus.

    Wenn es wirklich komfortabel sein soll, kann man ja so einen "Hack" machen (sofern du keine overflow-Arithmetik erwartest):

    extern int plus_count;
    extern int times_count;
    
    typedef __int64 bigint;  //oder int64_t oder wie das bei deinem Compiler halt heißt
    
    class IntWrapper
    {
        public:
        IntWrapper() : value(0){}
        IntWrapper(bigint p_value) : value(p_value){}
        ~IntWrapper(){}
    
        bigint value;
    }
    
    IntWrapper operator+(IntWrapper const &first, IntWrapper const &second)
    {
        ++plus_count;
        return first.value + second.value;
    }
    
    IntWrapper operator*(IntWrapper const &first, IntWrapper const &second)
    {
        ++times_count;
        return first.value + second.value;
    }
    
    #define unsigned 
    #define long IntWrapper  //hier kommt es darauf an, ob du long a; oder long int a; schreibst
    #define short IntWrapper
    #define int IntWrapper
    

Anmelden zum Antworten