Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 26. červen 2013, 10:07:32 Předmět: |
|
|
]semo[ napsal: |
No jo, asi nám začne flame, co? ..můžem pak ještě pokračovat s tématem Windows versus Linux . |
Windows vs Linux je vděčné téma, ale počkám, až to nastartuje pcmaster |
|
Návrat nahoru |
|
|
pcmaster
Založen: 28. 07. 2007 Příspěvky: 1824
|
Zaslal: 26. červen 2013, 10:38:50 Předmět: |
|
|
Ja startujem uplne ine flamy, no dovol Na toto sme uz stari _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
|
Krolli
Založen: 12. 05. 2013 Příspěvky: 13
|
Zaslal: 26. červen 2013, 18:50:39 Předmět: |
|
|
mar: Že sa to niekomu bude chcieť zistovať som nečakal. Divné mi je, že sa to nepredáva cez registre (ak to správne čítam). Tak som si dal tú prácu aj ja.
Funkcie
kód: |
?addVal@@YAHHH@Z PROC
; _x$ = ecx
; _y$ = eax
; 5 : return x + y;
add eax, ecx
?addRef@@YAHABH0@Z PROC
; _x$ = eax
; _y$ = ecx
; 10 : return x + y;
mov eax, DWORD PTR [eax]
add eax, DWORD PTR [ecx]
|
Volanie
kód: |
mov ecx, edi ;x uz bolo v edi
mov DWORD PTR _y$[ebp], eax
call ?addVal@@YAHHH@Z
lea ecx, DWORD PTR _y$[ebp]
lea eax, DWORD PTR _x$[ebp]
call ?addRef@@YAHABH0@Z
|
Ako už povedal ktosi, je to hrozne blbý príklad.
PS: Pre úplnosť, MSVC 2010 x86, Release konfigurácia, /Ox /Ot /Oi /GL /LTCG a zrusene inlinovanie (/Ob0). |
|
Návrat nahoru |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 27. červen 2013, 10:15:21 Předmět: |
|
|
Krolli napsal: |
Divné mi je, že sa to nepredáva cez registre (ak to správne čítam). |
To není divné, to je normální předávat přes zásobník (pokud nemáš volací konvenci __fastcall, která prý ale dělá problémy u Intelu).
Krolli tys ale podváděl /GL a /LTCG neberu, zkus si to hodit do dynamické knihovny a nalinkovat
Tak nebo tak i toto potvrzuje, že const reference na elementární datové typy je špatný nápad. |
|
Návrat nahoru |
|
|
Krolli
Založen: 12. 05. 2013 Příspěvky: 13
|
Zaslal: 27. červen 2013, 18:35:13 Předmět: |
|
|
mar napsal: |
To není divné, to je normální předávat přes zásobník (pokud nemáš volací konvenci __fastcall, která prý ale dělá problémy u Intelu). |
Fakt? Ja som si vždy myslel, že v optimalizovanom programe sa do registrov dáva všetko, čo sa tam ešte vojde (a nejedná sa o prípady ako zdieľané knižnice).
mar napsal: |
Krolli tys ale podváděl /GL a /LTCG neberu, zkus si to hodit do dynamické knihovny a nalinkovat |
My sme mali pravidlá?
mar napsal: |
Tak nebo tak i toto potvrzuje, že const reference na elementární datové typy je špatný nápad. |
Jj, s tým súhlasím. Aj keby tam nebol overhead, tak je to pisanie navyše. |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 28. červen 2013, 09:31:47 Předmět: |
|
|
Tohle si při psaní C++ představuju. Ale jak tyhle věci fungujou třeba v .NETu? Mám na mysli low-level optimalizace kódu obecně. Máte někdo ponětí? Je to asi mojí neznalostí, ale když píšu v C#, netroufám si dělat žádné optimalizace (jen algoritmický), protože tam stejně sedí veliká žába na prameni :-). _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 28. červen 2013, 10:42:18 Předmět: |
|
|
Tak řekl bych, že C# na tom bude podobně jako Java, takže JIT, za běhu překládá bytecode do strojáku pro kusy kódu (celé funkce?). Víc nevím, nikdy jsem v C# nic nepsal. Ale vsadím se, že pro ty, co vidí trochu dovnitř, by i low level optimalizace neměly být problém. Co jsem koukal tak CIL bytecode je zase jenom stack based, takže registry nepoužívá vůbec (ale výsledný kód ve strojáku určitě ano).
EDIT: zajímalo by mě, jak to řeší třeba v Unity na iOSu - tam se JIT dělat nedá, takže by to celé přeložili AOT? Což by jít mohlo, protože AFAIK to mají postavené na Monu. |
|
Návrat nahoru |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 28. červen 2013, 14:52:17 Předmět: |
|
|
C# je na tom imho lépe než Java.. tak můžeš přepnout do "unsafe" kódu a začít psát normálně s pointerama do paměti. Nicméně na bytecode jsem nekoukal. _________________ Perry.cz |
|
Návrat nahoru |
|
|
Krolli
Založen: 12. 05. 2013 Příspěvky: 13
|
Zaslal: 28. červen 2013, 22:24:28 Předmět: |
|
|
Podla toho čo mi hovorili kolegovia v práci (ktorý so C# robia celkom dlho a majú nejaké tie pokusy o optimalizáciu za sebou) sa v C# nič neoptimalizuje. Asi najlepšie čo sa tam dá je vyhýbať sa alokáciam, virtuálnym volaniam, robiť algoritmické optimalizácie a predávať štruktúry ako ref. Na nejake inlinovanie často spúštaného kódu a krátkych metód alebo tail call optimalizáciu by som asi nestavial. |
|
Návrat nahoru |
|
|
|