» »

Frekvenca procesorja in hitrost grafičnih aplikacij

Frekvenca procesorja in hitrost grafičnih aplikacij

marjan_h ::

Imam eno nenavadno vprašanje, zanima me zakaj pri hitrejših procesorjih, recimo igra ne deluje hitreje.

Gledal sem en video na youtube, kako je nekdo navil procesor od gameboya in nato poganjal igre pri 2x hitrosti procesorja, pri tem se je gameplay tudi 2x pohitril, pri višjih frekvencah pa je igra crashala.

Če poženem na računalniku recimo eno dos igro, se igranje ne bo pohitrilo, samo več slik na sekundo se bo izrisalo.

Zakaj in kakšna je razlika med gameboyem (konzolo) in računalnikom?

Zheegec ::

Najbrž je problem, da DOS igro emuliraš v DosBox ali v čem podobnem... V pravem "native" DOS pa načeloma je tako če najdeš dovolj stare igre.
"božja zapoved pravi; <Spoštuj očeta in mater>,
ne govori pa o spoštovanju sodstva."
Janez Janša, 29.04.2014

Sssaga ::

Zakaj stare igre (hitman I) delajo na novejših sistemih (Pentium IV) veliko hitreje in zakaj mi je delal Death Rally preko DOS-a zelo počasi na novem sistemu Windows 7?
Če ima kdo ''ta težko'' razlago... :)

hojnikb ::

zato, ker so vse frekvence vezane na frekvenco tistega "procesorja", stvar deluje hitreje. GB pač nima v-synca in je delan le za eno fiksno frekvenco, kar potem prinese ta speedhack..
#brezpodpisa

Senitel ::

Ko imaš eno zaprto "škatlo", točno veš kolikokrat "utripne", torej koliko kode lahko v tistem času izvede. Ni nič nenavadnega, če na "gameboyu" predvidiš, da boš sliko in kompletno logiko igre končal recimo v 33 milisekundah in veš tudi, da bo CPU v tem času premlel približno točno 150000 operacij (5MHz). Če zadevo naviješ za 2x, bo v tem času naredila 2x več operacij in tudi špil bo izpljunil 2x več sličic.

Na PC-jih (in tudi konzolah) tega ne moreš vedet natančno. Kot prvo imaš tisoče različnih kombinacij strojne opreme, kot drugo imaš zadaj večopravilen OS in tvoja igra "tekmuje" še z ostalimi opravili na sistemu. Zato se računa razlike v času med dvema sličicama, kar pomeni, da se update veže na neko dejansko uro in ne direktno na število ciklov CPU-ja.
Če imaš počasno kišto bo sfolgala npr. eno sliko vsakih 33 milisekund. Hitrejši računalnik bo v enakih pogojih za eno sliko porabil 16 milisekund. Tudi izrisal bo 2x več slik, ampak dogajanje v igri se bo pa odvijalo enako hitro (če boš "tekel 60m", bo to na obeh računalnikih trajalo "8 sekund").

Je pa tukaj cel kup pasti. Tudi starim igram, ki so sicer sinhronizirane na dejansko uro, se lahko na novi super zmogljivi strojni opremi "odpelje". Lahko računalnik tako hitro konča slikico, da uporabljena ura sploh ne izmeri razlike. Teh timer-jev je na razpolago precej, in niso vsi enako natančni. Lahko so razlike sicer izmerjene pravilno, ampak je logika posodobitev statusa problematična in ne dela pravilno za tako majhne razlike (Quake je recimo tipičen primer tega, kjer je cel kup "hackov", ki delujejo samo na dovolj velikih FPS-jih).

marjan_h ::

Sedaj sem pa v dilemi, dva različna odgovora.


@hojnikb

Torej, če ne bi bilo vertikalne sinhronizacije(v-sync), kjer monitor dejansko refresha sliko konstantno recimo pri 60Hz. Bi pomenilo da pri 120fps igra teče 2x hitreje (speedhack). Tako kot pri GB.

@Senitel

Če te dobro razumem, se potem igra sinhronizira na neko drugo uro, in ne uro CPU-ja. Je ta ura potem dosežena programsko, in zato programerji poskrbijo, da ne bi prišlo do pohitritve?

Hmm, zanimivo.

Senitel ::

Jah očitno imaš vsaj dve uri. Eno je števec ciklov na CPU-ju, drugo je sistemska ura, oziroma koledar/čas. Prvi se poveča za 1 recimo 2.000.000.000x na sekundo (2GHz). To uro lahko naviješ in se bo povečala za 1 npr. 2.200.000.000x na sekundo (2,2GHz). Drugi se npr. poveča za 1 točno vsako sekundo.

Namen prvega ni merjenje časa, ampak v bistvu samo šteje operacije, ki jih je CPU izvedel. Lahko privzameš, da bo CPU izvedel 2.000.000.000 operacij v eni sekundi. Ampak lahko daš v kišto hitrejši CPU, počasnejši CPU, lahko "naviješ" CPU, lahko se CPU sam "odvije", ker nima kaj počet,... in v teh primerih je tvoja predpostavka takoj napačna. Vse fizikalne formule imajo "na sekundo", "na sekundo^2",... Pa pustmo strica Plancka mal na strani. >:D

Če imaš napravo, ki teče konstantno z 5.000.000 cikli na sekundo, potem lahko iz tega čisto enostavno izračunaš dejanski čas oziroma razliko. Če imaš pa naprave, katerih CPU-ji tečejo od 1GHz pa do 3GHz in lahko svojo frekvenco še dinamično spreminjajo pa je to samo še en števec, ki nima enostavne povezave s časom in dejansko sploh ni ura. Sekunda po definiciji je 9,192,631,770 "ciklov" med dvema stanjema cezijeva 133 atoma. Nekaj kar je univerzalno enako v celem vesolju.

Hec je tudi, če imaš en enostaven side view scroller na gameboy-u (in jasno hardware, ki se ne spreminja) lahko točno izračunaš koliko ciklov boš potreboval za izris slike in posodobitev stanja igre. Lahko narediš celo tako, da bo ciklov vedno isto.
Če imaš pa neko 3D igro, kjer je igralec svoboden od vsega, pa tega ne moreš naredit. Če gleda v modro nebo brez oblačka bo to pokurilo bistveno manj ciklov na GPU-ju kot pa en gozd z 20000 drevesi.

Isotropic ::

gameboy tudi softversko izrisuje grafiko, cpu pa v bistvu samo preda obdelane podatke (fiziko recimo) naprej graficni kartici, ki je obicajno bottleneck. ce imas preslaboten cpu in orenk mocno graficno, se bo pa tudi takoj videlo, ko bodo igrice lavfale z istim st. slicic ne glede na resolucijo (do neke zgornje meje sicer, ampak recimo med 1680 - 1900).
(se mi zdi)

marjan_h ::

Senitel to si vse lepo razložil, vendar ta ura ki sem jo jaz imel v mislih ni sistemska ura, ali pa "ura" ampak frekvenca s katero niha tisti piezoelektrični kristal not v procesorju. In če ta niha z 2 Ghz, potem se neka koda izvede 2x hitreje kot če bi nihal z frekvenco 1 Ghz. Pa pustimo zdej prekinitve pa pasti na stran.

In če se neka koda izvede 2x hitreje to pomeni, da v igri bi zaznali hitrejše premikanje. Tako kot pri gameboyu.

Primer gameboy advance deluje pri 16Mhz, medtem ko gameboy color le pri 8Mhz. Vendar igre ki so narejene za color normalno tečejo na advance. Zakaj? Zato ker ima advance dva koprocesorja eden ki ima frekvenco uro 4 Mhz (za prvi GB) in eden z 8Mhz(za color). Zato deluje normalno.

Kaj hudiča je potem pri računalnikih drugače?

hojnikb ::

Senitel je izjavil:

Ko imaš eno zaprto "škatlo", točno veš kolikokrat "utripne", torej koliko kode lahko v tistem času izvede. Ni nič nenavadnega, če na "gameboyu" predvidiš, da boš sliko in kompletno logiko igre končal recimo v 33 milisekundah in veš tudi, da bo CPU v tem času premlel približno točno 150000 operacij (5MHz). Če zadevo naviješ za 2x, bo v tem času naredila 2x več operacij in tudi špil bo izpljunil 2x več sličic.

