Avatar
mara
Člen
Avatar
mara:

Ahojte, zajímalo by mě, kolik operací za sekundu provádí moje mobilní aplikace naprogramovaná v javě. Neví někdo, jak se to dá zjistit ?
děkuji :)

Editováno 14.5.2015 17:25
Odpovědět 14.5.2015 17:24
Co na srdci, to na Facebooku
Avatar
Odpovídá na mara
Luboš Běhounek (Satik):

Co je podle tebe ta operace za sekundu? :)

Nahoru Odpovědět 14.5.2015 18:05
:)
Avatar
tomasmanhal
Člen
Avatar
Odpovídá na mara
tomasmanhal:

Operace za sekundu se měří u procesoru ne?...a ne u aplikací.

Nahoru Odpovědět 14.5.2015 18:23
Kdyby nám dodali k životu zdrojový kód, vše by bylo jednodušší...
Avatar
mara
Člen
Avatar
Odpovídá na Luboš Běhounek (Satik)
mara:

Aha, ale myslel jsem, že aplikace například hra vykonává nějaké úkony (operace), které se dají měřit. tak to nic, ale díky :)

Editováno 14.5.2015 18:44
Nahoru Odpovědět 14.5.2015 18:43
Co na srdci, to na Facebooku
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na mara
patrik.valkovic:

To není tak snadné jak si myslíš. I ASM příkazy se nevykonávají na jeden tik procesoru (podmínka se myslím vykoná třeba na tři tiky). Takže na té nejprimitivnější úrovni můžeš počítat tiky procesoru za sekundu. Ale vzhledem k tomu, že tě procesor může kdykoliv odpojit a nastoupí jiný proces, nejde to hodnotit objektivně.
U Javy je to ještě trošku komplikovanější, protože nevíš, co na pozadí dělá.
Pokud máš nějakou část kódu, a chceš zjistit kolikrát za sekundu proběhně, jednoduše dej na konec kódu počitadlo a po sekundě se vždy podívej, kolik jsi napočítal + vynuluj. U her se napříkald klasicky měří FPS.

Nahoru Odpovědět 14.5.2015 18:57
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
mara
Člen
Avatar
Odpovídá na patrik.valkovic
mara:

díky. já to v FPS měřím, ale jen mě zajímalo, jestli to nejde měřit na procesy, protože dělám projekt o vývoji počítačů a chtěl jsem tam pro zajímavost dát, kolik procesů se vykonává na tu hru, co jsem naprogramoval, aby si to mohli lépe představit. vím, která část a kolikrát za sekundu se opakuje, ale je mi jasný, že všechno není na jeden proces, jak jsi psal, tak nemůžu spočítat řádky kódu. Stačilo by to jen orientačně. Nevíš o nějakým způsobu ? Chtěl jsem to pro zajímavost porovnávat se starýma počítačema, kolik procesů oni byly schopni za sekundu vykonat a kolik je potřeba na nějakou primitivní hru.
Děkuji Marek

Nahoru Odpovědět 14.5.2015 19:20
Co na srdci, to na Facebooku
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na mara
patrik.valkovic:

Myslím, že si pleteš pojmy. Proces je něco úplně jiného a nemá s tím nic společného.
Čistě teoreticky neměl by být udávaný takt počet tiků za sekundu?

Nahoru Odpovědět  +1 14.5.2015 19:24
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
mara
Člen
Avatar
Odpovídá na patrik.valkovic
mara:

Tak teď tě moc nechápu. Moc se zrovna tady v tomto nevyznám. Všude u počítačů je udávaný, kolik provádějí operací za sekundu. Potřeboval bych to nějak úplně jednoduše, aby to pochopil každý k něčemu přirovnat. Jak to mám udělat ? Přirovnávat to k nějakým dnešním počítačům se mi moc nezdá, tak jsem myslel, že by to šlo přirovnat, kolik operací vykonává počítač na to, aby jsi mohl hrát nějakou hru, a proto jsem chtěl nechat nějak změřit ty operace.

