OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 28.03.2024, 20:27

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 179 ]  Přejít na stránku Předchozí  1 ... 7, 8, 9, 10, 11, 12  Další
Autor Zpráva
PříspěvekNapsal: 06.02.2015, 16:04 
Offline
Radil

Registrován: 08.10.2013, 18:00
Příspěvky: 296
Has thanked: 12 times
Been thanked: 228 times
Tak jsem separoval rutiny ládující obraz do mezi bufferu a z něj do DMA bufferu pro MZ700 textový režim použitý v IAP loaderu, tedy podstatnou část generování VGA obrazu (následuje už jen DMA přenos, na ten překladač nemá vliv, takže není nutně předmětem testu).

Program jsem upravil pro STM32F4 DICOVERY, ale z IO pinů se používají jen LED diody (v main.c), takže lze lehce upravit na libovolnou jinou desku s STM32F4x5 4x7 nebo 4x9 (je potřeba nastavit frekvenci krystalu v system_stm32f4xx.c pokud není 8MHz). LEDky jsou nastaveny takto: zelená svítí, modrá nesvítí, červená se rozsvítí na začátku každého generovaného dvojřádku, na konci zhasne, oranžová se na 50000 generovaných VGA řádku rozsvítí a dalších 50000 zhasne. Lze tak podle blikání oranžové ledky určit kolik % času MCU by generování zabralo = počet_sekund_měření*37,8/počet_bliknutí. Překlad jsem dělal jak v Keilu, tak v EmBlocks s nastavenou optimalizací -O2, v Keilu mi vychází rychlost generování za 27% času v EmBlocks za 43% času, tedy míň jak 2/3 rychlost vůči překladu z Keilu. Co s tím ?

Projekt pro obě prostředí v příloze, díky za pomoc.


Přílohy:
SPEEDtest.zip [210.71 KiB]
628 krát
Nahoru
 Profil  
 
PříspěvekNapsal: 07.02.2015, 07:48 
Offline
Kecálek

Registrován: 07.05.2014, 12:10
Příspěvky: 197
Bydliště: Jbc
Has thanked: 0 time
Been thanked: 39 times
Uzasne pripravene! Discovery tu mam, tak to snadno pujde i realne vyzkouset. V pondeli si v praci vygeneruju z Keila listing instrukci a pak zacnu porovnavat, co s tim dela GCC.


Nahoru
 Profil  
 
PříspěvekNapsal: 08.02.2015, 16:14 
Offline
Radil

Registrován: 14.10.2013, 23:12
Příspěvky: 342
Has thanked: 261 times
Been thanked: 25 times
ja bych se teda moc primlouval za atari (6502). jsem jediny?


Nahoru
 Profil  
 
PříspěvekNapsal: 09.02.2015, 11:02 
Offline
Kecálek

Registrován: 07.05.2014, 12:10
Příspěvky: 197
Bydliště: Jbc
Has thanked: 0 time
Been thanked: 39 times
Po prvnich testech ten rozdil nevypada az tak spatne. Keil ma 10 bliknuti za cca 7s, gcc s -O1 ma 10 bliknuti za cca 8s. Je tento rozdil akceptovatelny nebo mam zacit hledat nejake cesty zrychleni pro kod prelozeny v gcc?


Nahoru
 Profil  
 
PříspěvekNapsal: 09.02.2015, 20:37 
Offline
Radil

Registrován: 08.10.2013, 18:00
Příspěvky: 296
Has thanked: 12 times
Been thanked: 228 times
JohnBlbec píše:
ja bych se teda moc primlouval za atari (6502). jsem jediny?
Má to dva háčky, prvním je natvrdo v HW nastavená 16-ti barevná CGA paleta a pak to horší, kdo to napíše ? :shrug: Já do Atari bohužel vůbec nevidím.

hynek píše:
Po prvnich testech ten rozdil nevypada az tak spatne. Keil ma 10 bliknuti za cca 7s, gcc s -O1 ma 10 bliknuti za cca 8s. Je tento rozdil akceptovatelny nebo mam zacit hledat nejake cesty zrychleni pro kod prelozeny v gcc?
No tak to mi škeble nebere, překlad s -O1 je asi o 35% rychlejší než s -O2 nebo -O3 ?!? :shock: Kdybych si to teď neověřil, tak tomu neuvěřím, to by mě ani nenapadlo zkoušet. :bang:
Pořád to není ideál, na finální překlad nic moc, ale vyvíjet by se s tím už asi dalo, každopádně díky :jump:


Nahoru
 Profil  
 
PříspěvekNapsal: 09.02.2015, 21:14 
Offline
Profík

