Assembler vs. C -> Geschwindigkeitsmessung, brauche besseres Tool
-
Ich habe ein Programm in Assembler geschrieben und will es nun mit dem Pendant in C vergleichen. Ein debugger kann ich nicht einsetzen da ich keine ahnung hab wie ich ein assemblerprogramm für debugger assembliere.
Bezüglich der Größe des Programms hab ich folgendes:
Assembler: 520 Bytes
C: 6300 BytesNun will ich noch die Geschwindigkeit und den Speicherverbrauch vergleichen.
Kennt jemand ein Tool unter Linux das mir diese Werte liefert?
Für time ist das Programm zu klein und die messung zu ungenau (ich erhalte als ausgabe das das programm keine zeit braucht (0,0000s user und sys) :-))Kennt jemand ein solches Programm (wie gesagt das Programm ist sehr klein, es ließt einen String ein und gibt ihn wieder aus)?
//EDIT: Achja NASM benutzt ich, falls das wichtig ist
-
Hi
Entweder dein Programm mist die zeit selber.
oder beschäftige dein programm länger damit du besser messen kannst. ( z.B. ne for schleife mit 10000 durchläufen drum rum bauen )
gruss
-
aufgrund dieser problematik verwendet man zum profilen loops die so lange laufen, dass man sie messen kann und nicht von den üblichen schwankungen verfälscht werden. so kann man auch bequem den speicherverbrauch des prozesses beobachten...
-
hi,
Um den zeitlichen Verbrauch zu messen hänst du einfach bei deinem C und assemblercode eine Funktion vorne und hinten hin, welche die Differenz der im CPU "Time Stamp Counter Register" angegebenen Zyklen berechnet und dann ausgibt. Das ist ungefähr das genauste was geht. Lesen kann man den TSC mit dem Mnemonic "rdtsc". Für den Speicherverbrauch fällt mir grad nix ein, sry...
editt: Mir fällt grad noch ein, dass ein OS afaik das benutzen von "rdtsc" verhindern kann, aber ich glaube das macht kein OS. Zumindest hat es bei mir Windows nicht gemacht...
-
rdtsc ist allerdings eher ungeeignet sobald mehrere cores vorhanden sind - denn deren counter laufen nicht unbedingt synchron. und dann war dar noch der efficion, dessen counter gleich gar nichts mit dem takt zu tun hatte
-
da wir hier im asm forum sind und jeder echte assembler-fan ein oszilloskop hat: lass einen i/o port togglen und dann misste einfach die frequenz...
-
camper schrieb:
rdtsc ist allerdings eher ungeeignet sobald mehrere cores vorhanden sind - denn deren counter laufen nicht unbedingt synchron.
Dann muss man halt das OS seiner Wahl konsultieren und dem beibiegen dass man gefälligst nur auf einem Core laufen will.
Ansonsten fällt mir nur noch PerformanceCounter unter Windows ein, aber der muss auch net unbedingt genau sein...und dann war dar noch der efficion, dessen counter gleich gar nichts mit dem takt zu tun hatte
Was das? Also welche Firma, etc.? Hab noch nie davon gehört...
-
Ich würde es mit Laufzeitdifferenzen versuchen.
-
So ichi hab das Programm lang genug gemacht
(ne schleife mit 10000), stelle nun aber fest das C schneller istAber ich glaube das liegt daran das ich 10000 Kernel-interrupts für die Ausgabe verwende, der Assemblercode den gcc generiert sieht da besser aus :-).
Aber egal, ich bin jetzt bereits bei einem anderen kleinen programm (und auch da gibts schon en problem :D). Ich danke euch für eure Hilfe.