Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Sta znaci ubrzati ili optimizirati program?

[es] :: C/C++ programiranje :: Sta znaci ubrzati ili optimizirati program?

[ Pregleda: 3603 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

virtualVoid

Član broj: 161084
Poruke: 698



+28 Profil

icon Sta znaci ubrzati ili optimizirati program?02.01.2008. u 11:57 - pre 198 meseci
Naravno, generalno govoreci znam sto to znaci. Ali mozete li mi navesti neke konkretne primjere koje koriste c++ programeri u cilju ubrzanja programa?

Npr. je li jedan nacin ubrzavanja programa i smanjenja velicine tako sto koristimo referencu na klasu kao povratnu vrijednost (da izbjegnemo konstruktor kopije)?
...
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Sta znaci ubrzati ili optimizirati program?02.01.2008. u 14:17 - pre 198 meseci
Citat:

Npr. je li jedan nacin ubrzavanja programa i smanjenja velicine [...]

Kada se govori o optimizaciji, uglavnom se misli na optimizaciju u smislu povecanja brzine uzvrsavanja programa. Ipak, manji kod cesto ne znaci i vecu brzinu.

Na primer pogledaj ovde, ima nešto materijala za razmišljanje:
http://gnufans.org/jocke/progr...k.com/mikey/optimization.shtml

O optimizaciji se uglavnom razmišlja kada su u pitanju neke vremenski kritične operacije, najčešće u složenim petljama gde je potrebno ubrzati neki proces. U drugim slučajevima to je obično beznačajno.

C/C++ jezici imaju mnoge mehanizme za optimizaciju koda u samom jeziku, počevši od upotrebe pointera, referenci i inline pa preko static i ostalih svari gde je potrebno poznavati semantiku sistema.
 
Odgovor na temu

virtualVoid

Član broj: 161084
Poruke: 698



+28 Profil

icon Re: Sta znaci ubrzati ili optimizirati program?02.01.2008. u 15:36 - pre 198 meseci
Znaci optimizacija=ubrzanje ?

ps. pod smanjenjem nisam mislio na smanjenje linija koda, nego smanjenje velicine fajla na disku. nisam se dobro izjasnio.
...
 
Odgovor na temu

Sephiroth?
Balkan @ net

Član broj: 79406
Poruke: 82
*.bi2.dlp121.bih.net.ba.



Profil

icon Re: Sta znaci ubrzati ili optimizirati program?02.01.2008. u 16:17 - pre 198 meseci
Pa, optimizacija znaci ... optimizacija. Vecinom, rijec je o brzini programa. Brzina na koju se misli je "koliko brzo" program izvrsava svoje glavne zadatke. Za velicinu .exe (ako na to mislis) ne vjerujem da je direktno pvezana sa brzinom, iako naravno ima velik uticaj, jer se ipak mora ucitati u RAM i ostalo, ali na tu temu nek netko kompetentniji odgovori. Sto se tice same brzine, ona zavisi od algoritama primjenjenih u programu, kao i struktura podataka koji se koriste. Ovaj dio price mislim da znas... Sto se tice samog C++, tehnika postoji mnogo, zato i jeste jedan od najbrzih programa u pravim rukama. Mnoge tehnike programiranja (kao virtuelne funkcije, polimorfizam itd...) su mnogo "ubrzane" i optimizovane u samim sistemima danas, tako da veliki dio performasi koji otpada na sistemske pozive sada je smanjen znacajno. Ne bih se zelio upustati u raspravu koji su najsporiji dijelovi jezika, jer jos nisam dovoljno iskusan, ali ti mogu odgovoriti na pitanje vezano za prenosenje po referencama. U samome svome pitanju si i postavio pitanje i skoro dao potpun odgovor. Dodatni razlog je sto se i ne trosi vrijeme na spremenje neke tamo dodatne kopije objekta u memoriji. Sto se tice svih tehnika oko pointera (i referenci) dobitak na brzini je ogroman...

Ipak, sto se tice samog pojma optizacije u danasnjim programima, na to se puno manje poklanja paznje nego nekada (ovdje mislim na "normalno" programiranje). Naravno, jos uvijek je jako vidljiva razlika izmedju 2 programa koji rade istu namjenu ali je jedan losije uradjen a drugi bolje. Stvar je u tome, ako se optimizuje onaj glavni dio programa, ostatak je u 99% slucajeva beznacajan. Ovdje mislim na to da li bi trebao primjenjivati tehnike koju su ti mozda upitne za brzinu, kao polimorfizam, nasljedjivanje, sam OOP pristup, velicine prostih varijabli, pa sve do exception handlinga. Kod optimizacije glavnog dijela programa, evo jednog primjera: kada bi radio neku bazu podataka, ogroman uticaj na performanse bi ti imalo koju bi strukturu podataka koristio... Mozda binarno stablo, vezana lista, B-tree? Kada bi primjenio odgovarajucu strukturu, sa odgovarajucim algoritmima, tu bi ti bilo 90% brzine programa. Ostale stvari vezane za samo sucelje, znaci, koliko je brzo "da korisnik klikne i da taj klik dodje do programa" je nevazno danas (vecinom). Pri ovom primjeru ti NAGLASAVAM da je samo neki teoretski primjer u nedostatku maste za boljim. Sistemi se sve vise danas razvijaju. Brzina procesora povecava, izdaju se sve noviji framework-i koji micu sve veci dio posla sa ruku programera i olaksavaju mu da se koncentrise na zadatak koji zeli da uradi. Ja smatram da je od ogromnog znacaja da se nauce ove neke sitnice u detalje, da bi se kasnije mogle i makroskopski primjeniti na cijeli program, nevazno u kojem se programskom jeziku radilo. Ljudi najvise grijese kada pricaju gluposti tipa: pointeri u glupost, Java je bolje jer nema pointera (a sami ne znaju niti zasto ih nema) itd. Ja nisam netko ko kaze da se treba uciti od asemblera pa nadalje, ali je definitivno korisno u buducnosti da se ima mozak naviknut na memory managment, pointere itd. Malo offtopic, znam, ali smatram da je u duhu teme korisno... Pozdrav!
 
Odgovor na temu

virtualVoid

Član broj: 161084
Poruke: 698



+28 Profil

icon Re: Sta znaci ubrzati ili optimizirati program?03.01.2008. u 09:48 - pre 198 meseci
Hvala Sephirot na iscrpnom odgovoru koji je samo potvrdio moje sumnje (smatrao sam da je brzina u koristenju referenci i pokazivaca). Dalje, C++ ima jednu finu stvarcicu (barem u teoriji) a to su polja bitova. Npr.
Code:
unsigned short nekiBinarni:1;
Ovdje eksplicitno kazem da mi varijabla nekiBinarni zauzima 1 bit i da moze primiti vrijednost 1 ili 0. Koliko se ovo koristi u praksi ili je danasnji RAM toliko velik da se uopce nema potrebe peglati sa ovakvim stvarima? Prosto me zanima je li rad sa bitovima (tj. briga programera oko ove problematike) stvar proslosti ili je dobra stvar naviknuti se na ovakav pristup radu?

Ili na kraju sve ovo pada u vodu i jedini put do dobrog i brzog programa je u odabiru (ili izradi) pravog algoritma?
...
 
Odgovor na temu

Sephiroth?
Balkan @ net

Član broj: 79406
Poruke: 82
*.bi2.dlp400.bih.net.ba.



Profil

icon Re: Sta znaci ubrzati ili optimizirati program?03.01.2008. u 19:13 - pre 198 meseci
Sve zavisi od namjene programa... Ako radis program za ministarstvo odbrane, da. Ako radis neki driver, da. Ako radis neku obicnu aplikaciju za Mehinu apoteku, ne. Sve ti je do namjene programa, kao u kojem polju programiranja se mislis afirmirati. Fino je znati sto vise tehnika programiranja, vjeruj mi, ali postoji i faktor vremena koji treba uloziti za ucenje necega, kao i faktor volje. Dublji odgovor u vezi sa poljima bitova ti ne bih znao dati, ali znam jedno: sto god imas volje i viska vremena da naucis, jednog dana ce ti dobro doci...

Citat:

Ili na kraju sve ovo pada u vodu i jedini put do dobrog i brzog programa je u odabiru (ili izradi) pravog algoritma?


Ovo isto ne mora biti UVIJEK najtacnije. Pravila glavnog nema. Iznimke uvijek postoje. Ako smatras programiranje kao programiranje vecinom aplikativnog (normalnog) software-a, onda je odgovor da. Sto se tice samog C++-a, on ti vise nije najsretnji odabir za programiranje ovakvih programa, ali PREPORUCUJEM detaljno upoznavanje sa ovako mocnim jezikom, 98% koncepta i tehnika programiranja ti nece biti problem kasnije u vecini jezika...
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.bethere.co.uk.



+4 Profil

icon Re: Sta znaci ubrzati ili optimizirati program?04.01.2008. u 01:02 - pre 198 meseci
Citat:
Ovdje eksplicitno kazem da mi varijabla nekiBinarni zauzima 1 bit i da moze primiti vrijednost 1 ili 0. Koliko se ovo koristi u praksi ili je danasnji RAM toliko velik da se uopce nema potrebe peglati sa ovakvim stvarima? Prosto me zanima je li rad sa bitovima (tj. briga programera oko ove problematike) stvar proslosti ili je dobra stvar naviknuti se na ovakav pristup radu?


Ako vec kazhesh da je "danashnji RAM toliko veliki..." onda tvoj primer spada u "premature optimisation". Takve low-level stvari apsolutno ne treba da te brinu. Bitno je odabrati prave alate, korektan pristup, optimalne algoritme; low-level optimizacija ti je nebitna.
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12851



+4784 Profil

icon Re: Sta znaci ubrzati ili optimizirati program?04.01.2008. u 01:37 - pre 198 meseci
Citat:
virtualVoid: Dalje, C++ ima jednu finu stvarcicu (barem u teoriji) a to su polja bitova. Npr.
Code:
unsigned short nekiBinarni:1;
Ovdje eksplicitno kazem da mi varijabla nekiBinarni zauzima 1 bit i da moze primiti vrijednost 1 ili 0. Koliko se ovo koristi u praksi ili je danasnji RAM toliko velik da se uopce nema potrebe peglati sa ovakvim stvarima? Prosto me zanima je li rad sa bitovima (tj. briga programera oko ove problematike) stvar proslosti ili je dobra stvar naviknuti se na ovakav pristup radu?

Ovde ces dobiti na ustedi memorije, ali gubis na brzini izvrsavanja. Zapravo, brze se izvrsavaju npr. operacije nad celim brojevima koji zauzimaju 32* bita nego 8 jer procesor svakako obracjuje 32-bitne brojeve a onda se dalje vrsi "prekrajanje". Mozda je u poslednje vreme uradjeno nesto po ovom pitanju, ali ne bih rekao, u svakom slucaju, ako jeste, nije mi poznato :)


*Na 32bitnoj arhitekturi.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Sta znaci ubrzati ili optimizirati program?

[ Pregleda: 3603 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.