Forum » Programiranje » 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č!
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.
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.
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/
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...
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.
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
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 ()
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 ::
@terryww
http://news.ycombinator.com/item?id=514...
http://forum.osdev.org/viewtopic.php?f=...
http://www.reddit.com/r/programming/com...
Sicer pa vabljen, da se nam pridružiš na http://www.cppgm.org/index.htmlA je to joke?
http://news.ycombinator.com/item?id=514...
http://forum.osdev.org/viewtopic.php?f=...
http://www.reddit.com/r/programming/com...
Zgodovina sprememb…
- spremenilo: Randomness ()
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...).
* 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 ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | while in for odštevanje - kot rezultat upošteva tudi izhodiščno vrednostOddelek: Programiranje | 2141 (1864) | slitkx |
» | problem v pythonuOddelek: Programiranje | 1055 (835) | Meizu |
» | [C++] for {}Oddelek: Programiranje | 1712 (1406) | Gundolf |
» | Desktop aplikacije večinoma niso multithreaded??? (strani: 1 2 )Oddelek: Programiranje | 4885 (4131) | Gundolf |
» | Časovna zahtevnost programaOddelek: Programiranje | 1602 (1481) | CaqKa |