Nahoru Odpovědět 14.5.2015 19:37
Co na srdci, to na Facebooku
Avatar
coells
Redaktor
Avatar
Odpovídá na mara
coells:

Zjednodušeně řečeno, takové porovnání není možné.

Pokud rozdělím procesory na "staré" a "nové", dostanu jednoznačný řez - Intel CPU 486SX/DX/DX2 a Intel Pentium (I).

Až do doby 486 se rychlost CPU měřila v počtu cyklů za vteřinu, a i když dnešní procesory stále používají stejné značení (např. Intel Core i7 3.2GHz), je dneska tahle hodnota z hlediska výkonu naprosto nevýznamná. Takže pokud například přemýšlíš, které CPU dát do sestavy, tak bys měl číslo před GHz ignorovat.

"Stará" CPU měla pevně dané tabulky, které udávaly, kolik cyklů stojí každá instrukce. Jenže výkon šel neustále nahoru a začalo být jasné, že pokud bychom měli dosáhnout dnešního výkonu na tehdejší architektuře, CPU by se jednoduše roztavilo.

Řešením byla architektura RISC (Reduced instruction set computing), která dokázala řádově zvednout výkon při snížené taktovací frekvenci. Jenže Intel nemohl zahodit celou svoji instrukční sadu, to by z obchodního hlediska byla sebevražda, takže Pentium bylo první CPU, které mělo CISC architekturu (Complex instruction set computing) na RISC jádře.

První Pentia tak měla mnohem nižší taktovací frekvenci než 486, tuším, že to bylo 60MHz, ale stále byla daleko rychlejší. Proč? Trik spočívá v tom, co umí dnešní procesory.

Každá instrukce, kterou má CPU zpracovat, se musí nahrát, dekódovat a provést (zjednodušeně řečeno, reálně tam je mnohem více fází). A když se jedna instrukce provádí, část CPU se nudí, takže mezitím může zpracovávat další instrukce, tomu se říká pipeline. Ta umožňuje zpracování řady instrukcí naráz.

Dalším velice pomalým faktorem je paměť. CPU dnes neumí pracovat s jedním bytem. Místo toho si je schopno nahrávat větší bloky do paměti umístěné přímo v čipu, té se říká L2 a L3 cache, která je řádově rychlejší, než obyčejná RAM. Jenže, co když daný blok paměti není v cache? Pokud instrukce vyvolá výjimku při přístupu do paměti z důvodu cache-miss, bude taková instrukce trvat například 20 cyklů místo 1 cyklu při cache-hit.

Moderní procesory jsou navíc daleko chytřejší, než tušíš. Pokud je řada instrukcí na sobě nezávislá, dokáže je procesor provést současně v rámci jednoho cyklu. Ke všemu dokáže také identifikovat, jestli provedení instrukcí v opačném pořadí nebude rychlejší, a pokud ano, provede je tak, jak to bude nejrychlejší.

Pokud do toho zamícháme SSE a MMX instrukce, dostaneme se ještě dál, protože můžeš udělat řadu teoretických operací v jediném kroku. To samé platí pro vektorová CPU, která jsou schopna zpracovávat stovky nebo tisíce teoretických operací v jediném kroku.

Dodnes platí, že nejhorší instrukce je podmíněný skok. Pokud by podmíněný skok trval 3 cykly, jak píše Patrik (přesněji, Patrik píše "podmínka", ale CPU podmínku nemá, není to vězeň), byli bychom vysmátí. V praxi stojí podmíněný skok 1 cyklus, ale chybně predikovaný podmíněný skok je extrémně drahá záležitost. Predikce podmínek souvisí s CPU pipeline a je to technika, kdy se CPU snaží uhádnout, jestli se skok provede nebo ne. Chybný odhad je jedna z nejpomalejší věcí, která se na CPU může stát, a stojí mnohem více než 3 cykly.

