Pourquoi y a-t-il deux planificateurs de distorsion dans un SM de GPU?

Dongwei Wang

J'ai lu le livre blanc de NVIDIA Fermi et je suis confus lorsque j'ai calculé le nombre de cœurs SP, d'ordonnanceurs.

Selon le livre blanc, dans chaque SM, il y a deux ordonnanceurs de chaîne et deux unités de distribution d'instructions, permettant à deux chaînes d'être émises et exécutées simultanément. Il y a 32 cœurs SP dans un SM, chaque noyau a une ALU et un FPU entièrement pipelined, qui sont utilisés pour exécuter l'instruction d'un thread

Comme nous le savons tous, une chaîne est composée de 32 threads, si nous émettons simplement une chaîne à chaque cycle, cela signifie que tous les threads de cette chaîne occuperont tous les cœurs SP et termineront l'exécution en un cycle (supposons qu'il n'y ait pas de blocage ).

Cependant, NVIDIA conçoit un double planificateur, qui sélectionne deux warps, et émet une instruction de chaque warp à un groupe de seize cœurs, seize unités de chargement / stockage ou quatre SFU.

NVIDIA a déclaré que cette conception conduisait à des performances matérielles de pointe. Peut-être que les performances matérielles maximales proviennent de l'exécution entrelacée d'instructions différentes, en tirant pleinement parti des ressources matérielles.

Mes questions sont les suivantes (supposons qu'aucune mémoire ne se bloque et que tous les opérandes soient disponibles):

  1. Chaque warp a-t-il besoin de deux cycles pour terminer l'exécution et les 32 cœurs SP sont divisés en deux groupes pour chaque programmateur de warp?

  2. les unités ld / st et SFU sont partagées par toutes les déformations (ressemble à l'uniforme pour les déformations de deux planificateurs)?

  3. si une chaîne est divisée en deux parties, quelle partie est planifiée en premier? y a-t-il un planificateur? ou juste au hasard sélectionne une partie à exécuter.

  4. quel est l'avantage de cette conception? maximiser l'utilisation du matériel?

Robert Crovella

Chaque warp a-t-il besoin de deux cycles pour terminer l'exécution et les 32 cœurs SP sont divisés en deux groupes pour chaque programmateur de warp?

Oui. Fermi, contrairement aux générations futures, a une "hotclock" (shader clock) qui tourne à 2x l'horloge "core". Chaque instruction à virgule flottante de précision simple (par exemple) émet plus de 2 "hotclocks", mais vers le même groupe de 16 cœurs SP. L'effet net est un problème par horloge "principale" par planificateur.

les unités ld / st et SFU sont partagées par toutes les déformations (ressemble à l'uniforme pour les déformations de deux planificateurs)?

Je ne comprends pas vraiment la question. Toutes les ressources d'exécution sont partagées / disponibles pour les instructions provenant de l'un ou l'autre planificateur.

si une chaîne est divisée en deux parties, quelle partie est planifiée en premier? y a-t-il un planificateur? ou juste au hasard sélectionne une partie à exécuter.

Pourquoi est-ce important? La machine se comporte comme si deux instructions de distorsion complètes étaient programmées dans une horloge centrale, c'est-à-dire "double émission". De toute façon, vous n'avez aucune visibilité sur tout ce qui se passe au niveau de l'horloge.

quel est l'avantage de cette conception? maximiser l'utilisation du matériel?

Oui, comme indiqué dans le livre blanc de fermi:

«En utilisant ce modèle élégant de double émission, Fermi atteint des performances matérielles presque maximales.

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Pourquoi il y a un besoin de pageContext dans JSP?

Pourquoi y a-t-il un objet de liste dans ma liste?

Pourquoi y a-t-il un nom de classe injecté?

Pourquoi y a-t-il deux fichiers build.gradle dans un projet Android Studio?

Pourquoi y a-t-il deux types de fonctions dans Elixir?

Pourquoi existe-t-il deux façons de désinstaller un fichier dans Git?

Pourquoi y a-t-il deux implémentations de network io dans scalaz-stream?

Pourquoi y a-t-il des résultats différents lors de l'attribution d'une valeur dans un tableau à deux dimensions?

Existe-t-il un moyen de contrôler la distorsion dans la visionneuse 3D de Matlab?

Pourquoi y a-t-il deux façons de définir des fonctions nommées dans elixir?

Pourquoi y a-t-il un pointeur imbriqué dans une définition de structure C?

Pourquoi y a-t-il deux variables supplémentaires, dans le point de contrôle, pour chaque couche?

Pourquoi y a-t-il deux crochets [dans les fonctions de sommet c ++?

Pourquoi y a-t-il un typage dans ce corps de macro?

Pourquoi y a-t-il deux hachages dans mon Pipfile.lock pour un module?

Pourquoi y a-t-il un signe deux-points dans certains programmes entre 2 instructions

Pourquoi y a-t-il deux façons de multiplier des nombres signés arbitraires dans MIPS?

Y a-t-il un moyen de mentionner deux login_redirect_urls dans django?

Pourquoi y a-t-il deux balises IonHeader dans l'échafaudage de projet vide?

Pourquoi y a-t-il une incohérence entre ces deux manières de tracer une fonction dans Octave?

Pourquoi y a-t-il un trait de soulignement dans le nom de type _Recordset?

Pourquoi y a-t-il une contradiction dans la sortie de deux programmes écrits ci-dessous (Unions en C)?

Pourquoi y a-t-il deux objets pour une fonction dans la chaîne de prototypes Javascript

Pourquoi un caractère de nouvelle ligne compte-t-il comme deux clés dans un BTreeMap ?

Pourquoi y a-t-il un problème de rendu dans Android Studio 3.1.4 ?

Pourquoi y a-t-il deux méthodes identiques dans le sac de message laravel?

Pourquoi le fait de placer deux ensembles de données avec un axe cartésien temporel dans Chart.js provoque-t-il deux ensembles de graduations de l'axe Y ?

Pourquoi y a-t-il beaucoup de conteneurs sortis dans Kubernetes après un certain temps ?

Pourquoi y a-t-il un comportement de peinture étrange dans JavaFX

TOP liste

  1. 1

    Comment insérer une valeur de variable dans la formule getpivotdata à l'aide de la macro Excel VBA

  2. 2

    Des résultats inattendus dans les discussions Java multi-malgré les verrous

  3. 3

    Comment appliquer un effet de flou sur une barre de navigation en css

  4. 4

    Échec de l'exécution de 'insertBefore' sur 'Node': le paramètre 1 n'est pas de type 'Node'

  5. 5

    Comment puis-je faire fonctionner un effet de verre / flou CSS pour une superposition?

  6. 6

    Comment supprimer des mots d'un fichier texte en Python qui contiennent certaines lettres ?

  7. 7

    ERREUR 1054 (42S22): colonne inconnue 'marque' dans 'liste de champs'

  8. 8

    La connexion du conteneur FTP fonctionne avec docker-compose et non avec docker run

  9. 9

    Définir des URL pour la redirection vers une URL spécifique sans réécriture

  10. 10

    Pandas - Remplacer la valeur de ligne du calcul dérivé

  11. 11

    L'abonnement Python du kit AWS IoT SDK renvoie true mais le paramètre de rappel n'est pas appelé

  12. 12

    Impossible d'insérer des lignes et d'obtenir une contrainte de clé étrangère échoue

  13. 13

    Comment passer des paramètres d'URL lors de la redirection vers une autre URL?

  14. 14

    Python: exécutez plusieurs commandes dans CMD en une seule instance

  15. 15

    Comment faire une requête rapide vers une URL spécifique

  16. 16

    Authentification angulaire Laravel

  17. 17

    aucun opérateur ne correspond à ces opérandes ; les types d'opérandes sont : std::istream >> const char [5]

  18. 18

    Une erreur fatale s'est produite lors de la création des informations d'identification du client TLS. L'état d'erreur interne est 10013

  19. 19

    Apache XmlBeans NullPointerException

  20. 20

    JS : séparez les éléments du tableau et affichez les éléments individuels dans un tableau

  21. 21

    WebScrape - 獲取href

chaudétiquette

Archive