Problem

Jag försöker beräkna CPU / GPU FLOPS-prestanda men jag är inte säker på om jag gör det korrekt .

Låt oss säga att vi har:

  • En Kaby Lake-processor (klocka: 2,8 GHz, kärnor: 4, trådar: 8)
  • En Pascal GPU (klocka: 1,3 GHz, kärnor: 768).

Denna Wiki-sida säger att Kaby Lake-processorer beräknar 32 FLOPS (enkel precision FP32) och Pascal-kort beräknar 2 FLOPS (enkel precision FP32), vilket innebär att vi kan beräkna deras totala FLOPS-prestanda med följande formler:

CPU:

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

GPU:

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

Frågor

  1. [SOLVED] De flesta guider jag har sett (som den här) använder fysiska kärnor i formeln. Vad jag inte förstår är varför använder du inte trådar (logiska kärnor) istället? Var inte trådar skapade specifikt för att fördubbla prestandan för flytpunktsberäkningarna? Varför ignorerar vi dem då?

  2. [LÖST] Gör jag det rätt alls? Jag kunde inte hitta en enda tillförlitlig källa för beräkning av FLOPS, all information på internet är motsägelsefull. För i7 7700HQ Kaby Lake CPU hittade jag FLOPS-värden så låga som 29 GFLOPS även om formeln ovan ger oss 358 GFLOPS. Jag vet inte vad jag ska tro.

  3. Finns det ett plattformsbibliotek (Win, Mac, Linux) i Node.js / Python / C ++ som bara returnerar alla GPU-statistik som skuggkärnor, klocka, tillgängliga instruktionsuppsättningar (eller FP32, FP64 FLOPS-värden) så att jag själv kunde beräkna den maximala teoretiska prestandan? måste ladda ner och analysera en wiki-sida för att få värdet. Även när man använder C ++ verkar det (jag vet inte riktigt) att vi måste ladda ner 2 GB CUDA-verktygssatsen bara för att få tillgång till den grundläggande Nvidia GPU-informationen som mängden kärnor – vilket skulle göra det praktiskt taget omöjligt att göra appen tillgänglig för andra, eftersom ingen skulle ladda ner en 2 GB-app.

Kommentarer

  • Som ett delvis svar jag tro vad du kallar ” trådar ” är ett trick som gör det möjligt för en kärna att vara värd för det som ser ut som två trådar åt gången (hyper -trådning) medan det bara är en riktig fysisk kärna att beräkna med. Jag är inte helt säker på detaljerna om hur Intel gjorde det men jag tror att det har att göra med att fylla i hål i rörledningar och sådant. Detta kommer i princip inte att hända om du beräknar något tungt men för många vanligare användningsfall för ett stationärt operativsystem är det meningsfullt. Om du är intresserad av faktiskt beräkningsflöde men detta är vanligtvis inte co unted.
  • @KyleMandli tack för förtydligandet, jag antar att det är vettigt
  • En del av den föreslagna beräkningen är frekvensen. Jag antar att du är medveten om att det med modern hårdvara inte finns frekvensen. Arbetsfrekvensen kommer att skilja sig beroende på temperatur och effektuttag (t.ex. de flesta GPU: er), eller instruktionsuppsättning och användning (t.ex. de flesta x86-processorer) och eventuellt alla nämnda faktorer. fd68a555a6 ”>

måste ersätta MHz överallt med GHz.

  • Det finns ’ ingen enskild ” verklig ” prestanda. När jag till exempel multiplicerar stora matriser på Volta GPU: er, är min ” faktiska ” prestanda nära teoretisk, 90 toppar / sekund. Under tiden tränar resnet-50, det ’ är mer som 20 toppar / sekund – medium.com/@yaroslavvb/…
  • Svar

    Du kan beräkna GFLOP-priser detta sätt, men siffrorna är ganska meningslösa på dagens hårdvara:

    • Flytpunktsoperationer kräver ett varierande antal klockcykler. Ett tillägg är i allmänhet billigare än en multiplikation, men var och en generellt tar mer än en klockcykel av de 2,8 miljarder cyklerna du ganska.

    • När du har hypertråd, har du två trådar som körs på en kärna, men kärnan har fortfarande bara en Flytpunktsadditionsenhet och så att de två trådarna inte kan utföra flytpunktsadditioner samtidigt.

    • Flytpunktsoperationer är energihungriga och energi omvandlas till värme. När du gör många FLOP: er överhettas processorerna och stänger av deras klockfrekvenser.

    • Om du använder rätt instruktioner kan du utföra FMA-operationer (floating point multiply-add) som gör en multiplikation och tillägg snabbare än att göra dessa operationer separat.

    • På samma sätt, med SIMD-instruktioner, kan en kärna göra samma operation på flera datadelar samtidigt – säg, lägg till fyra par flytpunktsnummer tillsammans, vilket ger 4 FLOP på samma gång. Men detta kräver att du har ett problem där en algoritm faktiskt kräver att detta händer, snarare än att använda resultaten av det första tillägget i det andra. Som en konsekvens bidrar SIMD-instruktioner bara till den hastighet med vilken vissa algoritmer kan köras, men inte andra.

    • Viktigast av allt kommer du generellt vill göra operationer på data från minnet, men att flytta data från huvudminnet till processorn tar långt mycket längre tid än att faktiskt göra några operationer på data – som en faktor 100 längre (storleksordning). Så du ser vanligtvis inte ens en liten bråkdel av processornas teoretiska floating point-prestanda i verkliga applikationer: i allmänhet väsentligt mindre än 10% av den teoretiska topprestanda.

    Med andra ord har beräkning av toppprestanda blivit ett meningslöst företag: Det har inte mycket att göra med processorns faktiska prestanda.

    Kommentarer

    • Du kan också diskutera hur SIMD-enheter med flytpunkt kan öka den teoretiska topprestanda.
    • Tack för din inmatning, killar, jag förstår dessa punkter och förstår hur avancerade instruktioner uppsättningar påverkar flytande punktprestanda. Jag antar att jag ’ Jag håller bara med det teoretiska maxet för tillfället. Jag önskar att det fanns åtminstone en formel som skulle approximera den faktiska FLOPS-prestandan precis från tiden det tar för CPU att beräkna en specifik funktion.
    • @AlekseyHoffman Det finns ingen formel, bara mätningar. div id = ”fd68a555a6”>

    varför TOP 500-listan baseras på faktiska mått på prestanda, inte teoretisk topprestanda.

  • @BrianBorchers Ja, bra idé.
  • Svar

    Yoy kan läsa på ryska – hur man beräknar FLOPS .

    GHz visar inte FLOPS. En processor med samma GHz kan vara mycket snabbare än den andra med samma GHz.

    P.S. gpu-s ” rx 590 ” och mycket gammal ” r7 250x ” har nästan samma GHz. Men … detta är inte ens korrekt för att jämföra deras prestanda)

    Kommentarer

    • Hej välkommen till scicomp! I stackexchange är det bättre att ha post självständigt (se här ). Snälla, för att förbättra inlägget, försök att redigera svaret med kärninformationen i artikeln.

    Lämna ett svar

    Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *