Šta je novo?

Kako optimizovati ovo (malo nizeva)?

alfaunits

Znamenit
Učlanjen(a)
24.06.2006
Poruke
45,227
Poena
1,385
Da li (bilo kako) moze da se optimizuje sledeci kod, osim vektorizacijom (sto bi Intel C/C++ compiler uradio):
for(i = 0; i < ARRSIZE; i++)
C = A ^ B;
ARCSIZE je min 16K, a max 16M (zavisi od slucaja do slucaja).
Vektorizacija je ubrzala na C2D cak 4 puta kod.
Ne izgleda preterano potreban kod, ali u slucaju da moze dovoljno da se optimizuje, i da u kombinaciji sa drugim pozivima da dobre rezultate, nameravam da uradim AoE i md RAID port na Windows ^^
 
Poslednja izmena:
aj probaj rekurzijom, bas me zanima.
Kod:
void fja (int arcsize) {
     C[arcsize] = A[arcsize] ^ B[arcsize];
     if (arcsize==0); else fja(arcisize-1);
    }
.
.
.
.
fja(arcsize-1);
 
Izvinjavam se ako lupam, ali kako primena rekurzije može da optimizuje bilo šta? :)
 
primena rekurzije moze da ubrza samo ako se rekurzija implementira preko while petlje i nikako drugacije

mozes tako sto ce svako jezgro da racuna svoj deo (pogledaj openmp za to )
takodje mozes tako sto ces da koristis block prefetch tehniku za sto brzi rad sa memorijom
za velike kolicine tipa 16MB....
 
ma ja nemam pojma, samo me zanima cemu uopste te rekurzije. pa reko mozda su brze, otkud znam... :)
 
Rekurzija je u 90% slucajeva dosta laksa za napraviti, ali je (skoro?) uvek sporija (zbog troska ponovnog pozivanja funkcije). Njena prednost je dakle u olaksavanju programiranja, jer u 99% slucajeva brzina nije kriticna. Zbog toga su u poslednje vreme popularni neki spori jezici (jel neko rekao Java?).
 
Kako se radi block prefetch?
Multithreading ce mozda biti koriscen, ali mislim da je drugi deo ideje (AoE/mdRAID) spor pa ne bi bilo koristi od toga.
 
Vrh Dno