Libi se mi myslenka, ze o vsechno se ma starat prekladac. Je to logicke. Program se preklada jednou (kdyz pomineme ladeni), ale bezi milionkrat. Proc by mel drahy hardware znovu a znovu detekovat kolizi, kdyz to mohl jednou pro vzdy zaridit prekladac?
Ovsem platime za to malou hustotou binarniho kodu, radove polovina pameti bude pravdepodobne vyplnena nopama. Program s firmwarem bude pravdepodobne v pameti primo na chipu, protoze mit 256 nozicek jenom pro databus by bylo silene.
Ale myslenka je to zajimava.
V polovine osmdesatych letech jsem si hral se zarizenim, ktere z meho tehdejsiho pohledu bylo VLIW - byl to 16bitovy "Inteligentni terminal" od Metry Blansko (jestli si dobre vzpominam). Processor mel delany z rezu rady AM3000 (MHB3000). Struktura instrukci ovsem trochu pripominala VLIW - nektere instrukce mely rezervovane bity pro barrel shifter.
Melo to 16KiB ferritove pameti, ale interpretr basicu se do ni nevesel, posledni kilo se muselo dotahnout z magneticke karty a ulozit do ramky :-)
To byly casy :-). Programoval jsem to v assembleru. Nic jineho na tom spolehlive nefungovalo.
A display to melo CRT, ale nebyl radkovany klasicky. Pprsek vykresloval jeden znak po druhem v matici radove 5x7 stylem cik-cak, pak presel na dalsi znak a zase cik-cak vykreslil tech jeho 7 radku. Kdyz se zvysil jas na max, bylo to krasne videt. Logika rizeni paprsku musela byt srovnatelna s celym rezovym processorem :-)
Ten terminal musel bejt uzasnej! Original od MHB3000 je Intel, ne AMD (to bylo Am29000 tusim). Ty brouky me zajimaly, ale nikdy jsem z nich nic nepostavil pro prilisne diletantstvi. Tesil jsem se, ze si udelam nejak silene moc-bitovej procak a budu s tim ohromovat, dokonce jsem si kvuli tomu poridil i zdroj ZPA 5V/50A.
Program s firmwarem bude pravdepodobne v pameti primo na chipu, protoze mit 256 nozicek jenom pro databus by bylo silene.
Pokud jde o situaci dnes, digitalni I/O na jednom paru by melo umet 6Gb/s, tj. 3Gb/s na jednu nohu. Pokud by ALU jely taky na dabelskejch 3GHz, pak je to vskutku 1:1 bit:noha. Otazkou je, jaky jsou realny meze, ale pokud by ALU pracovaly plne v kolone ;-) a I/O bylo digitalni (tj. bez A/D D/A prevodu), pak by asi opravdu vychazelo, ze se rychlejsi I/O nemuze podarit.
Nicmene spise se obavam nutnosti cachi kodu a jejich plejtvani tema VLIW-nopama. Na druhou stranu, pro ulohy, kde je kod malej a jde o masivni mnozstvi dat (a takovejch uloh je dost a jsou dulezity), by to nemuselo tolik vadit.
Dale pak, v duchu modernich trendu optimalizaci asmu v CPU, by asi nebyl problem ten VLIW behem nacitani z dynamicke pameti po kouskach "ungzipovat" do nejaky "jeste tesnejsi cache". (Mam dojem, ze jsem o dekompresi instrukci na cipu nekde slysel, ale nemuzu si vzpomenout, co to bylo za architekturu.)
"Libi se mi myslenka, ze o vsechno se ma starat prekladac. Je to logicke"
ano je to logicke, ale jeste pred nastupem ARMu a tak byla situace jina - program se kdysi prelozil nejakym velmi primitivnim prekladacem (pamatuje nekdo jednopruchodovy Pascal?) a potom to klidne 20 let bezelo na CPU, ktere s tim puvodnim melo spolecnou jen instrukcni sadu. Navic asi nikdo neresil, jak moc je ten program napsan prenositelne, sam mam zkusenosti s tim, ze u par zdrojaku (v praci) bylo jasne napsano "pouzij presne tento prekladac, hlavne nemen ZADNE konfiguracni volby a uz vubec ne volby pro optimalizace, nepojede to". Dnes jsme - podle me diky ARMu jakozto alternative k x86 - uz o dost dal, doufam.
"Ovsem platime za to malou hustotou binarniho kodu, radove polovina pameti bude pravdepodobne vyplnena nopama."
obecně je to skutečně problém (na desktopové aplikace a tak), ale pro klasické DSP algoritmy (FFT, DFT, konvoluce, korelace) existovaly ručně optimalizované knihovny a i ten překladač od TI nebyl úplně marnej.
Já se o tom zmíním podrobněji příště (v tomto článku to byla jen jedna věta), ale tyto DSP měly pro každou instrukci ve VLIW p-bit, kterým se říkalo, jestli se má spustit paralelně nebo jestli se má počkat (pořád se ale ušetří minimálně fáze instruction fetch+instruction decode), takže instrukce bylo možné ukládat do VLIW i ve chvíli, kdy se serializovaly, aspoň do určité míry. Navíc například naše DSP algoritmy (image processing, psané v C, ne v asm) se v pohodě vlezly do pár kB, takže ROM pro instrukce nebyl zásadní problém.