mcekovic je napisao(la):
Zasto da ne moze, kompajler moze da ustanovi da je niz konstantan, kao i da su i sami elementi niza takodje konstantni (tj. da se u daljem toku programa ne menjaju) i da 'ladno prebaci ceo niz u konstantu i izbaci ga iz procedure/metoda, na isti nacin na koji to cini i programer. Kompajler moze da uradi sve sto ne menja konacni ishod programa.
monteboy je napisao(la):
Kompajleri se pisu prema nekom standardu. Taj standard kaze da lokalne promenljive moraju biti na lokalnom stack-u funkcije. Da ste obojca pogledali generisani asemblerski kod videli bi da je kompajler napravio niz konstanti u data sekciji, ali da je inicijalizacija lokalnog niza na stacku ostala jer tako mora da bude za slucaj da funkcija pozove drugu funkciju sa nekim od elemenata niza kao parametrom. Dakle, ne moze, ocigledno nemate pojma obojca, a ja gubim silno vreme pokusavajuci da vam objasnim neke osnove bez kojih se sve to ne moze ni razumeti ispravno.
monteboy je napisao(la):
Sta da ti kazem stvarno ti se divim ?
...
a sad od jedan put se pravis lud kao nisam ja zahtevao LOW LEVEL OPTIMIZACIJU.
Ja u ovom threadu nisam ni spomenuo low-level optimizaciju pa nisi trebao ni ti. Tamo gde sam je spominjao bilo je u potpuno drugom kontekstu koji nema smisla uvoditi ovde jer ja sam ovde o optimizaciji pricao uopsteno.
Cak i u raspravi o SuperPI-ju koju pominjes ja sam tvrdio samo da SuperPI
nije uopste optimizovan, a ne da nije optimizovan za Intel.
mcekovic je napisao(la):
Sve testove sto sam postavio sto su treci testirali dovodis u pitanje sa opravdanjem da nije code optimiran za Intel i da tu nesto nije u redu.
Prvo nisam sve testove doveo u pitanje, nego samo one gde je Intel u 64-bitnom modu sporiji nego u 32-bitnom sto nije logicno.
Drugo, naravno da nesto nije u redu sa testom kada u 32-bitnom modu Intel vodi 12% u odnosu na AMD, a u 64-bitnom on ima usporenje, a AMD ubrzanje od 25%.
mcekovic je napisao(la):
Shvati covece da sam pokusao na fini nacin da ti objasnim kako je stanje u realnom zivotu da se nema vremena ni para za detaljnu analizu i implementaciju Software resenja samo za pojedine procesore i optimiranje na istim.
Optimizacija treba da bude
deo razvojnog procesa softvera, a ne naknadna faza koja extra kosta, i oduzima nepotrebno vreme. I opet ti ponavljam, ne trazim posebne optimizacije ni za jedan procesor nego maksimalan zajednicki imenitelj za trenutno aktuelne procesore. Ako je to SSE2, onda neka bude SSE2, ako je to SSE onda neka bude SSE, bolje ista nego (kao sto je u vecini slucajeva) nista.
Ti namerno preskaces cinjenicu da npr. Lame encoder ima 3DNow optimizacije za FFT. Intel nema 3DNow!, ali zato AMD ima SSE i SSE2. Zasto se onda ne koristi npr. Gogo no-coda koji je baziran na Lame-u i ima SSE optimizacije, nego Lame za test kojim se redovno na netu i u svim testovima u casopisima dokazuje da je AMD brzi?
monteboy je napisao(la):
Sta mislis da Adobe ili neka slicna kompanija izbaci samo Software za P4 sa SSE3 instrukcijama ?
A bilo bi OK da je Adobe izbacio 64-bitnu verziju a da Intel nema podrsku za to? Bas licemerno. Uzgred, nema tu sta da se misli. Adobe ima optimizovan core za Photoshop i to u tri verzije:
FastCore.8BX
MMXCore.8BX
MultiProcessor Support.8BX
monteboy je napisao(la):
Sta je sa korisnicima koji nemaju jedan P4 nego koriste Celeron ili P3 na 500 MHz zar ti korisnici nemaju pravo isto se sluziti proizvodima firme Adobe ?
O cemu ti pricas covece? O socijalnoj pravdi? Pa Photoshop CS na primer kosta oko 1000 EUR!!! Ko je tolika budala da pljune tolike pare i da ga koristi na masini iz prosloga veka?!? Uostalon, neka oni koriste Photoshop 6, 5 ili 4 koji su nastli otprilike kad i ti procesori, ne zanima me. Necemo valjda svi sad zbog njih koji jadni nemaju para za nove masine (a imaju za Photoshop?) da koristimo spor softver?
monteboy je napisao(la):
P.S postoje kompajleri koji ce tvoj gore navedeni code itekako optimirati !
Ja sam proverio sa MSVC Toolkit 2003, i sa ICC 8.1 i nijedan ga nije optimizovao iz gore navedenih razloga. Slobodno reci koji su to drugi kompajleri koji bi to uradili.
monteboy je napisao(la):
Svaki donekle solidan programer ce izbjegavati goto naredbu mada postoje situacije gdje se sa njom mogu neke stvari elegantno rijeshiti.
Iz linux kernel kodnog stila:
Chapter 6: Centralized exiting of functions
Albeit deprecated by some people,
the equivalent of the goto statement is used frequently by compilers in form of the unconditional jump instruction.
The goto statement comes in handy when a function exits from multiple locations and some common work such as cleanup has to be done.
The rationale is:
- unconditional statements are easier to understand and follow
- nesting is reduced
- errors by not updating individual exit points when making
modifications are prevented
- saves the compiler work to optimize redundant code away
😉
monteboy je napisao(la):
to nas drug audiofan nije svjestan jer on misli da njegova uloga optimizatora na low level nivou postaje svaki dan dragocenija iako svake 18 mjeseci izlazi nova procesorska arhitektura koja je cak i za 50% jaca od predhodne
Bas pazljivo citas, vec drugi put mi pogresno pises ime :d
Ja sam odavno prevazisao low-level optimizaciju i radim je samo kada je apsolutno neophodna (npr. kada se trazi skoro real-time obrada). Umesto nje naucio sam da pisem kod koji kompajler lakse optimizuje i koji ne ide procesoru uz dlaku.
To sto pominjes "svakih 18 meseci nova arhitektura" -- nema tu nista novo. Sve je to stari i ne bas tako dobri x86. Mene vise zanima kako iskoristiti snagu grafickih procesora jer se oni ipak mnogo brze razvijaju nego obicni procesori. Primera radi NV40 (6800 Ultra) postize i do 40 GFLOPS-a dok najjaci desktop procesori iz oba tabora jedva dostizu 5-6 GFLOPS-a.