Inline Methody – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Inline Methody – C / C++ – Fórum – Programujte.comInline Methody – C / C++ – Fórum – Programujte.com

 

Miro17010
Stálý člen
29. 8. 2009   #1
-
0
-

kedy mi inline metody prispeju k vykonu?? a moze byt aj taka inline metoda co mi vrati urcitu privatnu premmenu vo svoje triede??

Nahlásit jako SPAM
IP: 85.248.47.–
začinajúci programátor v .Net: C# & OpenTK: OpenGL( pouzivam ), OpenAL( zatial nepouzivam ), OpenCL( este som neskusal )
sputnikone+1
Věrný člen
29. 8. 2009   #2
-
0
-

Pouzivani inline funkcí se doporučuje jen u kratších funkcí - při delších by výsledná binárka pěkně nabobtnala. A s tím návratem privátní proměnné by to mělo být možné.

Nahlásit jako SPAM
IP: 195.47.9.–
Miro17010
Stálý člen
29. 8. 2009   #3
-
0
-

a ta mensia funkcia je cca. 5 - 15 riadkov?? alebo menej napr. ako tie co vracaju private premmenne.
A urychlia inline funkcie aspon kus beh programu??

EDIT: mozu byt operatory(+-*/,...) inline??

Nahlásit jako SPAM
IP: 85.248.47.–
začinajúci programátor v .Net: C# & OpenTK: OpenGL( pouzivam ), OpenAL( zatial nepouzivam ), OpenCL( este som neskusal )
sputnikone+1
Věrný člen
29. 8. 2009   #4
-
0
-

Spíš 1 - 5 řádků

Nahlásit jako SPAM
IP: 195.47.9.–
Miro17010
Stálý člen
29. 8. 2009   #5
-
0
-

ahha, ale este stale som sa nedozvedel ci mi to urychli program

Nahlásit jako SPAM
IP: 85.248.47.–
začinajúci programátor v .Net: C# & OpenTK: OpenGL( pouzivam ), OpenAL( zatial nepouzivam ), OpenCL( este som neskusal )
sputnikone+1
Věrný člen
Nahlásit jako SPAM
IP: 195.47.9.–
Miro17010
Stálý člen
29. 8. 2009   #7
-
0
-

ahha, cize mi to dost pomoze pri funkciach ktore len vratia privatnu premmenu, privatna je z toho dovodu ze napr.: pri SetXYZ( Color4 start, Color4 end ), sa vytvori dalsia premenna ktora bude obsahovat ich rozdiel ktory sa bude pridavat k hodnote aktualnej farby( castice )

Edit: alebo sa este vytvori bool UseColorAdd, co uz asi chapete naco by mal byt a kedy bude true/false xD

Nahlásit jako SPAM
IP: 85.248.47.–
začinajúci programátor v .Net: C# & OpenTK: OpenGL( pouzivam ), OpenAL( zatial nepouzivam ), OpenCL( este som neskusal )
tmi0
Věrný člen
29. 8. 2009   #8
-
0
-

ptat se jestli ti to urychli program je trochu naivni -- muj osobni tip je, ze rozdil se cloveku vubec neprojevi -- protoze to zalezi na prilis mnoha faktorech. kazdopadne nejlepsi co muzes udelat je to vyzkouset v obou variantach a vybrat si tu rychlejsi.

jinak inlinovani obecne je hodne specificka optimalizace. Sice se usetri tech par instrukci pro rezii prace se zasobnikem a volani funkce, jenze tyhle instrukce jsou dnes docela optimalizovane. Dalsi plus muze byt, ze kompilator "vidi" do funkce jeste pred jejim volanim a muze tak provadet nejake dopredne optimalizace sam. Nevyhodou je zvetseni binarky (coz ale nemusi byt vzdy pravda! Pokud je inlinovana funkce mensi nez onech asi rezijnich 6 instrukci, tak se naopak binarka zmensi) a prodlouzeni kodu volajici funkce, coz muze mit nasledky snizeni jeji referencni lokality. Ale predevsim, nejvetsi problem dnesnich programu nejsou cekani na provedeni instrukci procesorem (cemuz by inlining pomahal), ale cekani na doruceni dat do procesoru, predevsim z ramky, takze casto je nejlepsi optimalizovat cache... ale zalezi na konkretnim pripade...

Nahlásit jako SPAM
IP: 213.226.226.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
Miro17010
Stálý člen
29. 8. 2009   #9
-
0
-

a podla coho vie procesor alebo kompilator ktore premmene ma cachovat??

Nahlásit jako SPAM
IP: 85.248.47.–
začinajúci programátor v .Net: C# & OpenTK: OpenGL( pouzivam ), OpenAL( zatial nepouzivam ), OpenCL( este som neskusal )
tmi0
Věrný člen
29. 8. 2009   #10
-
0
-

cachema musi projit vsechno, co jde k procesoru, veskera data (myslim ze existuje nejaka specialni instrukce pro loadovani mimo cache, ale nejsem si tim vubec jist...). kompilator do toho kecat nemuze (teda az na drobnosti jako ze nejakou promennou necha jako registrovou). a z plne cache se vetsinou vyhazuje vec ktera byla naposledy pouzita pred nejvetsi dobou (lru, last recently used). vetsinou ti ale nejde o samotne promenne, ale o velke datove useky, pole atd.

Nahlásit jako SPAM
IP: 213.226.226.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
Miro17010
Stálý člen
29. 8. 2009   #11
-
0
-

a struct sa nacitava naraz?? alebo po castiach ako volam?? a array tiez naraz??

Nahlásit jako SPAM
IP: 85.248.47.–
začinajúci programátor v .Net: C# & OpenTK: OpenGL( pouzivam ), OpenAL( zatial nepouzivam ), OpenCL( este som neskusal )
KIIV
~ Moderátor
+43
God of flame
29. 8. 2009   #12
-
0
-

byt tebou, tak se zatim moc optimalizacema nezabyvam.. az se naucis assembler, muzes si to nechat zkompilovat do nej a pak porovnavat "optimalnost kodu"...
taky neni od veci se poradne naucit algoritmizaci, dynamicke datove struktury, ...
pokud neco delas amatersky (napriklad: for ( i=0 ; i < strlen(retezec)-1 ; i++ ) { ... } ) tak te nezachrani ani inline

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
tmi0
Věrný člen
29. 8. 2009   #13
-
0
-

funguje to tak, ze kdykoli k pristupujes k nejakym polozkam (coz znamena jedno slovo, tedy 32 nebo 64 bitu -- procesor nikdy nechce vic dat najednou, kdyz nepocitam vyjimky typu sse), tak procesor posle zpravu cachim ze chce konkretni udaj. Pokud ten v cache je, tak se posle procesoru, pokud ne, tak se z pameti nacte oblast velika jako jeden cachovy radek (u me to je 64 byte, zjistit to muzes nekde v /sys/devices/system/cpu/cpu0/cache/coherency_line_size nebo tak), ulozi se do cache a vybere se z ni udaj ktery potrebujes (ten udaj ale muze lezet na zlomu dvou cachovych radku, pokud to v pameti neni zarovnane). Z toho plyne, ze pokud prochazis pole intu, tak te to bude stat zhruba jeden pristup do hlavni pameti kazdys 16 nacteni, pokud ale prochazis spojak tak te to bude pravdepodobne stat pristup do pameti pokazde...

Nahlásit jako SPAM
IP: 213.226.226.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
Miro17010
Stálý člen
29. 8. 2009   #14
-
0
-

KIIV napsalpokud neco delas amatersky (napriklad: for ( i=0 ; i < strlen(retezec)-1 ; i++ ) { ... } ) tak te nezachrani ani inline

strlen som este ani raz zatial nepouzil, dlzku array-u si ukladam napr.: particles_lenghth, ale pocet castic si ukladam zvlast particles_count, array si zvetsim len ked ma malo miesta, ale zatial ho nezmensujem, ale ale aktivne castice si ukladam do ineho array-u, a ked castica "zomrie", tak to posuniem:
 Vector2F gravity = this->ParticleGravity * timedelta; // tu viem ze mam chybu lebo neviem ako sa pocita gravitacia s roznymi casami


for( int i = 0, y = 0; i < particles_length; i++ )
{
particles[particles_sort[i]].Life -= ...;

if( particles[particles_sort[i]].Life > 0 )
{
particles_sort[y] = particles_sort[i];
i++;

particles[particles_sort[y]].Position += particles[particles_sort[y]].Speed * timedelta;
particles[particles_sort[y]].Speed += gravity;

particles[particles_sort[y]].Color +=...
}
else
{
particles_alive[i] = false; // dolezite re vytvaranie novych castic
// ale rozmyslam ci vy nebolo lepsie vytvorit novy array: int * Particles_InAlive;
//lebo to by bolo:

this->Particles_InAlive[(Particles_InAlive_Count++)-1] = i;
}
}
Ale u mna je ten y CurrentLastParticle, a ked zistite nejake urychlenie tak mi mozete povedat. a este jedna vec mi napadla, mam to vsetko robit naraz( posunitie, zmena farby, alebo pre kazdu vec mam pouzit novy cyklus ) a este jedna vec moze jedna struktura obshovat cca. 10 float-ov, cize velkost je cca 40 bajtov.

Nahlásit jako SPAM
IP: 85.248.47.–
začinajúci programátor v .Net: C# & OpenTK: OpenGL( pouzivam ), OpenAL( zatial nepouzivam ), OpenCL( este som neskusal )
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 37 hostů

Podobná vlákna

Inline — založil Alyx_Vance

Co je to inline funkcia? — založil Tom@sQo

Inline assembler — založil Kolcek93

Inline dropdown menu — založil Hanulik

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý