Problem

Jeg prøver at beregne CPU / GPU FLOPS ydeevne, men jeg er ikke sikker på, om jeg gør det korrekt .

Lad os sige, at vi har:

  • En Kaby Lake CPU (ur: 2,8 GHz, kerner: 4, tråde: 8)
  • En Pascal GPU (ur: 1,3 GHz, kerner: 768).

Denne Wiki-side siger, at Kaby Lake CPUer beregner 32 FLOPS (enkelt præcision FP32) og Pascal-kort beregner 2 FLOPS (enkelt præcision FP32), hvilket betyder, at vi kan beregne deres samlede FLOPS-ydeevne ved hjælp af følgende 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 

Spørgsmål

  1. [SOLVED] De fleste guider, jeg har set (som denne) bruger fysiske kerner i formlen. Det jeg ikke forstår er hvorfor ikke bruge tråde (logiske kerner) i stedet? Var der ikke tråde oprettet specifikt for at fordoble flydepunktsberegningernes ydeevne? Hvorfor ignorerer vi dem så?

  2. [LØST] Gør jeg det overhovedet korrekt? Jeg kunne ikke finde en enkelt pålidelig kilde til beregning af FLOPS, al information på internettet er modstridende. Til i7 7700HQ Kaby Lake CPU fandt jeg FLOPS-værdier så lave som 29 GFLOPS , selvom ovenstående formel giver os 358 GFLOPS. Jeg ved ikke, hvad jeg skal tro.

  3. Er der et cross-platform (Win, Mac, Linux) bibliotek i Node.js / Python / C ++, der bare returnerer alle de GPU-statistik som skyggekerner, ur, tilgængelige instruktionssæt (eller FP32, FP64 FLOPS-værdier), så jeg selv kunne beregne den maksimale teoretiske ydeevne? Det er ret latterligt, at vi ikke kan få FLOPS-statistikken direkte fra CPU / GPU, i stedet for skal downloade og analysere en wiki-side for at få værdien. Selv når du bruger C ++, ser det ud til (jeg ved det faktisk ikke), at vi er nødt til at downloade 2 GB CUDA-værktøjssættet bare for at få adgang til de grundlæggende Nvidia GPU-oplysninger som mængden af kerner – hvilket ville gøre det praktisk umuligt at lave appen tilgængelig for andre, da ingen ville downloade en 2 GB-app.

Kommentarer

  • Som et delvis svar jeg tro hvad du kalder ” tråde ” er et trick, der giver mulighed for en kerne til at være vært for, hvad der ligner to tråde ad gangen (hyper mens jeg kun har ægte at have en egentlig fysisk kerne at beregne med. Jeg er ikke helt sikker på detaljerne i, hvordan Intel gjorde dette, men jeg tror, det har at gøre med at udfylde huller i rørledninger og sådan. Dette vil i princippet ikke ske hvis du beregner noget tungt, men for mange mere almindelige brugssager til et desktop-OS giver det mening. Hvis du er interesseret i faktisk beregningsgennemstrømning, selvom dette normalt ikke er co unted.
  • @KyleMandli tak for afklaringen, jeg antager, at det giver mening
  • En del af den foreslåede beregning er frekvens. Jeg antager, at du er opmærksom på, at der med moderne hardware ikke er frekvensen. Driftsfrekvensen vil variere afhængigt af temperatur og strømforbrug (f.eks. De fleste GPUer) eller instruktionssæt brug og anvendelse (f.eks. De fleste x86 CPUer) og muligvis alle de nævnte faktorer.
  • Du ‘ skal erstatte MHz overalt med GHz.
  • Der ‘ er ingen enkelt ” faktisk ” ydeevne. For eksempel når jeg multiplicerer store matricer på Volta GPUer, er min ” faktiske ” ydeevne tæt på teoretisk, 90 Tops / sekund. I mellemtiden træner resnet-50, det ‘ ligner mere på 20 toppe / sekund – medium.com/@yaroslavvb/…

Svar

Du kan beregne GFLOP-priser dette måde, men tallene er ret meningsløse på nutidens hardware:

  • Flydende punktoperationer kræver et variabelt antal urcyklusser. En tilføjelse er generelt billigere end en multiplikation, men hver generelt tager mere end en urcyklus af de 2,8 milliarder cykler, du helt.

  • Når du har hypertråd, har du to tråde, der kører på en kerne, men kernen vil stadig kun have en flydende punkt tilføjelsesenhed og så de to tråde ikke kan udføre flydende tilføjelsesenheder på samme tid.

  • Flydende punktoperationer er energisultne, og energi omdannes til varme. Når du laver mange FLOPer, overophedes processorer og nedtager deres urfrekvenser.

  • Hvis du bruger de rigtige instruktioner, kan du udføre FMA-operationer med flydende punkt, der gør en multiplikation-og-tilføjelse hurtigere end at udføre disse operationer separat.

  • På samme måde kan en kerne med SIMD-instruktioner udføre den samme operation på flere stykker data på samme tid – sig, tilføj fire par flydende punktum sammen, hvilket giver 4 FLOPer på samme tid. Men dette kræver at have et problem, hvor en algoritme faktisk kræver, at dette sker, snarere end at bruge resultaterne af den første tilføjelse i den anden. Som en konsekvens bidrager SIMD-instruktioner kun til den hastighed, hvormed nogle algoritmer kan udføres, men ikke andre.

  • Vigtigst er det, at du generelt ønsker at udføre operationer på data fra hukommelse, men at flytte data fra hovedhukommelse til processoren tager langt langt længere end faktisk at udføre nogen operationer på dataene – som en faktor på 100 længere (størrelsesorden). Så du ser generelt ikke engang en lille brøkdel af den teoretiske ydeevne for floating point for processorer i reelle applikationer: generelt mindre end 10% af den teoretiske topydelse.

Med andre ord er beregning af toppræstationer blevet en slags meningsløs forretning: Det har ikke meget at gøre med en processors faktiske ydeevne.

Kommentarer

  • Du kan også diskutere, hvordan SIMD-enheder med flydende punkt kan øge den teoretiske topydelse.
  • Tak for dit input, fyre, jeg forstår disse punkter og forstår, hvordan avancerede instruktioner sæt påvirker flydende præstations ydeevne. Jeg antager, at jeg ‘ bare holder fast med det teoretiske max for nu. Jeg ville ønske, at der i det mindste var en formel, der ville tilnærme sig den faktiske FLOPS-præstation lige fra det tidspunkt det tager for CPU at beregne en bestemt funktion.
  • @AlekseyHoffman Der er ingen formel, bare målinger. div id = “fd68a555a6”>

hvorfor TOP 500-listen er baseret på faktiske målinger af ydeevne, ikke teoretisk top ydeevne.

  • @BrianBorchers Ja, god idé.
  • Svar

    Yoy kan læse på russisk – hvordan man beregner FLOPS .

    GHz viser ikke FLOPS. En processor med samme GHz kan være meget hurtigere end den anden med samme GHz.

    P.S. gpu-s ” rx 590 ” og meget gammel ” r7 250x ” har næsten samme GHz. Men … dette er endda ikke korrekt for at sammenligne deres præstationer)

    Kommentarer

    • Hej velkommen til scicomp! I stackexchange er det bedre at have indlæg selvstændigt (se her ). For at forbedre indlægget skal du prøve at redigere svaret med artikelens kerneoplysninger.

    Skriv et svar

    Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *