» »

Hardwersko ozadje programiranja

Hardwersko ozadje programiranja

zorangutan ::

Pozdravljeni,

prosil bi vas za pomoč pri iskanju literature, ki ponuja podroben vpogled v dogajanje v strojni opremi pri izvajanju programa. Torej, da je bolj ali manj preprosto razloženo, kaj se dogaja v procesorju in spominu, ko se izvede npr. for zanka ali pa pokliče neka funkcija. Ali pa recimo:

* kaj se dogaja v pomnilniku in koliko procesorskega časa se porabi ob instanciiranju spremenljivke
* je hitrejše instanciirat več lokalnih spremenljivk ali zgolj uporabljati eno. Npr. če definiraš univerzalen counter za več for-zank, namesto da vsaka for zanka instanciira lasten counter
* kaj se zgodi ob klicu funkcije? kako se podajo naprej funkcijski parametri - se skopirajo v poseben del pomnilnika? kaj se zgodi z return spremenljivko? je hitreje in učinkoviteje, če funkcijam podamo pointerje?
* kaj je heap in stack memory
* kaj je hitrejše, for ali while zanka?
* koliko procesorskega časa porabi določena računska operacija - množenje, seštevanje,...
* osnove assemblerja

Domnevam, da so odgovori na podobna vprašanja zelo odvisni od platforme? Skratka vesel bi bil namigov na vsakršno uporabno literaturo, ki bi mi pomagala razjasniti dogajanje v hardwareu, pa naj bo to splošna in teoretična literatura ali pa praktična za točno določeno strojno opremo.

Hvala za pomoč!

jype ::

Jaz sem se večino osnovnih konceptov naučil iz knjige "Advanced Machine Code Programming for the Commodore 64":

http://www.computinghistory.org.uk/big/...

Procesor je dovolj enostaven, da lahko razumeš, kaj se v hardveru dogaja, ko čaraš reči s softverom. Sodobnejše arhitekture so znatno kompleksnejše (še posebej cevovodi in predpomnilnik precej spremenijo reči), ampak če si razumel osnove, veliko lažje razumeš tudi takšne reči.

mihies ::

Jaz bi ti samo dal nasvet. Raje poskrbi, da je koda čitljiva in da uporabljaš prave algoritme. Mikrooptimiziacije so večinoma nepomembne, pa še hudo, ampak res hudo, boš nekaj mikooptimiziral, ker je vse skupaj odvisno od milijon+ faktorjev. Mogoče ima to smisel na šibkih strojih (tipa netduino, arduino, etc.)
Seveda pa poznavanje delovanja strojne opreme in ozadij vsekakor ne škodi.
http://blog.rthand.com/
SLODUG - uporabniška skupina
https://www.facebook.com/groups/slodug/

terryww ::

S kodo komuniciraš svoje želje kompajlerju/interpreterju. Kompajler implementira tvoje želje v strojno kodo. Ista koda, dva različna kompajlerja, dve različni zgodbi kaj se dogaja v HWju. Kar iščeš je the Dragon book. Sicer pa vabljen, da se nam pridružiš na http://www.cppgm.org/index.html .
Na hitro pa si lahko preštudiraš primere v pythonu:
http://www.doughellmann.com/PyMOTW/dis/
http://broadcast.oreilly.com/2009/08/py...
It is the night. My body's weak.
I'm on the run. No time to sleep.

pegasus ::

Najbolje ti na taka vprašanja odgovori virtual6502. Je tudi dovolj enostaven procesor, da ga še lahko dojameš v celoti.
Za današnje mašine, ki že imajo hw perf counters, pa priporočam orodja ala likwid - Like I Know What I'm Doing :))

Zgodovina sprememb…

  • spremenil: pegasus ()

usoban ::

Spura ::

zorangutan je izjavil:

Pozdravljeni,

prosil bi vas za pomoč pri iskanju literature, ki ponuja podroben vpogled v dogajanje v strojni opremi pri izvajanju programa. Torej, da je bolj ali manj preprosto razloženo, kaj se dogaja v procesorju in spominu, ko se izvede npr. for zanka ali pa pokliče neka funkcija. Ali pa recimo:

* kaj se dogaja v pomnilniku in koliko procesorskega časa se porabi ob instanciiranju spremenljivke
* je hitrejše instanciirat več lokalnih spremenljivk ali zgolj uporabljati eno. Npr. če definiraš univerzalen counter za več for-zank, namesto da vsaka for zanka instanciira lasten counter
* kaj se zgodi ob klicu funkcije? kako se podajo naprej funkcijski parametri - se skopirajo v poseben del pomnilnika? kaj se zgodi z return spremenljivko? je hitreje in učinkoviteje, če funkcijam podamo pointerje?
* kaj je heap in stack memory
* kaj je hitrejše, for ali while zanka?
* koliko procesorskega časa porabi določena računska operacija - množenje, seštevanje,...
* osnove assemblerja

Domnevam, da so odgovori na podobna vprašanja zelo odvisni od platforme? Skratka vesel bi bil namigov na vsakršno uporabno literaturo, ki bi mi pomagala razjasniti dogajanje v hardwareu, pa naj bo to splošna in teoretična literatura ali pa praktična za točno določeno strojno opremo.

Hvala za pomoč!

Vse to je odvisno od compilerja in predlagam, da ne izvajas mikro optimizacij. Ce uporabljas samo eno spremenljivko, potem je potencialno hitrejse, kot vec spremenljivk (zaradi velikosti stack framea, kar lahko pomeni manj cache missov), ampak morda ti za vec for zank sploh ne uporablja lokalne spremenljivke ampak ti compiler naredi kodo, ki drzi counterje v registrih, tko da res brezveze, da se s tem obremenjujes. V vsakem primeru se ti ne splaca pisat bolj grde kode za te fore. Ce te zanimajo take fore potem si preberi literaturo o compilerjih, za hardware si pa lahko morda od koga sposodis knjigo za ARS 1 na FRI od Kodeka.

Randomness ::

Zgodovina sprememb…

Vesoljc ::

* kaj se dogaja v pomnilniku in koliko procesorskega časa se porabi ob instanciiranju spremenljivke
* kaj je heap in stack memory
recimo:
http://www-ee.eng.hawaii.edu/~tep/EE160...


* je hitrejše instanciirat več lokalnih spremenljivk ali zgolj uporabljati eno. Npr. če definiraš univerzalen counter za več for-zank, namesto da vsaka for zanka instanciira lasten counter
* kaj je hitrejše, for ali while zanka?
nepomembno, itak bo prevajlanik naredil po svoje :)


* kaj se zgodi ob klicu funkcije? kako se podajo naprej funkcijski parametri - se skopirajo v poseben del pomnilnika? kaj se zgodi z return spremenljivko? je hitreje in učinkoviteje, če funkcijam podamo pointerje?
http://www.learncpp.com/cpp-tutorial/72...
http://www.learncpp.com/cpp-tutorial/73...
http://www.learncpp.com/cpp-tutorial/74...


* koliko procesorskega časa porabi določena računska operacija - množenje, seštevanje,...
* osnove assemblerja
kot so ti predlagali, zalaufaj en emulator simple procesorja, ko ti bodo jasni load, store, jump, compare, mul, add, potem pa naprej v bolj kompleksne ukaze. lahko si pogledas tudi kak shader tutorial.


mikrootimizacije so naceloma res zadnji korak, ampak ce se lotis pisanja kakega optimiziranga algoritma ali podatkovne strukture, ti mora biti precej jasno kako deluje celoten memory sistem (cache miss, cache line), sploh kaki de/compression algoritmi so zanimivi (kjer recimo manjsi buffer lahko da vecjo hitrost kot vecji buffer, ker mu rata zbasati vse v low level cache, itd...).
Abnormal behavior of abnormal brain makes me normal...


Vredno ogleda ...

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

while in for odštevanje - kot rezultat upošteva tudi izhodiščno vrednost

Oddelek: Programiranje
181955 (1678) slitkx
»

problem v pythonu

Oddelek: Programiranje
12969 (749) Meizu
»

[C++] for {}

Oddelek: Programiranje
291612 (1306) Gundolf
»

Desktop aplikacije večinoma niso multithreaded??? (strani: 1 2 )

Oddelek: Programiranje
554567 (3813) Gundolf
»

Časovna zahtevnost programa

Oddelek: Programiranje
61500 (1379) CaqKa

Več podobnih tem