Probleem

Ik probeer CPU / GPU FLOPS-prestaties te berekenen, maar ik weet niet zeker of ik het correct doe .

Laten we zeggen dat we hebben:

  • Een Kaby Lake CPU (klok: 2,8 GHz, cores: 4, threads: 8)
  • Een Pascal GPU (klok: 1,3 GHz, cores: 768).

Deze Wiki-pagina zegt dat Kaby Lake CPUs berekenen 32 FLOPS- (single-precision FP32) en Pascal-kaarten berekenen 2 FLOPS (single-precision FP32), wat betekent dat we hun totale FLOPS-prestaties kunnen berekenen met behulp van de volgende formules:

CPU:

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

GPU:

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

Vragen

  1. [SOLVED] De meeste gidsen die ik heb gezien (zoals deze) gebruiken fysieke kernen in de formule. Wat ik niet begrijp is waarom in plaats daarvan geen threads (logische kernen) gebruiken? Zijn “t threads speciaal gemaakt om de prestaties van drijvende-kommaberekeningen te verdubbelen? Waarom negeren we ze dan?

  2. [OPGELOST] Doe ik het überhaupt goed? Ik kon geen enkele betrouwbare bron vinden voor het berekenen van FLOPS, alle informatie op internet is in tegenspraak. Voor de i7 7700HQ Kaby Lake CPU vond ik FLOPS-waarden zo laag als 29 GFLOPS , hoewel de bovenstaande formule ons 358 GFLOPS geeft. Ik weet niet wat ik moet geloven.

  3. Is er een platformonafhankelijke (Win, Mac, Linux) bibliotheek in Node.js / Python / C ++ die gewoon alle GPU-statistieken zoals shading cores, klok, beschikbare instructiesets (of FP32, FP64 FLOPS-waarden) zodat ik zelf de maximale theoretische prestaties kan berekenen? Het is nogal belachelijk dat we de FLOPS-statistieken niet rechtstreeks van de CPU / GPU kunnen krijgen, maar we moet een wikipagina downloaden en ontleden om de waarde te krijgen. Zelfs als we C ++ gebruiken, lijkt het (ik weet het eigenlijk niet) dat we de 2 GB CUDA-toolkit moeten downloaden om toegang te krijgen tot de basisinformatie van de Nvidia GPU, zoals het aantal cores – wat het praktisch onmogelijk zou maken om de app te maken beschikbaar voor anderen, aangezien niemand een app van 2 GB zou downloaden.

Reacties

  • Als gedeeltelijk antwoord wil ik geloof dat wat je ” threads ” aanroept, een truc is waarmee een kern iets kan hosten wat lijkt op twee threads tegelijk (hyper -threading) terwijl er maar één echte fysieke kern is om mee te rekenen. Ik ben niet helemaal zeker over de details van hoe Intel dit deed, maar ik denk dat het te maken heeft met het opvullen van gaten in pijpleidingen en dergelijke. Dit zal in principe niet gebeuren als u iets zwaars berekent, maar voor veel meer voorkomende gebruiksscenarios voor een desktop-besturingssysteem, is dit logisch. Als u geïnteresseerd bent in daadwerkelijke computerdoorvoer, hoewel dit meestal niet hetzelfde is unted.
  • @KyleMandli bedankt voor de verduidelijking, ik neem aan dat dat logisch is
  • Een deel van de voorgestelde berekening is de frequentie. Ik neem aan dat u zich ervan bewust bent dat er bij moderne hardware geen de frequentie is. De bedieningsfrequentie zal verschillen op basis van temperatuur en stroomverbruik (bijv. De meeste GPUs), of gebruik en gebruik van instructiesets (bijv. De meeste x86-CPUs), en mogelijk alle genoemde factoren.
  • Jij ‘ Ik zal MHz overal moeten vervangen door GHz.
  • Daar ‘ is geen enkele ” werkelijke ” prestaties. Bij het vermenigvuldigen van grote matrices op Volta GPUs, is mijn ” werkelijke ” prestatie bijvoorbeeld bijna theoretisch, 90 tops / seconde. Ondertussen resnet-50 trainen, ‘ lijkt meer op 20 tops / seconde – medium.com/@yaroslavvb/…

Antwoord

U kunt dit GFLOP-tarief berekenen maar de getallen zijn vrij betekenisloos op de huidige hardware:

  • Floating point-bewerkingen vereisen een variabel aantal klokcycli. Een optelling is over het algemeen goedkoper dan een vermenigvuldiging, maar elk duurt meer dan één klokcyclus van de 2,8 miljard cycli die je behoorlijk doet.

  • Als je hyperthreading hebt, heb je twee threads op één kern, maar de kern heeft er nog steeds maar één Drijvende-komma-opteleenheid en dus kunnen de twee draden “niet tegelijkertijd drijvende-komma-optellingen uitvoeren.

  • Drijvende-kommabewerkingen zijn energie-hongerig en energie wordt omgezet in warmte. Wanneer je veel FLOPs doet, raken processors oververhit en verlagen ze hun klokfrequenties.

  • Als je de juiste instructies gebruikt, kun je drijvende-komma multiply-add (FMA) -bewerkingen uitvoeren die een vermenigvuldiging en optelling sneller maken dan deze bewerkingen afzonderlijk uit te voeren.

  • Op dezelfde manier kan een kern met SIMD-instructies dezelfde bewerking uitvoeren op meerdere gegevens tegelijk, bijvoorbeeld vier paar drijvende-kommagetallen bij elkaar optellen, wat 4 FLOPs oplevert tegelijkertijd. Maar dit vereist een probleem waarbij een algoritme dit eigenlijk vereist, in plaats van de resultaten van de eerste toevoeging in de tweede te gebruiken. Als gevolg hiervan dragen SIMD-instructies alleen bij aan de snelheid waarmee sommige algoritmen kunnen worden uitgevoerd, maar andere niet.

  • Het belangrijkste is dat u doorgaans bewerkingen willen uitvoeren op gegevens uit het geheugen, maar het verplaatsen van gegevens van het hoofdgeheugen naar de processor duurt veel langer dan het daadwerkelijk uitvoeren van bewerkingen op de gegevens – zoals een factor 100 langer (orde van grootte). Over het algemeen zie je dus niet eens een klein deel van de theoretische drijvende-kommaprestaties van processors in echte toepassingen: doorgaans aanzienlijk minder dan 10% van de theoretische topprestaties.

Met andere woorden, het berekenen van topprestaties is een soort van zinloze zaak geworden: het heeft niets te maken met de werkelijke prestaties van een processor.

Opmerkingen

  • Je zou ook kunnen bespreken hoe SIMD floating-point-eenheden de theoretische piekprestaties kunnen verhogen.
  • Bedankt voor je input, jongens, ik begrijp die punten en begrijp hoe geavanceerde instructies sets hebben invloed op de drijvende-kommaprestaties. Ik denk dat ik ‘ voorlopig gewoon bij het theoretische maximum zal blijven. Ik wou dat er op zijn minst een formule was die de werkelijke FLOPS-prestaties zou benaderen vanaf dat moment het kost de CPU om een specifieke functie te berekenen.
  • @AlekseyHoffman Er is geen formule, alleen metingen. Dat ‘ s waarom de TOP 500-lijst gebaseerd is op feitelijke prestatiemetingen, niet op theoretische topprestaties.
  • @BrianBorchers Ja, goed idee.

Answer

Yoy kan lezen in het Russisch – hoe FLOPS te berekenen .

GHz toont geen FLOPS. De ene processor met dezelfde GHz kan veel sneller zijn dan de andere met dezelfde GHz.

P.S. gpu-s ” rx 590 ” en heel oud ” r7 250x ” hebben bijna dezelfde GHz. Maar … dit is zelfs niet correct om hun prestaties te vergelijken)

Reacties

  • Hallo welkom bij scicomp! In stackexchange is het beter om post zelfstandig te hebben (zie hier ). Om het bericht te verbeteren, probeer het antwoord te bewerken met de kerninformatie van het artikel.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *