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

Nasledjivanje samo izmedju interfejsa

[es] :: Art of Programming :: Nasledjivanje samo izmedju interfejsa

Strane: < .. 1 2 3 4

[ Pregleda: 12507 | Odgovora: 72 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Nasledjivanje samo izmedju interfejsa18.07.2012. u 11:07 - pre 143 meseci
Da, C#.

Inace, ne znam gde si to video sem u debug modu (a to se ne racuna jer je optimizacija iskljucena zbog line-by-line debuga)

U release bildu posle JITovanja kod je skoro potpuno identican, razlika moze da bude samo u redosledu dodela. U primeru koji sam upravo uradio cek je i kompletan metod inline-ovan u pozivaoca pa je jos lakse uporediti. Bottom line, da li ce biti conditional move ili je/jne branching zavisi od sr/dest kombinacije ali ako ?: operator JITuje u conditional move onda postoji i ekvivalentan if/then/else konstrukt koji ce uraditi to isto.

Code:


    public class Class1
    {
        public int x;
        public int y = 123;

        public void IfWay()
        {
            if (x == 0) x = 10; else x = y;
        }

        public void CondWay()
        {
            x = x == 0 ? 10 : y;
        }

    }

            Class1 c = new Class1();
00000000  push        ebp 
00000001  mov         ebp,esp 
00000003  mov         ecx,5B25E0h 
00000008  call        FFD2FBE0 
0000000d  mov         edx,eax 
0000000f  mov         dword ptr [edx+8],7Bh 
            c.x = 0;
00000016  xor         ecx,ecx 
00000018  mov         dword ptr [edx+4],ecx 
            c.IfWay();
0000001d  cmp         dword ptr [edx+8],0Fh 
00000021  jne         0000002A 
00000023  xor         ecx,ecx 
00000025  mov         dword ptr [edx+4],ecx 
00000028  jmp         00000030 
0000002a  mov         eax,dword ptr [edx+8] 
0000002d  mov         dword ptr [edx+4],eax 
            c.CondWay();
00000030  cmp         dword ptr [edx+8],0Fh 
00000034  je          0000003B 
00000036  mov         eax,dword ptr [edx+8] 
00000039  jmp         0000003D 
0000003b  xor         eax,eax 
0000003d  mov         dword ptr [edx+4],eax 
00000040  pop         ebp 


Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

tosa
上海, 中国

Član broj: 1811
Poruke: 1342
118.131.136.*

ICQ: 14293955
Sajt: https://github.com/milost..


+48 Profil

icon Re: Nasledjivanje samo izmedju interfejsa19.07.2012. u 02:15 - pre 143 meseci
Citat:
Mihajlo Cvetanović:
Par desetina nanosekundi viška ja ne bih nazvao dosta lošije. Pustite kompajler da radi svoj posao, i skoncentrišite se na ono što je u kodu bitno, a to je da radi bez grešaka, i da se lako razume i menja.

Kod sa branch instrukcijama bih svakako nazvao dosta losijim od branch free koda.

@mmix
Video sam to na vise platformi/kompajlera. Ovaj C# jit kod je katastrofa - nigde nema conditional move instrukcija, obe verzije su podjedanako lose ;)
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Nasledjivanje samo izmedju interfejsa19.07.2012. u 11:06 - pre 143 meseci
Ne bih se slozio satvojom konstatacijom, CMOV je blok operacija koja nije predictable, a velika vecina jxx brancheva jeste predictable i izvrsava se dosta brze na modernim procesorima narocito u multithreaded scenarijima. Jedino sto realno dobijas sa cmovxx je manje bajtova u kodu sto je danas zanemarljiva kategorija za veliku vecinu primena.

I sam intel potvrdjuje tu pricu:

Citat:
Use the setcc and cmov instructions to eliminate unpredictable conditional branches where possible. Do not do this for predictable branches. Do not use these instructions to eliminate all unpredictable conditional branches, because using these instructions will incur execution overhead due to executing both paths of a conditional branch. In addition, converting conditional branches to cmov or setcc trades control-flow dependence for data dependence and restricts the capability of the out-of-order engine. When tuning, note that all Intel® processors have very high branch-prediction rates. Consistently mispredicted branches are rare. Use these instructions only if the increase in computation time is less than the expected cost of a mispredicted branch


i cak je i Linus rekao po koju na tu temu: http://yarchive.net/comp/linux/cmov.html

Ako jos uzmes u obzira da je od Core2 na ovamo mispredicted branching drasticno "pojeftinio" i tih 5% koliko obicno promasi je sada jos manje od overheada cmova. Mnogo stosta moze da se kaze za .NET ali JIT mu je (bar MSov, ne racunamo pokusaj zvano Mono) definitivno na nivou zadatka.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16687
*.dip.t-dialin.net.



+7176 Profil

icon Re: Nasledjivanje samo izmedju interfejsa19.07.2012. u 19:44 - pre 143 meseci
Pretpostavljam da tosa nije mislio na Intel procesore iz poslednjih nekoliko generacija, vec mozda neke embedded arhitekture, koliko se secam tosa je (bar bio) u konzolnom (gaming) biznisu ako ne gresim?

Mada... covek je tu, glupo je da pricam za njega..
DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2790 Profil

icon Re: Nasledjivanje samo izmedju interfejsa19.07.2012. u 20:33 - pre 143 meseci
Pravo da ti kažem, ja mogu svašta da očekujem od nekoga ko je us tanju da napiše nešto ovako:
Citat:
tosa: ko voli da pise kilometre boilerplate koda da bi na kraju dosao i do same implementacije svog problema - taj nek uziva u Javi. Ima dosta firmi koje placaju za to besmisleno trosenje vremena...

Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

tosa
上海, 中国

Član broj: 1811
Poruke: 1342
118.131.136.*

ICQ: 14293955
Sajt: https://github.com/milost..


+48 Profil

icon Re: Nasledjivanje samo izmedju interfejsa20.07.2012. u 02:05 - pre 143 meseci
Citat:
Ivan Dimkovic:
Pretpostavljam da tosa nije mislio na Intel procesore iz poslednjih nekoliko generacija, vec mozda neke embedded arhitekture, koliko se secam tosa je (bar bio) u konzolnom (gaming) biznisu ako ne gresim?

Ne gresis, procesora ima raznih a branch instrukcije su svuda lose, negde (dosta) vise negde manje :)
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Nasledjivanje samo izmedju interfejsa20.07.2012. u 06:51 - pre 143 meseci
Gut feeling ili je to necim potkovano?
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

tosa
上海, 中国

Član broj: 1811
Poruke: 1342
118.131.136.*

ICQ: 14293955
Sajt: https://github.com/milost..


+48 Profil

icon Re: Nasledjivanje samo izmedju interfejsa20.07.2012. u 08:09 - pre 143 meseci
Citat:
mmix:
Gut feeling ili je to necim potkovano?

Dovoljan hint bi trebalo da ti bude priroda AVX, VMX, SSE i slicnih instrukcija gde veliki broj njih omogucava izbegavanje 'branchy' koda - pored toga sto rade na vise podataka paralelno.
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16687
*.dip.t-dialin.net.



+7176 Profil

icon Re: Nasledjivanje samo izmedju interfejsa20.07.2012. u 09:57 - pre 143 meseci
Hmm ali ako vec hoces da iskoristis pun potencijal koji nude SSE/AVX instrukcije (tipa VBLENDVPS) i ovako i onako ces morati da zasuces rukave i spustis se na ASM nivo... a za trivijalne if() statemente posten kompajler ne bi trebao da ima problem da uoci da moze da iskoristi odgovarajucu kondicionalnu instrukciju.

DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
 
Odgovor na temu

tosa
上海, 中国

Član broj: 1811
Poruke: 1342
118.131.136.*

ICQ: 14293955
Sajt: https://github.com/milost..


+48 Profil

icon Re: Nasledjivanje samo izmedju interfejsa20.07.2012. u 10:35 - pre 143 meseci
Citat:
Ivan Dimkovic:
Hmm ali ako vec hoces da iskoristis pun potencijal koji nude SSE/AVX instrukcije (tipa VBLENDVPS) i ovako i onako ces morati da zasuces rukave i spustis se na ASM nivo... a za trivijalne if() statemente posten kompajler ne bi trebao da ima problem da uoci da moze da iskoristi odgovarajucu kondicionalnu instrukciju.

Jos kad bi MSVC dozvoljavao ASM za x64... Poenta je bila da se problem branchy koda reflektovao u dizajnu tih instrukcija zbog cega sam i rekao da bi to bio dobar hint.
Ovo je vec prilicno odlutalo od originalne teme, ali ?: operator mi je skroz ok ;)
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16687
*.dip.t-dialin.net.



+7176 Profil

icon Re: Nasledjivanje samo izmedju interfejsa20.07.2012. u 10:47 - pre 143 meseci
Citat:
tosa
Jos kad bi MSVC dozvoljavao ASM za x64...


Off-topic, pa dobro, _mm256_blendv_ps() ce raditi posao takodje ;-)

DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Nasledjivanje samo izmedju interfejsa20.07.2012. u 11:10 - pre 143 meseci
Pa i jesmo, ja sam odgovorio na tvoju tvrdnju da je .NET JIT sh*t jer je izabrao branching umesto cmov i ja sam ti dao rezon i objasnjenje zasto je bolje i brze i potkrepio tamo nekim linkovima a kao odgovor dobio "ja znam bolje, vidi AVX". Fine, whateva.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

tosa
上海, 中国

Član broj: 1811
Poruke: 1342
180.69.105.*

ICQ: 14293955
Sajt: https://github.com/milost..


+48 Profil

icon Re: Nasledjivanje samo izmedju interfejsa20.07.2012. u 15:33 - pre 143 meseci
Citat:
Ivan Dimkovic:Off-topic, pa dobro, _mm256_blendv_ps() ce raditi posao takodje ;-)

Off topic: Hoce ;) Nego mi je skroz bezveze sto ne mogu da pisem inline asm za x64 nego moram da se cimam sa ekternim fajlovima (MSVC).

@mmix
Nisu svi procesori out of order, vecina game konzola, mobilnih telefona, tableta i tako dalje ima in order procesore. Niza potrosnja je u pitanju tako da izbegavanje branchy koda i te kako ima smisla.
Jedan branch verovatno nece napraviti veliku razliku (ako bude merljiva) ali ako imas rutinu koja je u loop-u i ima par if-ova tu je cesto kraj sa dobrim performansama.

 
Odgovor na temu

[es] :: Art of Programming :: Nasledjivanje samo izmedju interfejsa

Strane: < .. 1 2 3 4

[ Pregleda: 12507 | Odgovora: 72 ] > FB > Twit

Postavi temu Odgovori

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