Probléma

Megpróbálom kiszámítani a CPU / GPU FLOPS teljesítményét, de nem vagyok biztos benne, hogy jól csinálom-e .

Mondjuk azt, hogy:

  • Kaby Lake CPU (óra: 2,8 GHz, magok: 4, szálak: 8)
  • Pascal GPU (óra: 1,3 GHz, magok: 768).

Ez a Wiki oldal azt mondja, hogy a Kaby Lake CPU-k kiszámítják 32 FLOPS (single precision FP32) és Pascal kártya 2 FLOPS-ot (single precision FP32) számol, ami azt jelenti, hogy a következő képletek segítségével kiszámíthatjuk teljes FLOPS teljesítményüket:

CPU:

TOTAL_FLOPS = 2.8 GHz * 4 cores * 32 FLOPS = 358 GFLOPS 

GPU:

TOTAL_FLOPS = 1.3 GHz * 768 cores * 2 FLOPS = 1996 GFLOPS 

Kérdések

  1. [MEGOLDVA] A legtöbb útmutató, amelyet láttam (például ez) fizikai magokat használnak a képletben. Amit nem értek, az miért van ne használjon szálakat (logikai magokat) helyette? Nincsenek olyan szálak, amelyeket kifejezetten a lebegőpontos számítások teljesítményének megduplázására hoztak létre? Miért hagyjuk akkor figyelmen kívül ezeket?

  2. [SOLVED] Egyáltalán helyesen csinálom? Nem találtam egyetlen megbízható forrást a FLOPS kiszámításához, az interneten található összes információ ellentmondásos. Az i7 7700HQ Kaby Lake CPU esetében a FLOPS-értékeket olyan alacsonynak találtam, mint 29 GFLOPS , annak ellenére, hogy a fenti képlet 358 GFLOPS-ot ad meg. Nem tudom, mit higgyek.

  3. Van-e a Node.js / Python / C ++ programban olyan cross-platform (Win, Mac, Linux) könyvtár, amely csak az összes A GPU statisztikák, mint az árnyékoló magok, az óra, a rendelkezésre álló utasításkészletek (vagy az FP32, FP64 FLOPS értékek), így magam is kiszámolhatnám a maximális elméleti teljesítményt? Elég nevetséges, hogy nem tudjuk közvetlenül a CPU / GPU-tól beszerezni a FLOPS statisztikákat, ehelyett le kell töltenie és elemeznie kell egy wiki oldalt az érték megszerzéséhez. Még a C ++ használata esetén is úgy tűnik (valójában nem tudom) le kell töltenünk a 2 GB-os CUDA eszköztárat, hogy hozzáférhessünk az alapvető Nvidia GPU-információkhoz, például a magok mennyiségéhez – ami gyakorlatilag lehetetlenné teszi az alkalmazás elkészítését mások számára elérhető, mivel senki nem töltene le 2 GB-os alkalmazást.

Megjegyzések

  • Részleges válaszként hidd el, amit hívsz ” szálak ” egy trükk, amely lehetővé teszi, hogy egy mag egyszerre két szálnak tűnjön (hiper -threading), miközben csak egy tényleges fizikai maggal rendelkezem, amellyel kiszámítható. Nem vagyok teljesen biztos abban, hogy az Intel hogyan csinálta ezt, de úgy gondolom, hogy köze van a csővezetékekben lévő lyukak kitöltéséhez. ha valami nehéz dolgot számol, de sok általánosabb esetre asztali operációs rendszer esetén ennek van értelme. Ha érdekel a tényleges számítási teljesítmény, bár ez általában nem
  • @KyleMandli köszönöm a pontosítást, feltételezem, hogy van értelme
  • A javasolt számítás egyik része a frekvencia. Feltételezem, hogy tisztában van vele, hogy a modern hardvereknél nincs a frekvencia. A működési frekvencia a hőmérséklet és az áramfelvétel (pl. A legtöbb GPU), az utasításkészlet-használat és -kihasználtság (pl. A legtöbb x86-os CPU), valamint az összes említett tényező függvényében változhat.
  • Ön ‘ ll mindenhol a MHz-et GHz-re kell cserélni.
  • Nincsenek ‘ s egyetlen ” tényleges ” teljesítmény. Például a Volta GPU-n lévő nagy mátrixok szorzásakor az én ” tényleges ” teljesítményem megközelíti az elméleti, 90 Tops / másodperc értéket. Eközben a resnet-50 kiképzésénél ‘ 20 másodperc / másodperc – medium.com/@yaroslavvb/…