Na PC-jih (in tudi konzolah) tega ne moreš vedet natančno. Kot prvo imaš tisoče različnih kombinacij strojne opreme, kot drugo imaš zadaj večopravilen OS in tvoja igra "tekmuje" še z ostalimi opravili na sistemu. Zato se računa razlike v času med dvema sličicama, kar pomeni, da se update veže na neko dejansko uro in ne direktno na število ciklov CPU-ja.
Če imaš počasno kišto bo sfolgala npr. eno sliko vsakih 33 milisekund. Hitrejši računalnik bo v enakih pogojih za eno sliko porabil 16 milisekund. Tudi izrisal bo 2x več slik, ampak dogajanje v igri se bo pa odvijalo enako hitro (če boš "tekel 60m", bo to na obeh računalnikih trajalo "8 sekund").

Je pa tukaj cel kup pasti. Tudi starim igram, ki so sicer sinhronizirane na dejansko uro, se lahko na novi super zmogljivi strojni opremi "odpelje". Lahko računalnik tako hitro konča slikico, da uporabljena ura sploh ne izmeri razlike. Teh timer-jev je na razpolago precej, in niso vsi enako natančni. Lahko so razlike sicer izmerjene pravilno, ampak je logika posodobitev statusa problematična in ne dela pravilno za tako majhne razlike (Quake je recimo tipičen primer tega, kjer je cel kup "hackov", ki delujejo samo na dovolj velikih FPS-jih).

best answer ever ;)
to pojasne dosti hackov pri teh fps igrah ;)
#brezpodpisa

Senitel ::

marjan_h je izjavil:

Senitel to si vse lepo razložil, vendar ta ura ki sem jo jaz imel v mislih ni sistemska ura, ali pa "ura" ampak frekvenca s katero niha tisti piezoelektrični kristal not v procesorju. In če ta niha z 2 Ghz, potem se neka koda izvede 2x hitreje kot če bi nihal z frekvenco 1 Ghz. Pa pustimo zdej prekinitve pa pasti na stran.

To katera ura ti misiliš, da se uporablja je čisto brez pomena. Ti zgleda živiš v svetu kjer obstaja samo ena, jaz ti pa dopovedujem, da sta vsaj dve.

marjan_h je izjavil:

In če se neka koda izvede 2x hitreje to pomeni, da v igri bi zaznali hitrejše premikanje. Tako kot pri gameboyu.

Saj ga tudi na PC-ju zaznaš. Namesto 15 FPS na recimo GeForce GTX 280 imaš 100 FPS na GeForce GTX 680. Ni pa logika igre vezana na to, da se bo en frame renderiral 86400000 ciklov na GPU (ker to znese 66 ms na GTX 280, na GTX 680 pa jasno bistveno manj).

marjan_h je izjavil:

Primer gameboy advance deluje pri 16Mhz, medtem ko gameboy color le pri 8Mhz. Vendar igre ki so narejene za color normalno tečejo na advance. Zakaj? Zato ker ima advance dva koprocesorja eden ki ima frekvenco uro 4 Mhz (za prvi GB) in eden z 8Mhz(za color). Zato deluje normalno.

Kaj hudiča je potem pri računalnikih drugače?

In kaj je tukaj tvoj point? To niso koprocesorji. Če na gameboy advance poganjaš igro za klasičen gameboy bo tekla izključno na 4MHz CPU-ju, če imaš igro za gameboy color bo tekla izključno na 8MHz CPU-ju.
Tvoj nov shiny Ivy Bridge nima fizično gor še: 5MHz 286 jedro, 25MHz 286 jedro, 12Mhz 386 jedro, 25MHz 386 jedro, 33MHz 386 jedro,...

Če delaš igro za gameboy "clasic" se lahko komot zanašaš na to, da bo CPU naredil 4 miljarde ciklov v sekundi.
Na današnjih konzolah in PC-jih, se ne moreš zanašat, da bo na 2GHz CPU TSC v petih sekundah povečal za 50 miljard. Zato mora igra zanašat na kako dejansko uro.

marjan_h ::

Če prav, razumem se potem igra sinhronizira na neko drugo uro.

Vprašanje 1.

Kako je realizirana ta ura, programsko ali strojno?

Senitel ::

Več hardware-skih ur je v računalniku.

marjan_h ::

Na katero se potem sinhronizira poljubna igra? Imamo igre ki tečejo na 10Mhz-3Ghz.

Senitel ::

Nima veze katero. Na eno, ki dejansko meri čas, ne pa samo šteje nekaj.

marjan_h ::

Aja!, sedaj razumem. Pri PC igrah se sinhronizira na uro ki meri čas, in zato se stvari ne premikajo hitreje. Vendar zakaj pa potem pri gameboyu, ne rešujejo težavo na isti način.

Kot si rekel da bi bila neka hardwareska ura not ki meri čas.

Senitel ::

Saj ziher je tudi tam hardwareska ura. Ampak je odločitev programerja kaj bo dejansko uporabil. Če delaš igro za gameboy potem je tudi cpu time stamp counter dovolj dobra ura, ker bo zadeva vedno tekla z isto hitrostjo (dokler nekdo ne navije CPU-ja).

marjan_h ::

hmm, ok hvala sedaj je vse skupaj smiselno.

r3dkv1c4 ::

senitel...reci mi nekaj po vsem tem kar si opisal me nekaj zanima......vzemiva recimo neko grafo ki izrisuje 100 sličic na sek....

proc dela na frek. 2ghz

če navijes proc ALI grafo ALI oboje vedno ostane fps enak.

Kaj je problem??

stock ::

CPU računa spremembe glede na prostor v določenem času. Ko GPU dobi podatek nariše sliko. Hitrejša kot sta oba bolše je. Več kot je sprememb več je v uporabi tudi grafična. Sinhrono ujemanje pa rata pri 30+ fps

Pri OCju ne bo veš fps-jev v primeru da navijaš tisto komponento, ki je hitrejša. Če CPU zračuna 100 premikov, GPU pa jih komaj nariše 20, ne boš nič pridobil če naviješ CPU, ker že tako ne uspe zračunat 100, slik, torej jih tudi 120 ne bo. Enako če imaš 20 premikov, GPU nariše 20 slik, ne boš nič pridobil če naviješ GPU, ker več kot 20 različnih slik nimaš za računat.

Senitel ::

r3dkv1c4 je izjavil:

senitel...reci mi nekaj po vsem tem kar si opisal me nekaj zanima......vzemiva recimo neko grafo ki izrisuje 100 sličic na sek....

proc dela na frek. 2ghz

če navijes proc ALI grafo ALI oboje vedno ostane fps enak.

Kaj je problem??

To je tako generalno vprašanje brez enega samega odgovora. Lahko je tudi igra omejena tako, da ne gre čez določen framerate ker: "je brez veze", "samo kuri štrom", "so programerji slišali kaj se lahko zgodi s fiziko",...
Lahko pa je ozko grlo kakšna ne takoj očitna stvar. Recimo L2 cache na CPU.

marjan_h ::

Ja to je zanimivo vprašanje,

Senitel, vendar zakaj je recimo hitrost vodila veliko manjša od hitrosti CPU?

Če imamo CPU 2Ghz pa želi komunicirati z grafično, vodilo preko katerega se pošlje podatek je recimo samo 500 Mhz.

Potem se vse skupaj upočasni, zakaj se to dela?

Senitel ::

Kako upočasni? Če ti pošlješ nekaj iz točke A do točke B te zanima samo koliko časa bo to trajal in koliko lahko pošlješ. Koliko časa bo prenos trajal sploh ni odvisno od frekvence vodila, koliko lahko pošlješ je pa samo delno odvisno od frekvence vodila.

Obenem pa povsem narobe razumeš kaj je sploh vloga GPU-ja. Zakaj bi moral CPU stalno komunicirat z GPU-jem? Ves point GPU-jev je v temu, da se CPU-ju ni treba ubadat z grafiko. Grafičen driver na CPU-ju sestavi paketek in ga pošlje na GPU. To je to. Hočeš izrisat 1000 trikotnikov? Driver pošlje lokacijo v GPU pomnilniku, kjer se začne geometrija, število trikotnikov za izrisat in to je to. Manj kot 100 bajtov, GPU bo pa zaseden za kar lepo število ciklov.


Vredno ogleda ...

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

nova grafična in intel q6600

Oddelek: Strojna oprema
403037 (2246) severjug
»

Radeon 4870 in Crysis

Oddelek: Strojna oprema
482048 (1375) SebaR
»

Grafični Motorji (strani: 1 2 )

Oddelek: Igre
553837 (2537) Senitel
»

Izdan 3DMark05

Oddelek: Novice / Grafične kartice
312955 (2955) lukanium

Več podobnih tem