Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Messen der Tackte von Anweisungen, usw. Kategorie: Programmierung Basic (von PeterS - 29.10.2010 9:42)
Als Antwort auf Messen der Tackte von Anweisungen, usw. von Ernst H. - 24.10.2010 19:15


Hallo Ernst,

Deine gemessenen Takte sind zu hoch, allerdings verbrauchen Bytecodes  Instruktionen
je nach Komplexität tatsächlich 30+ Taktzyklen. Das liegt an der Harvard Architektur
der Atmel Megas, die den Zugriff auf das Flash limitieren. Hat man im Zugriff auf das RAM
mehrere Adressmodi und kann indiziert über X,Y,Z zugreifen, so kennt der Flashzugriff
leider nur eine Zugriffsart. Deshalb braucht alleine der Fetch Bytecode, Lookup + Sprung
in die Bytecode Routine ca. 30 Taktzyklen.

Wenn ich dazu komme, werde ich noch ausführlicher vorstellen, was ein "Var++" oder "Var=Var+1"
an Bytecodes benötigt. Veröffentliche doch mal das komplette Programm, wo Du die Taktzyklen
miÃ?t.

Die neue Beta hat auch in der Geschwindigkeit Optimierungen, ich schätze das die Version ca.
5-10% schneller geworden ist.

Der Atmel AVR32 hat Spezialbefehle für den Table Einsprung, dort wird die Bytecodeabarbeitung
vorraussichtlich ca. 8x-10x schneller werden.

Gruss Peter

> Unten ein kurzes Programm zum messen von Laufzeiten - Anweisungen, Programmteile
> Verwendet wird der 16-Bit Timer 1
> Ergebnis: sehr enttäuschend!
> Var = Var + 1     (Byte) benötigt  291 Takte!!!
> ++Var                                       260 Takte !!!
>
> Sinus von einer single     etwa 3000   - ist ok, aber die einfachsten Anweisungen brauchen extrem
> lange.      Das increment einer Bytevariable immer noch 260 Tackte wofür ????
>
> Portausgabe eines Bytes  um die 400,  mit DirAcc_Write  direkt das Register beschreiben - denkste -
> dauert genauso lange.
> Entweder ich mache da einen ordentlichen Ã?berlegungsfehler (wird der Tackt intern geteilt?) oder das
> Basic ist wirklich so langsam - vorallem bei einfachsten Befehlen?
> Ã?brigens PortWriteByte soll wesentlich schneller sein als PortWriteBit -   etwa 400 zu etwa 550
> macht man das "Ausmaskieren" des Bits händisch so kommt man sicher auf wesentlich mehr, da
> jeder einfachste Befehl unsummen an Tackten friÃ?t.
>
> Dim Zeitfloat As Single
> Dim Timervar As Word
>
>
>     AbsDelay(2 )                          ' unbedingt notwendig!!!
>                                           ' nur mit 2ms Pause konstante
>                                           ' Werte sonst 30-64us
>    
>     Timer_T1Time(65000,1)                 ' Startpunkt der Messung mit 67,8ns
>    
>             'hier die Prüf - Anweisungen oder ganze Programmteile
>             'bis max 4,4ms
>    
>     Msg_Laufzeit1()                       ' Aufruf der Sub
>     */
> Sub Msg_Laufzeit1 ()                      ' Sub für Messung und Ausgabe
>     Timervar = Timer_T1GetCNT() - 455     ' Korr-Wert wenn kein Befehle
>     Msg_WriteText(" Nr1= ")
>     Msg_WriteWord(Timervar )              ' Takte 67,8ns ... 14,..MHz
>     Msg_WriteChar(32 )
>     Zeitfloat = Timervar * 0.0678         ' Wert in us
>     Msg_WriteFloat(Zeitfloat )
>     Msg_WriteChar(32 )
> End Sub
>
>
>
>
>
>
>
>  AbsDelay(2 )                          ' unbedingt notwendig!!!
>     Timer_T1Time(65000,5)                 ' Startpunkt der Messung mit 8,68usTakt
>     Msg_Laufzeit128T()                    ' Aufruf der Sub
>     */
> Sub Msg_Laufzeit128T ()                   ' nur mit 2ms Pause konstante Werte !!
>     Schleife = Schleife + 1 - 1           ' Zeitverbrauch damit wenige Takte abgezogen werden
>     Timervar = Timer_T1GetCNT() - 1       ' Korrektur -1
>     Msg_WriteText(" N128= ")              ' ******************bis zu 0,56sec  *********************************
>     Msg_WriteWord(Timervar )              ' 128 Takte 8,68us ...
>     Msg_WriteChar(32)
>     Zeitfloat = Timervar * 0.00868         ' Wert in ms!
>     Msg_WriteFloat(Zeitfloat )
>     Msg_WriteText("ms")
>     Msg_WriteChar(32)
>     'Msg_WriteChar(13)                     ' CR  Zeilenvorschub
> End Sub


    Antwort schreiben


Antworten:

Re: Messen der Tackte von Anweisungen, usw. (von Ernst H. - 29.10.2010 22:47)