Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » performance

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
11.07.2003, 14:51 Uhr
~michael
Gast


hi, kann mir jemand eine Seite sagen,wo man findet, wie lange bestimmte Anweisungen dauern? Z.B. such ich wie lange eine Auswertung einer if Anweisung dauert!

C++:
if(object->btest)
{
// mach was
}



Michael
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.07.2003, 16:21 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


wenn du nur


C++:
if(object->btest)
{
}



sollte dir der Compiler/Linker die Anweisung einfach "rausoptimieren".
ansonsten ist es schwer zu sagen denke ich, da 1. Jeder Rechner unterschiedlich schnell etwas berechnet, je nach Hardware, OS und Conf
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.07.2003, 23:11 Uhr
~Bon
Gast


Hi Michael

eine Seite, auf der man findet, wie lange bestimmten Anweisungen dauern,
kann ich Dir leider auch nicht sagen,

Wie schon Flosoft gesagt hat, ist die Hardware und das Betriebsystem ausschlaggebend
für die Ausführungszeit von Programmen.

Was für eine Hardware und welches Betriebsystem benutzt Du eigentlich,
und weshalb benötigst Du die Laufzeitangaben überhaupt ?

Wenn Du annimmst, dass bei jedem CPU Takt 1 Befehl ausgeführt wird,
und Du den Assemblercode kennst, kannst Du die Laufzeit annähernd bestimmen.
Bei einem 1 GHz PC dauert 1 Befehl dann 1 Nanno Sekunde.
Es gibt aber auch CPU's, die abhängig vom Befehl mehere Takte benoetigen
(hauptsaechlich Mikrocontroller) oder weniger (AMD 2000 hat nur 1.66 GHz).
Aber 1 CPU Takt gleich 1 Befehl ist ein guter Näherungswert.

Wenn Du aber auf einem PC Hardwarezugriffe machst (HW-Timer, Parallel-Port, ..),
kann dieser Befehl dann auch ca. 1 Mikro Sekunde dauern,
abhängig von der verwendeten HW.

Unter dem Betriebssystem Windows oder Linux sieht das natürlich ganz anders aus.
Diese Betribsysteme sind nämlich keine wirkliche Echtzeitbetriebsysteme,
Hier kannst Du keine Angaben zur Laufzeit von Funktionen machen,
weil jederzeit andere Programme oder das Betriebsystem die CPU beanspruchen können.
Wenn Du z.B. unter Windows Excel aufrufst, kann Dein Programm einige Sekunden
unterbrochen werden.

Wenn Du wirklich in Echtzeit programmieren willst,
benötigst Du unter Windows zusätzliche Echtzeiterweiterungen wie z.B. RTX von
VenturCom ( RTX ).

Gruß Bon

Dieser Post wurde am 11.07.2003 um 23:16 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.07.2003, 08:59 Uhr
Tommix



Hallo,
in der Professional Edition von VC ist ein Profiler dabei (siehe MSDN), der für solche Analysen gedacht ist. Allerdings recht komplex in der Bedienung.

Gruss, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.07.2003, 12:17 Uhr
Spacelord
Hoffnungsloser Fall



Zitat:
~Bon postete
Hi Michael

Wenn Du annimmst, dass bei jedem CPU Takt 1 Befehl ausgeführt wird,
und Du den Assemblercode kennst, kannst Du die Laufzeit annähernd bestimmen.
Bei einem 1 GHz PC dauert 1 Befehl dann 1 Nanno Sekunde.
Es gibt aber auch CPU's, die abhängig vom Befehl mehere Takte benoetigen
(hauptsaechlich Mikrocontroller) oder weniger (AMD 2000 hat nur 1.66 GHz).
Aber 1 CPU Takt gleich 1 Befehl ist ein guter Näherungswert.





1 Cpu Takt = 1 Befehl ??
Guter Näherungswert?
Wohl eher ein guter Witz.
Dann müsste:

mov al,10
mov bh,8
mul bh

genauso schnell sein wie:

mov ax,10
mov cl,3
shl ax,cl

