Problème
Jessaye de calculer les FLOPS CPU / GPU mais je ne sais pas si je le fais correctement .
Disons que nous avons:
- Un processeur Kaby Lake (horloge: 2,8 GHz, cœurs: 4, threads: 8)
- Un GPU Pascal (horloge: 1,3 GHz, cœurs: 768).
Cette page Wiki indique que les processeurs Kaby Lake calculent 32 FLOPS (FP32 simple précision) et cartes Pascal calculent 2 FLOPS (FP32 simple précision), ce qui signifie que nous pouvons calculer leurs performances FLOPS totales en utilisant les formules suivantes:
CPU:
TOTAL_FLOPS = 2.8 GHz * 4 cores * 32 FLOPS = 358 GFLOPS
GPU:
TOTAL_FLOPS = 1.3 GHz * 768 cores * 2 FLOPS = 1996 GFLOPS
Questions
-
[RESOLU] La plupart des guides que » jai vus (comme celui-ci) utilisent des cœurs physiques dans la formule. Ce que je ne comprends pas, c’est pourquoi pas utiliser des threads (cœurs logiques) à la place? Les threads nont pas été créés spécifiquement pour doubler les performances des calculs en virgule flottante? Pourquoi les ignorons-nous alors?
-
[RESOLU] Est-ce que je le fais correctement? Je nai pas pu trouver une seule source fiable pour calculer les FLOPS, toutes les informations sur Internet sont contradictoires. Pour le processeur i7 7700HQ Kaby Lake, jai trouvé des valeurs FLOPS aussi basses que 29 GFLOPS même si la formule ci-dessus nous donne 358 GFLOPS. Je ne sais pas quoi croire.
-
Existe-t-il une bibliothèque multiplateforme (Win, Mac, Linux) dans Node.js / Python / C ++ qui renvoie simplement tous les Statistiques GPU comme les cœurs dombrage, lhorloge, les jeux dinstructions disponibles (ou les valeurs FP32, FP64 FLOPS) pour que je puisse calculer moi-même les performances théoriques maximales? Cest assez ridicule de ne pas pouvoir obtenir les statistiques FLOPS directement du CPU / GPU, au lieu de cela nous doivent télécharger et analyser une page wiki pour obtenir la valeur. Même en utilisant C ++, il semble (je ne sais pas vraiment) que nous devions télécharger la boîte à outils CUDA de 2 Go juste pour avoir accès aux informations de base du GPU Nvidia comme la quantité de cœurs – ce qui rendrait pratiquement impossible la création de lapplication disponible pour les autres, car personne ne téléchargerait une application de 2 Go.
Commentaires
- En tant que réponse partielle I croyez que ce que vous appelez » threads » est une astuce qui permet à un cœur dhéberger ce qui ressemble à deux threads à la fois (hyper -threading) tout en nayant quun seul cœur physique réel pour calculer avec. Je ne suis pas entièrement sûr des détails de la façon dont Intel a fait cela, mais je pense que cela a à voir avec le remplissage de trous dans les pipelines et autres. Cela ne se produira en principe pas si vous calculez quelque chose de lourd, mais pour de nombreux cas dutilisation plus courants dun système dexploitation de bureau, cela a du sens. Si vous êtes intéressé par le débit de calcul réel, bien que ce ne soit généralement pas co unted.
- @KyleMandli merci pour la clarification, je suppose que cela a du sens
- Une partie du calcul proposé est la fréquence. Je suppose que vous savez quavec du matériel moderne, il ny a pas la fréquence. La fréquence de fonctionnement variera en fonction de la température et de la consommation dénergie (par exemple, la plupart des GPU), ou de lutilisation et de lutilisation du jeu dinstructions (par exemple la plupart des processeurs x86), et éventuellement de tous les facteurs mentionnés.
- Vous ‘ ll faudra remplacer MHz partout par GHz.
- Il ny a ‘ aucun » performances » réelles. Par exemple, lors de la multiplication de grandes matrices sur des GPU Volta, mes performances » réelles » sont proches de la théorie, 90 Tops / seconde. Pendant lentraînement à resnet-50, il ‘ ressemble plus à 20 tops / seconde – medium.com/@yaroslavvb/…
Réponse
Vous pouvez calculer les taux GFLOP ceci moyen, mais les nombres nont pas de sens sur le matériel actuel:
-
Les opérations en virgule flottante nécessitent un nombre variable de cycles dhorloge. Un ajout est généralement moins cher quune multiplication, mais chacun en général prend plus dun cycle dhorloge sur les 2,8 milliards de cycles que vous avez tout à fait.
-
Lorsque vous avez lhyperthreading, vous avez deux threads fonctionnant sur un cœur, mais le cœur nen aura toujours quun unité daddition en virgule flottante et donc les deux threads ne peuvent pas exécuter des additions en virgule flottante en même temps.
-
Les opérations en virgule flottante sont gourmandes en énergie, et lénergie est convertie en chaleur. Lorsque vous faites beaucoup de FLOP, les processeurs surchauffent et abaissent leurs fréquences dhorloge.
-
Si vous utilisez les bonnes instructions, vous pouvez effectuer des opérations de multiplication en virgule flottante (FMA) qui rendent une multiplication et une addition plus rapides que de faire ces opérations séparément.
-
De même, avec les instructions SIMD, un cœur peut effectuer la même opération sur plusieurs éléments de données en même temps – par exemple, ajouter quatre paires de nombres à virgule flottante ensemble, ce qui donne 4 FLOP à la fois. Mais cela nécessite davoir un problème où un algorithme exige en fait que cela se produise, plutôt que dutiliser les résultats du premier ajout dans le second. En conséquence, les instructions SIMD ne contribuent quà la vitesse à laquelle certains algorithmes peuvent être exécutés, mais pas dautres.
-
Plus important encore, vous serez généralement veulent effectuer des opérations sur les données de la mémoire, mais le déplacement des données de la mémoire principale vers le processeur prend beaucoup plus de temps que de faire des opérations sur les données – comme un facteur 100 de plus (ordre de grandeur). Ainsi, vous ne voyez généralement même pas une petite fraction des performances théoriques en virgule flottante des processeurs dans les applications réelles: généralement nettement moins de 10% des performances de pointe théoriques.
En d’autres termes, calculer les performances de pointe est devenu une sorte d’affaire dénuée de sens: cela n’a rien à voir avec les performances réelles d’un processeur.
Commentaires
- Vous pourriez également discuter de la façon dont les unités à virgule flottante SIMD peuvent augmenter les performances de pointe théoriques.
- Merci pour votre contribution, les gars, je comprends ces points et je comprends à quel point les instructions avancées les ensembles affectent les performances en virgule flottante. Je suppose que je ‘ je men tiendrai au maximum théorique pour le moment. il faut au CPU pour calculer une fonction spécifique.
- @AlekseyHoffman Il ny a pas de formule, juste des mesures. div id = « fd68a555a6 »>
s pourquoi la liste TOP 500 est basée sur des mesures réelles de performances, pas sur des performances théoriques de haut niveau.
Réponse
Vous pouvez lire en russe – comment calculer les FLOPS .
GHz naffiche pas FLOPS. Un processeur avec le même GHz peut être beaucoup plus rapide que lautre avec le même GHz.
P.S. gpu-s » rx 590 » et très ancien » r7 250x » ont presque le même GHz. Mais … ce nest même pas correct de comparer leurs performances. Dans stackexchange, il est préférable davoir des messages autonomes (voir ici ). Sil vous plaît, pour améliorer le message, essayez de modifier la réponse avec les informations de base de larticle.