Zdravím, chtěl bych se zeptat, když se mluví o IPC u x86tek (nebo i jiných CISC jader)...má se na mysli počet microOPS/takt nebo počet "makro/ciscových" instrukcí/takt? Vždy jsem totiž předpokládal, že se mají na mysli právě "makro" instrukce...protože to jsou ty co tvoří instrukční sadu (navenek)...takže IPC by se mělo udávat logicky asi v nich...je tento předpoklad správný, nebo jsem úplně mimo? A pokud to jsou opravdu makro ins/takt....potom IPC x86 a ARM jader asi nejde jen tak porovnávat?
Smysl má asi mluvit jenom o IPC těch instrukcí x86, protože počet těch mikroOPů, které z toho uvnitř jádra CPU udělá, může kolísat.
Jinak když se o tom IPC mluví, tak se (většinou) nemyslí nějaké konkrétní číslo, ale poměrné porovnání mezi dvěma architekturami - například zvýšení IPC mezi starším a novějším jádrem, srovnání IPC mezi dvěma jádry různých výrobců a tak. To se dá celkem dobře změřit tím, že se vezme výkon v nějakém benchmarku a vydělí se to jako frekvencí nebo lépe se to změří na stejné frekvenci. Ono to stejně platí jen pro jednu konkrétní úlohu, protože to "IPC" se liší podle programu. Takže takhle v tom kontextu, jak to tady používáme, tak se tím vlastně myslí abstraktně něco jako průměr IPC přes větší množství aplikací. Ale zase když se bude zvýšením IPC o x % chlubit nějaký výrobce CPU, tak to může mít podložené zase třeba jenom jednou aplikací, v které to zrovna vychází hezky.
To IPC sa hlavne používa na tak široký záber vecí, že s pôvodným významom IPC to nemá už takmer nič spoločné.
Dnešné CPU sú príliš netransparentné (najmä x86 ktoré sa ani nelicencujú) a IPC sa dá zmerať akurát na simulátore.
V reálnych testoch zasahuje príliš veľa premenných, okrem spomenutej pamäte aj spomenutý RISC86 (či už rozklad alebo fúzia inštrukcií), niektoré inštukcie sa preskakujú úplne, niektoré podľa stavu, ďalej tu je vektorizácia (v x86 prakticky nieje kód bez SSE/AVX) a v neposlednom rade aj turbo alebo throtling...
Tiež je povedzme kontroverzné porovnávať IPC alebo celkový výkon samotného procesora v SPEC benchmarkoch. Pokiaľ viem tak nesprávna verzia/nastavenie kompilátora tam má väčší vplyv ako použitie +/- 2 generácie staršieho Xeonu. SPEC by som bral za smerodajný maximálne pri porovnaní dvoch inštalovaných systémov, aj tam by som si musel byť istý.
To len na okraj pretože pre toho kto berie IPC v klasickom zmysle môžu byť tieto prehlásenia mätúce.
Děkuji za odpověď, já si jsem vědom toho že IPC je jen průměrná hodnota, která se v podstatě nikde absolutně neudává a pouze se dávají do poměru IPC různých jader (i když by mě celkem zajímalo jaké je zhruba průměrné IPC Zen/Skylake opravdu číselně vyjádřené)..že se bude IPC lišit podle toho jak zrovna strojový kód daného programu architektuře a možnostem jádra "sedne" tomu "rozumím". Pokud to teda celé dobře chápu, tak to že bude mít ARMové jádro stejné IPC jako pomyslné x86 v nějakém SW ani zdaleka neznamená že by při stejném taktu měly mít tyto dvě jádra i stejný "výkon" že? Protože stejný program zapsaný x86 instrukcemi jich bude mít daleko méně než ten pro to RISCové jádro, třeba i pouze polovinu. To by znamenalo že runtime toho programu na x86 bude poloviční oproti tomu na RISC jádru -> to x86 jádro má při stejné f a stejném průměrném IPC 2x vyšší výkon (- přece jenom to stihlo dvakrát rychleji/za polovinu času). Takže to, že nějaké budoucí ARM jádro dožene IPC Intelu ještě vůbec neznamená, že dohnalo jeho skutečný výkon, ani při stejné frekvenci. Nejsem si jist jestli jsou mé úvahy správné takže bych chtěl poprosit ještě o ujasnění tohoto "problému". Předem děkuji a přeji hezký den.
Jen by jaksi postrádalo smysl to nazývat IPC.
Kdysi dávno se rychlost měřila v převrácené hodnotě, tedy v CPI a tam to bylo jasné. Každá konkrétní instrukce vždy trvala pevně daný počet cyklů, takže se nechaly dva různé procesory krásně porovnat a to v čemkoliv a nemuselo se to ani testovat.
Dneska je doba trvání instrukce proměnlivá v rozmezí dvou řádů, záleží na vytížení výpočetních jednotek i na tom, jestli je paměťová buňka nacachovaná, případně v které cachi se nachází. Takže jinak, než tím benchmarkem se to změřit nedá. Problém benchmarku ale je v tom, že nikdy nebude objektivní, protože jednomu procesoru se vejde do cache, druhému ne, pro jeden procesor bude mít instrukce správně poskládané, pro druhý ne.