Beides liefert das gleiche Ergebnis,aber die zweite Variante ist ca 40 mal schneller!!
Der div Befehl auf ein 32Bit Register benötigt ca. 150 Takte(1Takt=1ASM-Befehl=Top-Näherungswert )!!
Nene,du kannst dir ne Liste schnappen die die ungefähren Taktzahlen pro ASM-Befehl(für deine CPU) angibt und nachschauen was dein Compiler aus deinen Hochsprachenanweisungen gemacht hat.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.07.2003, 00:16 Uhr
~michael
Gast


@bon: ich möchte eine Anwendung schreiben die in sehr kleinen intervallen einen datenbestand prüft (liste) und bestimmte aktionen ausführt!
und nun geht es darum wie klein ich dieses intervall machen kann ohne das es den rechner zu sehr beansprucht da das prog im hitnergrund laufen soll!
@Spacelord: Weißt du wo ich so ne liste für nen AMD Duron 1GHz her bekomme?
win2k

Michael
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
13.07.2003, 12:52 Uhr
Spacelord
Hoffnungsloser Fall


Nee,keine Ahnung wo du sowas für die AMD Cpu's findest.
Was du dir da vorgenommen hast ist ohnehin sehr müssig!
Warum testest du nicht einfach,ab wann dein Hintergrundprozess die CPU übermässig belastet?
Grossartig optimieren kannst du ohnehin nichts(mit MFC).
Wenn du das trotzdem durchziehen willst rechne doch mit dem Durchschnittswert CPI.Dann hast du aber immer noch keine verlässliche Rechenbasis weil Schedulingstrategie und Prozesspriorität noch entscheidend mit in die Rechnung reinspielen(dein Prozess darf ja nicht rechnen wenn er möchte!).Genau genommen hat dein Prozess nur über die Priorität die möglichkeit mal "öfter" nach dem Rechten zu sehen.Wenn dein Prozess meint er müsste sagen wir mal 5 mal die Sekunde die Liste prüfen interessiert dass das OS recht wenig wenn dein Prozess nicht gerade an der Reihe ist zu rechnen.Ist der Code optimal schafft dein Prozess es vieleicht in seiner Rechenzeit 5 mal nachzuschauen ansonsten wartet er halt.Räumst du deinem Prozess eine sehr hohe Priorität ein kann er zwar öfter prüfen aber die "Arbeitsprozesse" bekommen zu wenig Rechenzeit um effizient zu arbeiten.
Generell ist es grundsätzlich besser einen Prozess über ein Event zu informieren als ständig selber danach zu schauen!!

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
14.07.2003, 13:36 Uhr
~michael
Gast


die aktionen sind zeitabhänig! Und da ist mir nur eingefallen einen Tmer aller paar millisekunden mal schauen zu lassen, ob was ansteht! Ob der User was eingbt ist zweitranig!

michael
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
14.07.2003, 14:34 Uhr
ao

(Operator)


Hallo Michael,

Spacelord schrieb schon:

Zitat:
Generell ist es grundsätzlich besser einen Prozess über ein Event zu informieren als ständig selber danach zu schauen!!


Das stimmt, deshalb solltest du dich mal in der MSDN-Hilfe informieren (MSDN-Library / Platform SDK / Base Services / DLLs, Processes and Threads). Besonders die Kapitel "Multitasking" und "Scheduling" dürfte dir einiges erklären darüber, was mit Windows (im User-Mode) möglich ist und was nicht.

Darüberhinaus gibts noch andere Strategien, z.B. Kernel-Mode-Treiber oder, wie Bon schon schrieb, eine RealTime-Extension. Das sind aber auf jeden Fall teure Lösungen (RT-Extensions kosten tatsächlich viele Euros, Kernel-Module sind kosten zumindest mehr Entwicklungszeit), so daß man da schon sorgfältig prüfen sollte.

Um genauere Tipps geben zu können, müßten wir glaub ich ein bißchen mehr wissen:

Was hast du denn eigentlich vor? Was ist das für ein Datenbestand? Warum ist das so zeitkritisch? Was ist die Strafe, wenn du die Zeit verpasst? Kannst du Geld ausgeben, um die Aufgabe zu lösen, oder muß alles "selbstgeschraubt" sein? Muß es eine Windows-Plattform sein, oder käme auch was anderes in Frage (z.B. Linux / RT-Linux)?

ao

Dieser Post wurde am 14.07.2003 um 14:46 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: