Bascom program méret és végrehajtási idő optimalizálása.

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Bascom program méret és végrehajtási idő optimalizálása.

Hozzászólás Szerző: kapu48 »

Bascom program méret és végrehajtási idő optimalizálása.
Két utasítás össze hasonlítása: B = B + 1 <> Incr B ?

Kód: Egész kijelölése

’Fordító: Bascom 1.11.9.0
$regfile = "M16def.dat"                                     ' we use the M16
$crystal = 16000000                                         '-es kvarcot alkalmazunk,
'$sim

Rem Változók deklarálása
Dim B As Byte
’Idáig az: Alap: 
Incr B
Decr B
Incr B
Decr B
Incr B
Decr B
Incr B
Decr B
Incr B
Decr B
End                                                         'end program
’Futásidő: Cycl: 6210., 0.388125ms.  Méret: *.bin: 244
2. Változat:

Kód: Egész kijelölése

$regfile = "M16def.dat"                                     ' we use the M16
$crystal = 16000000                                         '-es kvarcot alkalmazunk,
'$sim

Rem Változók deklarálása
Dim B As Byte
’Idáig az: Alap: 
B = B + 1
B = B - 1
B = B + 1
B = B - 1
B = B + 1
B = B - 1
B = B + 1
B = B - 1
B = B + 1
B = B - 1
End                                                         'end program
'Futásidő: Cycl: 6220, 0.38875ms. Méret *.bin: 244
Alap: Futásidő: Cycl: 6150, 0.384375ms. Méret *.bin: 144 bytes
Láthatóan a második megoldás 10 óra jelel és 0.0075ms hosszabb.
A memória foglalása viszont mindkettőnek egyforma.
A hozzászólást 2 alkalommal szerkesztették, utoljára kapu48 2009. március 23. hétfő, 21:06-kor.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Elágazások vizsgálata:
If Then, Select Case, On Gosub.

Kód: Egész kijelölése

$regfile = "M16def.dat"                                     ' we use the M16
$crystal = 16000000                                         '-es kvarcot alkalmazunk,
'$sim

Rem Változók deklarálása
Dim B As Byte

B = 10
’Idáig az: Alap: 
If B = 0 Then Incr B
If B = 1 Then Incr B
If B = 2 Then Incr B
If B = 3 Then Incr B
If B = 4 Then Incr B
If B = 5 Then Incr B
If B = 6 Then Incr B
If B = 7 Then Incr B
If B = 8 Then Incr B
If B = 9 Then Incr B
If B = 10 Then Incr B

End                                                         'end program
[b]' Futásidő: Cycl: 6235, 0.38896875ms. Méret *.bin: 392 bytes[/b]
2.:

Kód: Egész kijelölése

$regfile = "M16def.dat"                                     ' we use the M16
$crystal = 16000000                                         '-es kvarcot alkalmazunk,
'$sim

Rem Változók deklarálása
Dim B As Byte

B = 10
’Idáig az: Alap: 
Select Case B
   Case 0 : Incr B
   Case 1 : Incr B
   Case 2 : Incr B
   Case 3 : Incr B
   Case 4 : Incr B
   Case 5 : Incr B
   Case 6 : Incr B
   Case 7 : Incr B
   Case 8 : Incr B
   Case 9 : Incr B
   Case 10 : Incr B
End Select
End                                                         'end program
[b]' Futásidő: Cycl: 6215, 0.3884375ms. Méret *.bin: 392 bytes[/b]
3.:

Kód: Egész kijelölése

 $regfile = "M16def.dat"                                     ' we use the M16
$crystal = 16000000                                         '-es kvarcot alkalmazunk,
'$sim

Rem Változók deklarálása
Dim B As Byte

B = 10
’Idáig az: Alap: 
On B Gosub B0 , B1 , B2 , B3 , B4 , B5 , B6 , B7 , B8 , B9 , B10 , Check
End                                                         'end program
B0:
Incr B
Return
B1:
Incr B
Return
B2:
Incr B
Return
B3:
Incr B
Return
B4:
Incr B
Return
B5:
Incr B
Return
B6:
Incr B
Return
B7:
Incr B
Return
B8:
Incr B
Return
B9:
Incr B
Return
B10:
Incr B
Return
End                                                         'end program
[b]' Futásidő: Cycl: 6186, 0.386625ms. Méret *.bin: 364 bytes[/b]
A verseny eredménye:
0.: Alap: Futásidő: Cycl: 6153, 0.3845625ms. Méret *.bin: 150 bytes
1.: On Gosub: Futásidő: Cycl: 6186, 0.386625ms. Méret *.bin: 364 bytes
2.: Select Case: Futásidő: Cycl: 6215, 0.3884375ms. Méret *.bin: 392 bytes
3.: If Then: Futásidő: Cycl: 6235, 0.38896875ms. Méret *.bin: 392 bytes
A hozzászólást 4 alkalommal szerkesztették, utoljára kapu48 2009. március 23. hétfő, 21:07-kor.
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