Takže jak z toho ven? Jak už jsem řekl, taktovací frekvence není důležitá, dokonce je i matoucí. Pokud máš 4-jádro na 3GHz, znamená to obvykle, že hlavní jádro je taktované na 3GHz a zbylá 3 jádra mají např. 1.5GHz. Z toho důvodu se u procesorů uvádí teoretický výkon v jednotkách FLOPS (FLoating-point Operations Per Second), což je teoretická hranice výkonu procesoru. Teoretická proto, že v praxi záleží na typu algoritmu a reálný výkon se může drasticky lišit. Občas se dokonce povede teoretickou hranici prolomit.

Závěr? Není možné porovnávat stará a nová CPU.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +6 14.5.2015 20:38
Avatar
David Novák
Tým ITnetwork
Avatar
David Novák:

tak čistě teoreticky by šlo spočítat počet operací, ze kterých je program složen. Těžko říct, jestli na to někdo něco napsal.. Mohlo by to být celkem komplikované.

Taková informace je ti stejně ale asi k ničemu, protože když budeš mít cyklus, který provádí 10 operací a projdeš jím 10x, provede se 100 a ty dopředu nevíš. Takže tohle by jsi mohl spočítat jen, kdybys měl pevně dané aributy a program by se provedl pokaždé stejně (což naprostá většina nesplňuje).

U hry počet operací určitě spočítat nemůžeš - hra poběží pokaždé jinak dlouho a jiným způsobem.

Pak můžeš měřit spotřebovaný procesorový čas - např. v Céčku je na to fce clock() - http://www.cplusplus.com/…ctime/clock/
Ta ti řekne, kolik času aplikace spotřebovala. Pro porovnání to ale můžeš použít jen na jednom konkrétním počítači s konkrétním nastavením a OS.

Nahoru Odpovědět 14.5.2015 21:05
Chyba je mezi klávesnicí a židlí.
Avatar
mranakonda47
Člen
Avatar
mranakonda47:

K tomu počítaniu operácií - dá sa spočítať najvyšší možný počet operácií, kt. sa vykoná (asymptotická notace O). Ten sa dá efektívne využiť na porovnanie algoritmov. Podrobnejšie o tom píše David Čápka:

http://www.itnetwork.cz/…st-stabilita

Ale ako už bolo spomenuté, k porovnaniu CPU to nijak nepomôže.

 
Nahoru Odpovědět 14.5.2015 21:54
Avatar
coells
Redaktor
Avatar
Odpovídá na David Novák
coells:

V tom je právě ten trik - stejná instrukce v cyklu se může provádět různě dlouho během různých průchodů. To má dva důsledky:

  1. u algoritmů, kde na rychlosti opravdu záleží, se používá debugger napojený přímo na CPU pro optimalizaci instrukčního toku
  2. nevyplatí se používat assembler z důvodu rychlosti (až na výjimky), protože C kompilátor vygeneruje instrukce optimalizované pro aktuální CPU a napsat ručně rychlejší kód je nesmírně těžké

Navíc už neplatí ani argument s asymptotickou složitostí. Konstantní faktor je tak rozdílný, že jednodušší algoritmus s kubickou složitostí bude v praxi vždy rychlejší než složitější algoritmus se skoro kvadratickou složitostí.

 
Nahoru Odpovědět 14.5.2015 22:11
Avatar
coells
Redaktor
Avatar
Odpovídá na mranakonda47
coells:

Jestli se chceš dozvědět něco o složitosti algoritmu, můžeš si přečíst Introduction to Algorithms, autor je hodný i na začátečníky http://www.amazon.com/…4/ref=sr_1_1?…

 
Nahoru Odpovědět 14.5.2015 22:17
Avatar
David Novák
Tým ITnetwork
Avatar
Odpovídá na coells
David Novák:

jj, já vím.. Proto lze teoreticky spočítat počet vykonaných instrukcí, ale nemá to skoro žádnou informační hodnotu..

Nahoru Odpovědět 14.5.2015 22:49
Chyba je mezi klávesnicí a židlí.
Avatar
mara
Člen
Avatar
mara:

Aha :) všem moc děkuji. :) Tak to nijak počítat nebudu.

Nahoru Odpovědět 15.5.2015 17:02
Co na srdci, to na Facebooku
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 15 zpráv z 15.