Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: počet operací za sekunud

Aktivity
Avatar
mara
Člen
Avatar
mara:14.5.2015 17:24

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:14.5.2015 18:05

Co je podle tebe ta operace za sekundu? :)

Nahoru Odpovědět
14.5.2015 18:05
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na mara
Tomáš Maňhal:14.5.2015 18:23

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

 
Nahoru Odpovědět
14.5.2015 18:23
Avatar
mara
Člen
Avatar
Odpovídá na Luboš Běhounek Satik
mara:14.5.2015 18:43

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
Odpovídá na mara
Patrik Valkovič:14.5.2015 18:57

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 Valkovič
mara:14.5.2015 19:20

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
Odpovídá na mara
Patrik Valkovič:14.5.2015 19:24

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
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 Valkovič
mara:14.5.2015 19:37

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
Tvůrce
Avatar
Odpovídá na mara
coells:14.5.2015 20:38

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í
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
14.5.2015 20:38
Avatar
David Novák
Tvůrce
Avatar
David Novák:14.5.2015 21:05

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:14.5.2015 21:54

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
Tvůrce
Avatar
Odpovídá na David Novák
coells:14.5.2015 22:11

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
Tvůrce
Avatar
Odpovídá na mranakonda47
coells:14.5.2015 22:17

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
Tvůrce
Avatar
Odpovídá na coells
David Novák:14.5.2015 22:49

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:15.5.2015 17:02

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.