Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

Pitanje o makronaredbama
WWW:

Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
Gost






PostPostano: 23:09 ned, 23. 1. 2005    Naslov: Pitanje o makronaredbama Citirajte i odgovorite

Moze li mi netko odgovoriti na koji nacin makro naredbe ubrzavaju provodjenje programa! Hvala
Moze li mi netko odgovoriti na koji nacin makro naredbe ubrzavaju provodjenje programa! Hvala


[Vrh]
ahri
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 19. 11. 2003. (23:16:07)
Postovi: (193)16
Sarma = la pohva - posuda
= 7 - 0

PostPostano: 0:06 pon, 24. 1. 2005    Naslov: Citirajte i odgovorite

umjesto da za nesto napises funkciju, napises makro.

i onda se na tom mjestu u kodu taj poziv zamjeni s onim sto pise u makru prije prevodjenja.

npr.
[code:1]
#define pluspet(x) ((x)+5)

...

y=pluspet(2);

...
[/code:1]

ovaj kod se ekspandira u:

[code:1]

...

y=(2)+5;

...
[/code:1]

a "bolje" je jer se ne poziva funkcija posebna za taj izracun... jer pozivanje funkcije trosi nesto procesorskog vremena. kada pozoves funkciju onda se u memoriji zapise gdje si bio u programu, onda se procesor prebaci na neki drugi dio memorije gdje je ta funkcija, proslijedi parametar, izracuna vrijednost funkcije, proslijedi ga putem stoga i vrati se gdje je bio.
na ovaj nacin se samo nastavi izvrsavati kod. to je isplativo kada se neka jednostavna funkcija vise puta izvodi.


no, makronaredbe mogu biti i pogubne, sporije!
npr:

[code:1]

#define max(a,b) (((a)>(b))?(a):(b))

...

y=max(2,3);

...
[/code:1]

ovdje je makro nesto slozeniji, i u ovom primjeru ima smisla koristiti ga.
no, u sljedecem:

[code:1]

#define max(a,b) (((a)>(b))?(a):(b))

...

y=max(mojagadnafunkcija(2),mojadrugagadnafunkcija(3));

...
[/code:1]

ce se ekspandirati u nesto posve divlje, gdje ce u svakom slucaju morati barem jednu od te dvije funkcije pozvati dvaput - prvi put kod uvjeta za max, drugi puta kada ce vracati vrijednost. u slucaju da je ta funkcija prilicno spora i mukotrpna, potrosili smo uludo duplo vremena, pa bi nam bilo bolje napraviti funkciju max koja ce primati argumente koji se prethodno izracunaju i vratiti veci od njih... tada ce se nasa velika funkcija samo jednom racunati sto je bolje.

sve u svemu, bolje je korstiti makro za neke jednostavnije racunice koje se vise puta pozivaju, a u svim ostalim slucajevima, just to be sure, koristiti funkcije.


nadam se da sam bio jasan, ako nesto nije jasno, pitaj.
umjesto da za nesto napises funkciju, napises makro.

i onda se na tom mjestu u kodu taj poziv zamjeni s onim sto pise u makru prije prevodjenja.

npr.
Kod:

#define pluspet(x) ((x)+5)

...

y=pluspet(2);

...


ovaj kod se ekspandira u:

Kod:


...

y=(2)+5;

...


a "bolje" je jer se ne poziva funkcija posebna za taj izracun... jer pozivanje funkcije trosi nesto procesorskog vremena. kada pozoves funkciju onda se u memoriji zapise gdje si bio u programu, onda se procesor prebaci na neki drugi dio memorije gdje je ta funkcija, proslijedi parametar, izracuna vrijednost funkcije, proslijedi ga putem stoga i vrati se gdje je bio.
na ovaj nacin se samo nastavi izvrsavati kod. to je isplativo kada se neka jednostavna funkcija vise puta izvodi.


no, makronaredbe mogu biti i pogubne, sporije!
npr:

Kod:


#define max(a,b) (((a)>(b))?(a):(b))

...

y=max(2,3);

...


ovdje je makro nesto slozeniji, i u ovom primjeru ima smisla koristiti ga.
no, u sljedecem:

Kod:


#define max(a,b) (((a)>(b))?(a):(b))

...

y=max(mojagadnafunkcija(2),mojadrugagadnafunkcija(3));

...


ce se ekspandirati u nesto posve divlje, gdje ce u svakom slucaju morati barem jednu od te dvije funkcije pozvati dvaput - prvi put kod uvjeta za max, drugi puta kada ce vracati vrijednost. u slucaju da je ta funkcija prilicno spora i mukotrpna, potrosili smo uludo duplo vremena, pa bi nam bilo bolje napraviti funkciju max koja ce primati argumente koji se prethodno izracunaju i vratiti veci od njih... tada ce se nasa velika funkcija samo jednom racunati sto je bolje.

sve u svemu, bolje je korstiti makro za neke jednostavnije racunice koje se vise puta pozivaju, a u svim ostalim slucajevima, just to be sure, koristiti funkcije.


nadam se da sam bio jasan, ako nesto nije jasno, pitaj.



_________________
[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail
pecina
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 19. 01. 2005. (14:15:23)
Postovi: (157)16
Spol: kućni ljubimac
Sarma = la pohva - posuda
62 = 85 - 23
Lokacija: Happily traveling through space since 1986!

PostPostano: 14:51 pon, 24. 1. 2005    Naslov: Citirajte i odgovorite

Makro naredbe ne ubrzavaju izvršenje programa već njegovo pisanje a to nije ista stvar.
Makro naredbe ne ubrzavaju izvršenje programa već njegovo pisanje a to nije ista stvar.


[Vrh]
Korisnički profil Pošaljite privatnu poruku
veky
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 12. 2002. (19:59:43)
Postovi: (5B0)16
Sarma = la pohva - posuda
22 = 24 - 2
Lokacija: negdje daleko...

PostPostano: 15:52 pon, 24. 1. 2005    Naslov: Citirajte i odgovorite

[quote="pecina"]Makro naredbe ne ubrzavaju izvršenje programa već njegovo pisanje a to nije ista stvar.[/quote]

Ovisi što je alternativa. Ako je alternativa pisanje funkcijâ koje se ne moraju nužno inline-ati, tada stvarno mogu ubrzati i izvršavanje programa, kao što je Ahri gore lijepo objasnio.
pecina (napisa):
Makro naredbe ne ubrzavaju izvršenje programa već njegovo pisanje a to nije ista stvar.


Ovisi što je alternativa. Ako je alternativa pisanje funkcijâ koje se ne moraju nužno inline-ati, tada stvarno mogu ubrzati i izvršavanje programa, kao što je Ahri gore lijepo objasnio.


[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail Posjetite Web stranice
mdoko
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 30. 11. 2002. (22:17:12)
Postovi: (71A)16
Spol: muško
Sarma = la pohva - posuda
199 = 237 - 38
Lokacija: Heriot-Watt University, Edinburgh

PostPostano: 19:36 pon, 24. 1. 2005    Naslov: Citirajte i odgovorite

Istina da se funkcije ne moraju nuzno inlineati, ali vecina danasnjih kompajlera prilicno pristojno inlinea funkcije, tako ako nesto ostavi kao poziv funkcije vjerojatno ima dobar razlog za to.

Valjda svi znaju za primjer:
[code:1]
#define min(a,b) (((a)<(b))?(a):(b))
[/code:1]
Nakon toga negdje u kodu:
[code:1]
min(a++, b++);
[/code:1]
Sto se ekspandira u:
[code:1]
(((a++)<(b++))?(a++):(b++));
[/code:1]
A to izaziva prilicno nezeljene efekte, jer se jedna od varijabli (a ili b) inkrementira dva puta, a to (u vecini slucajeva) nije bila namjera.

Zato je ipak bolje:
[code:1]
inline int min(int a, int b){
return a<b ? a : b;
}
[/code:1]
Sto je u C99 standardu dozvoljeno.

Ako se pise u C++u moze i jos ljepse:
[code:1]
template< typename T >
inline T min(const T& a, const T& b){
return a<b ? a : b;
}
[/code:1]
Istina da se funkcije ne moraju nuzno inlineati, ali vecina danasnjih kompajlera prilicno pristojno inlinea funkcije, tako ako nesto ostavi kao poziv funkcije vjerojatno ima dobar razlog za to.

Valjda svi znaju za primjer:
Kod:

#define min(a,b) (((a)<(b))?(a):(b))

Nakon toga negdje u kodu:
Kod:

min(a++, b++);

Sto se ekspandira u:
Kod:

(((a++)<(b++))?(a++):(b++));

A to izaziva prilicno nezeljene efekte, jer se jedna od varijabli (a ili b) inkrementira dva puta, a to (u vecini slucajeva) nije bila namjera.

Zato je ipak bolje:
Kod:

inline int min(int a, int b){
return a<b ? a : b;
}

Sto je u C99 standardu dozvoljeno.

Ako se pise u C++u moze i jos ljepse:
Kod:

template< typename T >
inline T min(const T& a, const T& b){
return a<b ? a : b;
}



_________________
Extraordinary claims require extraordinary evidence. – Carl Sagan
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
pecina
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 19. 01. 2005. (14:15:23)
Postovi: (157)16
Spol: kućni ljubimac
Sarma = la pohva - posuda
62 = 85 - 23
Lokacija: Happily traveling through space since 1986!

PostPostano: 20:02 pon, 24. 1. 2005    Naslov: Citirajte i odgovorite

[quote="veky"][quote="pecina"]Makro naredbe ne ubrzavaju izvršenje programa već njegovo pisanje a to nije ista stvar.[/quote]

Ovisi što je alternativa. Ako je alternativa pisanje funkcijâ koje se ne moraju nužno inline-ati, tada stvarno mogu ubrzati i izvršavanje programa, kao što je Ahri gore lijepo objasnio.[/quote]

Nemojte učiti prvo optimizirati a onda programirati.

Macro je Text Replacement Tool i treba ga koristiti kao takvog. Nikako drukčije.

Nadalje, macro-e ne treba koristiti za pisanje funkcija jer danas nema potrebe cjepidlačiti oko toga je li funkcija inline ili ne. U velikoj većini slučajeva kompajler zna bolje. Ljudska intervencija je korisna kod pisanje SSE koda jer kompajler ne zna pravilno struktuirati __prefetch naredbe, tj. ne zna logiku koda.
veky (napisa):
pecina (napisa):
Makro naredbe ne ubrzavaju izvršenje programa već njegovo pisanje a to nije ista stvar.


Ovisi što je alternativa. Ako je alternativa pisanje funkcijâ koje se ne moraju nužno inline-ati, tada stvarno mogu ubrzati i izvršavanje programa, kao što je Ahri gore lijepo objasnio.


Nemojte učiti prvo optimizirati a onda programirati.

Macro je Text Replacement Tool i treba ga koristiti kao takvog. Nikako drukčije.

Nadalje, macro-e ne treba koristiti za pisanje funkcija jer danas nema potrebe cjepidlačiti oko toga je li funkcija inline ili ne. U velikoj većini slučajeva kompajler zna bolje. Ljudska intervencija je korisna kod pisanje SSE koda jer kompajler ne zna pravilno struktuirati __prefetch naredbe, tj. ne zna logiku koda.


[Vrh]
Korisnički profil Pošaljite privatnu poruku
veky
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 12. 2002. (19:59:43)
Postovi: (5B0)16
Sarma = la pohva - posuda
22 = 24 - 2
Lokacija: negdje daleko...

PostPostano: 21:05 pon, 24. 1. 2005    Naslov: Citirajte i odgovorite

[quote="pecina"][quote="veky"][quote="pecina"]Makro naredbe ne ubrzavaju izvršenje programa već njegovo pisanje a to nije ista stvar.[/quote]

Ovisi što je alternativa. Ako je alternativa pisanje funkcijâ koje se ne moraju nužno inline-ati, tada stvarno mogu ubrzati i izvršavanje programa, kao što je Ahri gore lijepo objasnio.[/quote]

Nemojte učiti prvo optimizirati a onda programirati.

Macro je Text Replacement Tool i treba ga koristiti kao takvog. Nikako drukčije.[/quote]

??
Ne slijedim vezu. Rekao sam da _mogu_ ubrzati, ne da ih _treba_ koristiti za to. Ti si rekao da _ne ubrzavaju izvršavanje_, što je univerzalno gledano netočno.
pecina (napisa):
veky (napisa):
pecina (napisa):
Makro naredbe ne ubrzavaju izvršenje programa već njegovo pisanje a to nije ista stvar.


Ovisi što je alternativa. Ako je alternativa pisanje funkcijâ koje se ne moraju nužno inline-ati, tada stvarno mogu ubrzati i izvršavanje programa, kao što je Ahri gore lijepo objasnio.


Nemojte učiti prvo optimizirati a onda programirati.

Macro je Text Replacement Tool i treba ga koristiti kao takvog. Nikako drukčije.


??
Ne slijedim vezu. Rekao sam da _mogu_ ubrzati, ne da ih _treba_ koristiti za to. Ti si rekao da _ne ubrzavaju izvršavanje_, što je univerzalno gledano netočno.


[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail Posjetite Web stranice
Gost






PostPostano: 10:17 uto, 25. 1. 2005    Naslov: Citirajte i odgovorite

Sve je objasnjeno i vise nego odlicno. Hvala, Ahri.
Sve je objasnjeno i vise nego odlicno. Hvala, Ahri.


[Vrh]
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2 Vremenska zona: GMT + 01:00.
Stranica 1 / 1.

 
Forum(o)Bir:  
Ne možete otvarati nove teme.
Ne možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan