Problém
Snažím se vypočítat výkon CPU / GPU FLOPS, ale nejsem si jistý, jestli to dělám správně .
Řekněme, že máme:
- CPU Kaby Lake (takt: 2,8 GHz, jádra: 4, vlákna: 8)
- Pascal GPU (takt: 1,3 GHz, jádra: 768).
Tato stránka Wiki říká, že výpočetní procesory Kaby Lake 32 karet FLOPS (FP32 s jednou přesností) a Pascal počítá 2 FLOPS (FP32 s jednou přesností), což znamená, že můžeme vypočítat jejich celkový výkon FLOPS pomocí následujících vzorců:
CPU:
TOTAL_FLOPS = 2.8 GHz * 4 cores * 32 FLOPS = 358 GFLOPS
GPU:
TOTAL_FLOPS = 1.3 GHz * 768 cores * 2 FLOPS = 1996 GFLOPS
Dotazy
-
[ŘEŠENO] Většina průvodců, které jsem viděl (jako tento) používají ve vzorci fyzická jádra. Nerozumím tomu proč místo toho nepoužívat vlákna (logická jádra)? Nebyly vytvořeny vlákna speciálně pro zdvojnásobení výkonu výpočtů s plovoucí desetinnou čárkou? Proč je tedy ignorujeme?
-
[ŘEŠENO] Dělám to vůbec správně? Nemohl jsem najít jediný spolehlivý zdroj pro výpočet FLOPS, všechny informace na internetu si odporují. U procesoru i7 7700HQ Kaby Lake jsem zjistil, že hodnoty FLOPS jsou tak nízké jako 29 GFLOPS , i když výše uvedený vzorec nám dává 358 GFLOPS. Nevím, čemu mám věřit.
-
Existuje knihovna pro více platforem (Win, Mac, Linux) v Node.js / Python / C ++, která právě vrátí všechny Statistiky GPU jako stínovací jádra, hodiny, dostupné instrukční sady (nebo hodnoty FP32, FP64 FLOPS), abych mohl sám vypočítat maximální teoretický výkon? Je docela směšné, že nemůžeme získat statistiky FLOPS přímo z CPU / GPU, místo toho jsme musíte stáhnout a analyzovat wiki stránku, abyste získali hodnotu. I při použití C ++ se zdá (vlastně nevím), že si musíme stáhnout 2 GB CUDA sadu nástrojů, abychom získali přístup k základním informacím Nvidia GPU, jako je množství jader – což by prakticky znemožnilo aplikaci k dispozici pro ostatní, protože by si nikdo nestáhl 2 GB aplikaci.
Komentáře
- Jako částečnou odpověď I věřte tomu, co voláte “ threads “ je trik, který umožňuje jádru hostit to, co vypadá jako dvě vlákna najednou (hyper -threading), zatímco pouze reálné s jedním skutečným fyzickým jádrem pro výpočet. Nejsem si úplně jistý podrobnostmi toho, jak to Intel udělal, ale myslím, že to má co do činění s vyplňováním otvorů v potrubí a podobně. To se v zásadě nestane pokud počítáte něco těžkého, ale pro mnoho běžnějších případů použití pro desktopový OS to dává smysl. Pokud vás zajímá skutečná propustnost, i když to obvykle není co unted.
- @KyleMandli díky za objasnění, předpokládám, že to dává smysl
- Jednou částí navrhovaného výpočtu je frekvence. Předpokládám, že jste si vědomi, že u moderního hardwaru není frekvence . Provozní frekvence se bude lišit v závislosti na teplotě a odběru energie (např. Většina GPU) nebo využití a využití sady instrukcí (např. Většina procesorů x86) a případně všech zmíněných faktorech.
- You ‚ Budu muset všude nahradit MHz GHz.
- ‚ neexistuje žádný jediný “ skutečný “ výkon. Například při násobení velkých matic na grafických procesorech Volta se můj “ skutečný “ výkon blíží teoretickému, 90 topů za sekundu. Mezitím trénuje resnet-50, ‚ je to více než 20 topů / sekundu – medium.com/@yaroslavvb/…
Odpověď
Můžete vypočítat sazby GFLOP takto způsobem, ale čísla jsou na dnešním hardwaru docela nesmyslná:
-
Operace s pohyblivou řádovou čárkou vyžadují proměnlivý počet hodinových cyklů. Sčítání je obecně levnější než násobení, ale každé obecně trvá více než jeden hodinový cyklus z 2,8 miliardy cyklů, které máte.
-
Když máte hyperthreading, máte dvě vlákna běžící na jednom jádru, ale jádro bude mít stále jen jeden jednotka s plovoucí desetinnou čárkou, takže obě vlákna nemohou současně provádět sčítání s plovoucí desetinnou čárkou.
-
Operace s plovoucí desetinnou čárkou jsou energeticky náročné a energie se převádí na teplo. Když děláte hodně FLOPů, procesory se přehřívají a snižují své taktovací frekvence.
-
Pokud používáte správné pokyny, můžete provádět operace s násobným přidáním s plovoucí desetinnou čárkou (FMA), díky nimž je násobení a sčítání rychlejší než provádění těchto operací samostatně.
-
Podobně s instrukcemi SIMD může jádro provádět stejnou operaci na více kusech dat najednou – řekněme, přidat čtyři páry čísel s plovoucí desetinnou čárkou dohromady, čímž se získá 4 FLOPy ve stejnou dobu. Ale to vyžaduje problém, kde algoritmus ve skutečnosti vyžaduje, aby se to stalo, spíše než použití výsledků prvního přidání ve druhém. V důsledku toho pokyny SIMD přispívají pouze k rychlosti, s jakou lze některé algoritmy provádět, ale jiné nikoli.
-
Nejdůležitější je, že obvykle chci provádět operace s daty z paměti, ale přesun dat z hlavní paměti do procesoru trvá mnohem déle, než ve skutečnosti provádět jakékoli operace s daty – jako faktor o 100 delší (řádově). Obecně tedy nevidíte ani malý zlomek teoretického výkonu s plovoucí desetinnou čárkou procesorů ve skutečných aplikacích: obecně podstatně méně než 10% teoretického špičkového výkonu.
Jinými slovy, výpočet špičkového výkonu se stal jakýmsi nesmyslným obchodem: Nemá to nic společného se skutečným výkonem procesoru.
Komentáře
- Můžete také diskutovat o tom, jak jednotky SIMD s plovoucí desetinnou čárkou mohou zvýšit teoretický špičkový výkon.
- Děkuji za váš vstup, lidi, těmto bodům rozumím a chápu, jak pokročilé pokyny množiny ovlivňují výkon s plovoucí desetinnou čárkou. Myslím, že se ‚ prozatím držím teoretické max. Přál bych si, aby existoval alespoň vzorec, který by aproximoval skutečný výkon FLOPS od té doby CPU potřebuje k výpočtu konkrétní funkce.
- @AlekseyHoffman Neexistuje žádný vzorec, pouze měření. To ‚ proč je seznam TOP 500 založen na skutečných měřeních výkonu, nikoli na teoretickém špičkovém výkonu.
- @BrianBorchers Ano, dobrý nápad.
Odpověď
Yoy umí číst v ruštině – jak vypočítat FLOPS .
GHz neukazuje FLOPS. Jeden procesor se stejným GHz může být mnohem rychlejší než druhý se stejným GHz.
P.S. gpu-s “ rx 590 “ a velmi starý “ r7 250x “ mají téměř stejné GHz. Ale … to není ani správné k porovnání jejich výkonu)
Komentáře
- Ahoj vítejte na scicompu! V stackexchange je lepší mít samostatný příspěvek (viz zde ). Chcete-li příspěvek vylepšit, zkuste upravit odpověď se základními informacemi článku.