Hozzászólás Szerző: szovhoz »

Futásidő: Cycl: 6210., 0.388125ms. Méret: *.bin: 244
Ezeket az adatokat hogyan számoltad ki?
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Az első 2 szimulátorban lefuttatót adat.
A 3.-at Bascom Programer írja ki.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

És az alap értékek minden utasítás nélkül.

Kód: Egész kijelölése

$regfile = "M16def.dat"                                     ' we use the M16
$crystal = 16000000                                         '-es kvarcot alkalmazunk,
$sim

Rem Változók deklarálása
Dim B As Byte

B = 10
'
End                                                         'end program
' Futásidő: Cycl: 6153, 0.3845625ms. Méret *.bin: 150 bytes
Ezek levonandók az előző adatokból.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Kimenetnek értékadás:

Kód: Egész kijelölése

'Kimenetnek értékadás
$regfile = "M16def.dat"                                     ' we use the M16
$crystal = 16000000                                         '-es kvarcot alkalmazunk,
'$sim

Config Pinb.2 = Output                                      'B.2 kimenet
'Idáig az: Alap:
'Alap: Futásidő: Cycl: 6152, 0.3845ms. Méret *.bin: 146 bytes
'(
'1.:
Portb.2 = 0                                                 '
Portb.2 = 1
Portb.2 = 0                                                 '
Portb.2 = 1
Portb.2 = 0                                                 '
Portb.2 = 1
Portb.2 = 0                                                 '
Portb.2 = 1
Portb.2 = 0                                                 '
Portb.2 = 1

End                                                         'end program
' Futásidő: Cycl: 6172, 0.38575ms. Méret *.bin: 166 bytes
')
'2.:
Reset Portb.2
Set Portb.2
Reset Portb.2
Set Portb.2
Reset Portb.2
Set Portb.2
Reset Portb.2
Set Portb.2
Reset Portb.2
Set Portb.2
'
End                                                         'end program
' Futásidő: Cycl: 6172, 0.38575ms. Méret *.bin: 166 bytes
Sajnos itt nem nyertünk semmit! :cry:
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

Hozzászólás Szerző: herc1234 »

bascom 1.1.9.3
1 program
cycl 6219:
0.3886875mS
2 program
cycl 6229:
0.3893125mS
1A program
cycl 6244:
0.39025mS
2A program
cycl 6224
0.389mS
3A program
cycl 6197
0.3873125 mS
Látszik hogy nem egyforma de szerintem ha bascom egyforma
lenne se lenne egyforma az eredmény.Ez egy qvázi adat.
Különben kár volt topicot nyitni.Ezt bárki a szimulátorban
megnézheti akit érdekel.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Igen ez egy változóadat, ami nagyban függ az órajeltől!
De nem ez lenne a lényeg! Hanem, hogy ha van 2 egyforma hatású utasítás csoport.
Vagy ha ugyanazt az eredményt többféleképen is ellehet érni, akkor vajon melyik a hatásosabb? Szerintem ezt nevezik optimalizálásnak!
Amit mindig érdemes elvégezni.
És a nálam nagyobb fejek is gyakorolják!

Ha ugyanazon feladatra ketten külön írunk 1-1 megoldást, biztosan nem lesz egyforma! Összehasonlítás után. Amelyik kisseb és gyorsabb az optimálisabb.
:D
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Súlyosbításnak az Optiize Code is ki lehet pipálva a Compiler fülön:)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Már csak ezért megérte! Legalább ezt is megkerestem.
Eddig nem is tudtam, hogy létezik!
Vajon mit tud?
:D
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

Hozzászólás Szerző: herc1234 »

jó ha van de jobb ha nincs...
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Néha pár 100 bytet segít összenyomni a programon. De az időzítéseket hanyattlökheti néha (nop üres utasítás kigyomlálása...)...
Azaz nem mindíg előnyös, és tesztelni kell, hogy tényleg jó marad-e a program!
Válasz küldése