Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Vlákno názorů k článku
Programujeme v jazyce Assembler v Linuxu: Úvod

Jiri Hnidek
Jiri Hnidek (neregistrovaný)
1. 7. 2004 10:35

MMX a SSE instrukce

Dobry den,
planujete nekdy v budoucnu zabrousit i do MMX a SSE instrukci. Spolehat se, ze gcc s volbami -march="..." a -mcpu="..." prelozi kriticke casti kodu skutecne optimalizovane je podle me trochu liche :-).

Michal Ludvig
Michal Ludvig (neregistrovaný)
1. 7. 2004 11:38

Re: MMX a SSE instrukce

Troufnu si tvrdit, ze GCC to umi lip nez to zvladnete rucne ;-) Nebo budete pocitat i s takovymi detaily, jestli je vyhodnejsi udelat "push %eax" nebo radeji "mov %eax, (%esp); sub %esp, 4"? GCC tohle vsechno vi a umi zohlednit.

Ale nechci se vas dotknout, mozna to skutecne GCC trumfnete :-)

Mikulas Patocka
Mikulas Patocka (neregistrovaný)
2. 7. 2004 3:33

Re: MMX a SSE instrukce

Gcc generuje ne uplne dobry kod. Typicky pripad, ktery gcc nezvladne zoptimalizovat je, kdyz mate ve funkci rychlou casto pouzivanou cestu, ktere staci k vykonani registry, ktere neni treba ukladat (eax, ecx, edx) a druhou pomalou malo pouzivanou cestu, ktera potrebuje spoustu mista na zasobniku a vsechny registry. Gcc da alokaci mista zasobniku a ukladani registru na zacatek funkce pred obe cesty, ne jen do te pomale, jak by to bylo lepsi.

Quake se zrychlil pry 2x, kdyz se prepsaly nejdulezitejsi funkce v assembleru.

Rucne schedulovat instrukce neni problem --- pro Pentium a Pentium 2 jsou ta pravidla jednoducha. Pro Pentium 4 trochu slozitejsi (a ne tak ucinna), ale ne o moc.

Clock
Clock (neregistrovaný)
2. 7. 2004 11:41

Re: MMX a SSE instrukce

Ja jsem zase psal smycku co prepocitava alfa kanaly pri generovani pismenek v Linksu.

Delilo se tam obrovske mnozstvi cisel (cele pole) 255. A protoze vstupni hodnota mohla byt max. 255*255=65025, tak se mi podarilo kod deleni vymyslet o takt rychleji, nez to dokaze GCC. GCC predpoklada, ze vstupni hodnota je az 65535, a tak generuje o takt pomalejsi kod, nez by mohlo.

Vzhledem k tomu, ze v jazyce C se neda nijak nadeklarovat short a rict, ze jeho maximalni hodnota bude 65025, nemuze GCC z principu generovat optimalni kod.

x0rph
x0rph (neregistrovaný)
1. 7. 2004 16:18

Re: MMX a SSE instrukce

Detaily pouziti MMX a SSE se celkem dost lisi procesor od procesoru, pokud vas tahle problematika zajima, stahnete si ze stranek Intelu a AMD dokumenty popisujici optimalizaci pro jejich procesory - aspon AMD tam ma spoustu prikladu, jak efektivne pocitat napr. 3d transformace, porovnani jak funguji ruzne implementace memcpy - rep movsb pocinaje a mmx+prefetch konce atd.

Martin Podhola
Martin Podhola (neregistrovaný)
1. 7. 2004 21:28

Re: MMX a SSE instrukce

To bohuzel ne, linie clanku se bude tykat pouze specifiky linuxu ne jeho super mega vlastnostmi ;), tech veci je tolik, proste by se to tam vsechno neveslo...

Zasílat nově přidané příspěvky e-mailem