Registrován: 27.07.2013, 13:24
Příspěvky: 903
Has thanked: 25 times
Been thanked: 125 times
8bit atari má paletu 256 barev takže by se musel upravit HW a taky je to poměrně složitý stroj s několika koprocesory, co se musí precizně synchronizovat, aby z toho něco lezlo. Nečekám, že by se do toho někomu chtělo.

_________________
Atari 600XL, 800XL/XE, 130XE, ST, STE, MegaST, 7800, JaguarCD, Commodore C64, Amiga 500/Plus, 1200, CDTV, Sinclair QL + GC, Sharp MZ800, Sord M5, CPC 6128, Spectravideo SVI X'Press, Sony HB-750, Philips CDi 370, Ohio Scientific Challenger, Eureka.


Nahoru
 Profil  
 
PříspěvekNapsal: 09.02.2015, 21:49 
No na PCdle Ti treba 1GHz na Altirru. ARM by si musel mat core duo. Ako nehovorim ze by som nechcel hned by som bral. Ale aby hry boli plynule...


Nahoru
  
 
PříspěvekNapsal: 09.02.2015, 22:00 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 13.05.2013, 10:52
Příspěvky: 1669
Bydliště: Mliecna draha
Has thanked: 19 times
Been thanked: 124 times
Matej píše:
No na PCdle Ti treba 1GHz na Altirru. ARM by si musel mat core duo. Ako nehovorim ze by som nechcel hned by som bral. Ale aby hry boli plynule...


blbost. Na arme predsa nemusi mat OS ktory mu bude zrat 4/5 vykonu.

_________________
Amiga 600 + a602, Amiga 600 PCB only, Commodore 64+ZZ-RAM V1.0 512k+C1541(18k RAM)+sd2iec +9.600 Rs232, Commodore 116 + 64k upgrade, ZX 81 ISSUE1 + ZX81XRAM

http://zz-indigo.mavipet.sk/


Nahoru
 Profil  
 
PříspěvekNapsal: 10.02.2015, 07:51 
Offline
Kecálek

Registrován: 07.05.2014, 12:10
Příspěvky: 197
Bydliště: Jbc
Has thanked: 0 time
Been thanked: 39 times
Do rana me jeste napadlo par veci, kterak upravit zdrojak, aby se dal lepe prelozit. Vysledek je okomentovan nize.

Neni mi uplne jasne, proc jsou dve funkce pro pripravu dat pal_line a pal_buf0_buf1. Neslo by je napsat dohromady? Zase by se o neco zmensila rezie...

Dalsi poznamka se tyka verze GCC: 4.8.3 na windows generovala o kousicek delsi kod nez 4.8.2 na linuxu.
Aby vzniknul kod, ktery bude vzdy dostatecne rychly, musel by se napsat rovnou v (inline) assembleru. Mohl bych neco pripravit, ale nemam si jak overit, ze bude fungovat spravne... Protoze se tu snazime dosahnout zkraceni bloku cca 20 instrukci o 2 instrukce. To uz se IMHO na optimalizacich prekladace neda nechat. Vzdy je nebezpeci, ze s jinou (novejsi) verzi prekladace to prestane byt funkcni - ze se to zpomali neunosne.

Doplneni:
Prikladam upravenou verzi pal.c. Funguje zhruba stejne rychle jako verze z Keilu.
Zatim jsem upravil funkci pal_line, aby preklad vysel lepe. Dale jsem prepsal pal_buf0_buf1 do assembleru.
Urcite by se dalo dosahnout dalsiho zrychleni prepsanim i dalsich casti do assembleru, ale v tuto chvili mi to neprijde nutne.
Asi bude nutne pridat podminky pro preklad pomoci GCC nebo Keil - pro Keil bych nechal puvodni C-ckovy kod (mj. jako komentar pro assembler :-)
Upozorneni: kod jsem zkousel pouze na rychlost, nikoli na spravnost funkce - nemam to jak overit, ze to generuje data spravne...


Přílohy:
pal.zip [1.94 KiB]
607 krát
Nahoru
 Profil  
 
PříspěvekNapsal: 10.02.2015, 10:43 
Offline
Radil

Registrován: 08.10.2013, 18:00
Příspěvky: 296
Has thanked: 12 times
Been thanked: 228 times
hynek píše:
Do rana me jeste napadlo par veci, kterak upravit zdrojak, aby se dal lepe prelozit. Vysledek je okomentovan nize.

Neni mi uplne jasne, proc jsou dve funkce pro pripravu dat pal_line a pal_buf0_buf1. Neslo by je napsat dohromady? Zase by se o neco zmensila rezie...
Ono to v tomhle případě zbytečné je, ale v emulátoru první část generuje emulace 8bitu, která jede svojí řádkovou rychlostí (třeba 312řádků/50Hz) a láduje výsledek v úporném formátu do mezipaměti (ta pak obsahuje všechny řádky) a generování VGA obrazu dělá tu druhou půlku algoritmu, láduje to z mezibufferu do DMA bufferu VGA řádku (628řádků/60Hz), na buffer pro stránku přímo ve formátu VGA není dost místa v RAM.

hynek píše:
Dalsi poznamka se tyka verze GCC: 4.8.3 na windows generovala o kousicek delsi kod nez 4.8.2 na linuxu.
Aby vzniknul kod, ktery bude vzdy dostatecne rychly, musel by se napsat rovnou v (inline) assembleru. Mohl bych neco pripravit, ale nemam si jak overit, ze bude fungovat spravne... Protoze se tu snazime dosahnout zkraceni bloku cca 20 instrukci o 2 instrukce. To uz se IMHO na optimalizacich prekladace neda nechat. Vzdy je nebezpeci, ze s jinou (novejsi) verzi prekladace to prestane byt funkcni - ze se to zpomali neunosne.
To je jasné, daní za zdroják ve vyšším jazyku je tohle riziko. Už jsem zkoušel pár věcí do asm přepsat a měl jsem vždycky potíže udělat to aspoň tak rychlé, jako to dělá Keil.

hynek píše:
Doplneni:
Prikladam upravenou verzi pal.c. Funguje zhruba stejne rychle jako verze z Keilu.
Zatim jsem upravil funkci pal_line, aby preklad vysel lepe. Dale jsem prepsal pal_buf0_buf1 do assembleru.
Urcite by se dalo dosahnout dalsiho zrychleni prepsanim i dalsich casti do assembleru, ale v tuto chvili mi to neprijde nutne.
Asi bude nutne pridat podminky pro preklad pomoci GCC nebo Keil - pro Keil bych nechal puvodni C-ckovy kod (mj. jako komentar pro assembler :-)
Upozorneni: kod jsem zkousel pouze na rychlost, nikoli na spravnost funkce - nemam to jak overit, ze to generuje data spravne...
Díky, juknu na to, připravím nějakou verzi s funkčním výstupem na VGA (k discovery bude stačit jen přidat dsub 15pin konektor), ať se to lehce kontroluje.


Nahoru
 Profil  
 
PříspěvekNapsal: 10.02.2015, 13:18 
Offline
Radil

Registrován: 14.10.2013, 23:12
Příspěvky: 342
Has thanked: 261 times
Been thanked: 25 times
predpokladam, ze kompilator je dostatecne chytry, aby si vsechno inkrementovani i++ ve for cyklech prevedl na ++i. pokud ne, asi bych to zmenil a neco malo cyklu usetril.


Nahoru
 Profil  
 
PříspěvekNapsal: 17.02.2015, 18:30 
Offline
Radil

Registrován: 24.12.2014, 16:11
Příspěvky: 424
Has thanked: 31 times
Been thanked: 100 times
Je nějakej použitelnej disassembler pro ARM?


Nahoru
 Profil  
 
PříspěvekNapsal: 17.02.2015, 20:55 
Offline
Kecálek

Registrován: 21.12.2013, 13:09
Příspěvky: 96
Has thanked: 3 times
Been thanked: 40 times
Co treba IDA-Pro? https://www.hex-rays.com/products/ida/processors.shtml


Nahoru
 Profil  
 
PříspěvekNapsal: 07.03.2015, 23:32 
Offline
Radil

Registrován: 24.12.2014, 16:11
Příspěvky: 424
Has thanked: 31 times
Been thanked: 100 times
Kde najdu doporučený startup kód pro STM32F105RBT6?


Nahoru
 Profil  
 
PříspěvekNapsal: 08.03.2015, 11:56 
Offline
Kecálek

Registrován: 21.12.2013, 13:09
Příspěvky: 96
Has thanked: 3 times
Been thanked: 40 times
Na hloupou otázku hloupá odpověď - na internetu přece.... A teď vážně. Nevím, co od startupu očekáváš, ale hodně záleží na prostředí/překladači, se kterým to chceš použít. Jiný startup má keil, jiný startup má gcc a trochu jiný startup má i CrossWorks, který má pod kapotou také GCC. Odlišnosti ve startupech jdou ruku v ruce s odlišnostmi v linker skriptech (pojmenování segmentů a jejich začátků a konců) atd...


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 179 ]  Přejít na stránku Předchozí  1 ... 7, 8, 9, 10, 11, 12  Další

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 15 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz