» »

[c++] registrske spremnlivke

[c++] registrske spremnlivke

balocom ::

A mi kdo lahko pove kako se inicalizrajo in uporabljajo registerske spremenlivke (pač shranjene v predpomilniku proca)?
S tem naj bi se doseglo hitrejše izvajanje programa:)
Lp
V svetu brez googla bi bil najbolj uporabljen ukaz v bash-u ukaz man

64202 ::

Registri pa predpomnilnik so razlicne stvari. Sicer das register pred ime tipa, samo baje da tega danes compilerji vec ne upostevajo. Ce hoces nekaj 100% met v registrih, bo treba v asm posect.
I am NaN, I am a free man!

balocom ::

emmm int $45 a; a to naj bi delalo?:D
V svetu brez googla bi bil najbolj uporabljen ukaz v bash-u ukaz man

Zgodovina sprememb…

  • spremenil: balocom ()

snow ::

32 bitnih registrov je osem - eax, ebx... in za njihovo direktno uporabo uporabljaš assembler. dostop do njih je super duper hiter.
mislim da bi naj dobri c/c++ compilerji znali lepo uporabljat te registre.

potem predpomnilnik (L1 in L2 cache) je grobo rečeno manjši kos super hitrega rama, a je počasnejši kot registri, ampak tudi večji. in trik tega predpomnilnika je da ko proc rabi neke zadeve iz rama se malo večji del podatkov iz rama prekopira v predpomnilnik in je potem navidezni dostop do tistega dela rama hitrejši.
tukaj pa te zanima assemblerski ukaz prefetch - ampak ga moraš ZNAT uporabljat, ker v nasprotnem lahko narediš več škode kot koristi.


uglavnem... mal assemblerja prebrat pa kak intel developer pdf.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

balocom ::

aaa, thx
uglavnem... mal assemblerja prebrat pa kak intel developer pdf.
c++, to je edino kar obvladam. Emm, sorry, jst mam amd:D
V svetu brez googla bi bil najbolj uporabljen ukaz v bash-u ukaz man

snow ::

Da kot programer opaziš razlike pri implementaciji med amd in intel procesorji moraš bit že kr maček. :)

No potem pa probaj najprej zadeve najt v amd dokumentaciji, če ne pa v intel. No alpa kje na netu pač.


Dva linka za začetek:
http://en.wikipedia.org/wiki/Processor_register
http://en.wikipedia.org/wiki/Cache
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

Utk ::

In zakaj ne bi tega prepustil prevajalniku? Če delaš v c++...

Gundolf ::

Verjetno zato ker hoče očitno direkt klicat tole: "int $45 a".
Pri čemer verjetno hoče imeti a v registru.

Jaz tudi ne vidim nobene rešitve, ki bi bila vsaj približno tako dobra kot inline assembler v C++ kodi. Sej večina prevajalnikov to zna delat.

Še bolj verjetno, balocom, sem te pa jaz narobe razumel in s int $45 a nisi imel v mislih assemberske kode :8) v tem primeru lahko mirno pozabiš da bi sam kaj rihtal registrske spremenljivke, ker tvoj preljubi prevajalnik to naredi sam veliko bolje od tebe.

Zgodovina sprememb…

  • spremenil: Gundolf ()

balocom ::

$45
$45- meu sem v mislih kr en register:8)
V svetu brez googla bi bil najbolj uporabljen ukaz v bash-u ukaz man

Utk ::

Samo še zmeraj mi ni jasno kako bi bilo to koristno v c++ programu. Po moje človek misli, da bo stem program hitrejši, če bo tista spremenljivka zmeraj v tistem registru ali kaj takega. Če bi bil cel program v asm, potem ja, tako pa res nima smisla se ukvarjat stem.

balocom ::

Maš en progrm z malo spremenlivkami, ki pa se velikokrat ponovijo ali uporabjo. Get it?
V svetu brez googla bi bil najbolj uporabljen ukaz v bash-u ukaz man

Senitel ::

In kaj v tem primeru preprečuje, da bi prevajalnik že sam od sebe ne držal vseh spremenljivk v registrih? Kot je že bilo omenjeno se prevajalniki precej požvižgajo na "register" direktivo... Razen če ne misliš uporabljat SSE in podobnih zadev se ti s tem po mojem ne splača ubadat.

CCfly ::

Maš en progrm z malo spremenlivkami, ki pa se velikokrat ponovijo ali uporabjo. Get it?
Z 90% verjetnostjo jih bo dober prevajalnik obdržal v registrih. Vprašanje je, ali je tvoj del kode tako kritičen, da si moraš zakomplicirati vzdrževanje programa.
"My goodness, we forgot generics!" -- Danny Kalev

NavadniNimda ::

Maš en progrm z malo spremenlivkami, ki pa se velikokrat ponovijo ali uporabjo. Get it?

Balocom: če boš vmes klical tudi API klice, se bo hitro pripetilo, da se ti vsebina registra pohodi, torej KABOOM!:D Če pa imaš zelo dober prevajalnik, ti bo registrsko spremenljivko čuval na skladu (kot lokalno spremenljivko) in vse kar boš dosegel bo, da bo vse skup laufalo največ toliko hitro, kot bi sicer.;)

BigWhale ::

> > uglavnem... mal assemblerja prebrat pa kak intel developer pdf.
> c++, to je edino kar obvladam. Emm, sorry, jst mam amd[:D]

Hihi, malo smeha zjutraj ne skodi... ;)

Ne pacaj z registri, ker bos zapacal zadevo. Tvoj compiler je dovolj dober. Verjemi mi. ;) Ce ne ves kako in kaj optimizirat, potem to compiler opravi precejkrat bolje od tebe. :P

64202 ::

> emmm int $45 a; a to naj bi delalo?:D

Ne, dobesedno "register" sem mislil:
register int a = 5;

To naj bi bil hint compilerju, da naj karsedafejst drzi spremenljivko v (nekem) registru.
I am NaN, I am a free man!

Zlikovec ::

Če želiš podajati argumente v registre mikroprocesorja, ti ni trebe znati asemblerja. V ta namen uporabiš _fastcall predpono pri deklaraciji in definiranju funkcije:
ReturnType _fastcall FunctionName(Arg)
Ducati Monster, Ducati 750 SS FF, Yamaha XJ6,
Honda Hornet 600, Yamaha Fazer 800, R NineT

CCfly ::

Ki seveda deluje samo v MS VC++.

edit: _fastcall me poleg tega bolj spominja na inline, kot da bi lahko spremenljivke obdržal v registrih.
"My goodness, we forgot generics!" -- Danny Kalev

Zgodovina sprememb…

  • spremenilo: CCfly ()

OwcA ::

_fastcall direktiva zagotovi samo, da funkcija prejme argumente preko registrov ne sklada.
Otroška radovednost - gonilo napredka.

snow ::

Ja prva dva argumenta gresta v ebx, edx, ostali pa lepo na sklad.

Hm saj to gre prav vrednost argumenta tja... kaj pa če je argument večji kot register?
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

SasoS ::

Potem se prenese pointer.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C] struct in int[] (strani: 1 2 )

Oddelek: Programiranje
657324 (6397) MrBrdo
»

[FASM] Kernel (strani: 1 2 )

Oddelek: Programiranje
674236 (3045) DustWolf
»

Najhitrejši programski jezik? (strani: 1 2 )

Oddelek: Programiranje
757707 (5527) Senitel
»

ideja: koda za razne mikrokontrolerje na enem mestu

Oddelek: Elektrotehnika in elektronika
73691 (3168) neoto
»

[C++] Shift left (strani: 1 2 )

Oddelek: Programiranje
663535 (3038) Thomas

Več podobnih tem