Válasz

Ezt kiszámíthatja a GFLOP arányaival módon, de a számok meglehetősen értelmetlenek a mai hardveren:

  • A lebegőpontos műveletekhez változó számú óraciklus szükséges. Az összeadás általában olcsóbb, mint a szorzás, de mindegyik általában a 2,8 milliárd ciklusból egynél több órajelet vesz igénybe.

  • Ha hiperszálas, két szál fut egy magon, de a magnak továbbra is csak egy lesz lebegőpontos összeadó egységet, és így a két szál nem képes egyszerre lebegőpontos összeadást végrehajtani.

  • A lebegőpontos műveletek energiához éhesek, és az energia hővé alakul. Amikor sok FLOP-ot hajt végre, a processzorok túlmelegednek és lecsökkentik az órajel-frekvenciájukat.

  • Ha megfelelő utasításokat használ, lebegőpontos szorzás-összeadás (FMA) műveleteket hajthat végre, amelyek gyorsabbá teszik a szorzást és összeadást, mint ezeket a műveleteket külön elvégezve.

  • Hasonlóképpen, a SIMD utasításokkal a mag ugyanazt a műveletet végezheti el egyszerre több adaton – mondjuk, adjon hozzá négy pár lebegőpontos számot, így 4 FLOP lesz ugyanabban az időben. Ehhez azonban olyan problémára van szükség, ahol egy algoritmus valóban megköveteli ennek megtörténtét, ahelyett, hogy az első kiegészítés eredményeit felhasználná a másodikba. Ennek következtében a SIMD utasításai csak a egyes algoritmusok futtatásának sebességéhez járulnak hozzá, másokhoz azonban nem.

  • A legfontosabb, hogy általában szeretnék műveleteket végrehajtani a memóriából származó adatokkal, de az adatok áthelyezése a fő memóriából a processzorra jóval tovább tart, mint bármely tényleges művelet végrehajtása az adatokkal – például 100-szor hosszabb tényező (nagyságrend). Tehát a processzorok valós elméleti lebegőpontos teljesítményének csak kis részét nem látja valós alkalmazásokban: általában lényegesen kevesebb, mint az elméleti csúcsteljesítmény 10% -a.

Más szavakkal, a csúcsteljesítmény kiszámítása egyfajta értelmetlen vállalkozássá vált: Ennek semmi köze nincs a processzor tényleges teljesítményéhez.

Megjegyzések

  • Azt is megvitathatja, hogy a SIMD lebegőpontos egységei miként növelhetik az elméleti csúcsteljesítményt.
  • Köszönöm a hozzászólást, srácok, megértem ezeket a pontokat és megértem, hogy milyen előrehaladott utasítások vannak. A készletek befolyásolják a lebegőpontos teljesítményt. Azt hiszem, ‘ egyelőre csak ragaszkodom az elméleti maximumhoz. Szeretném, ha lenne legalább egy képlet, amely csak a tényleges FLOPS teljesítményt közelítené a CPU-hoz egy adott függvény kiszámításához szükséges.
  • @AlekseyHoffman Nincs képlet, csak mérések vannak. div id = “fd68a555a6”>

s miért a TOP 500 lista a tényleges teljesítményméréseken alapszik, nem az elméleti csúcsteljesítményen.

  • @BrianBorchers Igen, jó ötlet.
  • Válasz

    Yoy oroszul tud olvasni – hogyan kell kiszámítani a FLOPS .

    A GHz nem mutatja a FLOPS-ot. Az egyik azonos GHz-es processzor sokkal gyorsabb lehet, mint a másik ugyanazzal a GHz-mel.

    P.S. gpu-s ” rx 590 ” és nagyon régi ” r7 250x ” GHz-je majdnem azonos. De … ez még nem is megfelelő teljesítményük összehasonlításához)

    Hozzászólások

    • Üdvözlöm a Scicomp-ban! A stackexchange-ben jobb, ha a post önálló (lásd itt ). Kérjük, a bejegyzés javítása érdekében próbálja meg szerkeszteni a választ a cikk alapvető információival.

    Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük