Suite

Existe-t-il un raster équivalent au vecteur Intersect ?


L'outil d'intersection utilisé sur les données vectorielles ne peut pas être utilisé sur les données raster.

Quel outil puis-je utiliser pour mes deux rasters qui fait la même chose que l'outil Superposition > Intersection ?


Une cellule dans un raster ne peut avoir qu'une valeur, donc le concept d'intersection en vecteur ne s'applique pas aux données raster.

Vous ne décrivez pas ce que sont vos données ou la plage de valeurs, donc en supposant que votre premier raster a des valeurs 1,2 et 3, vous faites ensuite 10,100 et 1000 puis additionnez-les et la combinaison de valeurs vous donnera ce qui coupe quoi.


C'est SA-Local-Combine. Assurez-vous que vos rasters sont des entiers


Quels sont les pièges les plus courants qui attendent les nouveaux utilisateurs ?

Comme vous le savez peut-être déjà, Mathématique est un merveilleux logiciel.
Cependant, il présente quelques caractéristiques qui ont tendance à dérouter les nouveaux utilisateurs (et parfois pas si nouveaux). Cela peut être clairement vu du fait que les mêmes questions continuent d'être affichées sur ce site encore et encore.

S'il vous plaît, aidez-moi à identifier et à expliquer ces pièges, afin que moins de nouveaux utilisateurs fassent l'erreur de tomber dans ces pièges inattendus.

Suggestions pour publier des réponses :

  • Un sujet par réponse
  • Concentrez-vous sur les utilisations non avancées (il est destiné à être utile pour les débutants/débutants/novices et comme référence de clôture de question)
  • Inclure un titre explicite dans le style h2
  • Expliquez les symptômes des problèmes, le mécanisme en coulisse et toutes les causes et solutions possibles auxquelles vous pouvez penser. Assurez-vous d'inclure une explication de niveau débutant (et une explication plus avancée aussi, si vous êtes d'humeur)
  • Incluez un lien vers votre réponse en modifiant le Indice ci-dessous (pour référence rapide)

Derniers brevets Intel :

La présente demande revendique le bénéfice de la priorité par rapport à la demande de brevet américain non provisoire Ser. n° 15/489 040, déposé le 17 avril 2017.

DOMAINE TECHNIQUE

Des modes de réalisation concernent généralement des architectures de traitement graphique. Plus particulièrement, des modes de réalisation concernent la technologie de tramage à géométrie différée dans les architectures de traitement graphique.

CONTEXTE DE LA DESCRIPTION

Les architectures de traitement de données graphiques parallèles actuelles peuvent inclure des systèmes et des méthodes développés pour effectuer des opérations spécifiques sur des données graphiques telles que, par exemple, l'interpolation linéaire, la tessellation, la rastérisation, le mappage de texture, les tests de profondeur, etc. tous les types de scènes graphiques à rendre peuvent être longs et coûteux. De plus, la taille des données graphiques a augmenté au fil des ans pour représenter des visuels plus réalistes. En effet, les données graphiques peuvent être limitées par les ressources disponibles sur l'unité de traitement graphique (GPU).

DESCRIPTION BRÈVE DES DESSINS

Les divers avantages des modes de réalisation apparaîtront à l'homme du métier à la lecture de la description suivante et des revendications annexées, et en se référant aux dessins suivants, dans lesquels :

FIGUE. 1 est un schéma fonctionnel illustrant un système informatique configuré pour mettre en œuvre un ou plusieurs aspects des modes de réalisation décrits ici

FIGUE. 2A-2D illustrent des composants d'un processeur parallèle, selon un mode de réalisation

FIGUES. 3A-3B sont des schémas fonctionnels de multiprocesseurs graphiques, selon des modes de réalisation

FIGUE. 4A-4F illustrent un exemple d'architecture dans laquelle une pluralité de GPU sont couplés en communication à une pluralité de processeurs multicœurs

FIGUE. 5 illustre un pipeline de traitement graphique, selon un mode de réalisation

FIGUE. 6 est une illustration d'un exemple de flux d'informations graphiques selon un mode de réalisation

FIGUE. 7 est un organigramme d'un exemple d'un procédé de fonctionnement d'un appareil de tramage différé selon un mode de réalisation

FIGUE. 8 est un schéma fonctionnel d'un exemple d'un système de rastérisation différée selon un mode de réalisation

FIGUE. 9 est un schéma fonctionnel d'un exemple d'un système informatique selon un mode de réalisation

FIGUE. 10 est une illustration d'un exemple d'appareil à boîtier semi-conducteur selon un mode de réalisation

FIGUE. 11 est une illustration d'un exemple d'un système de visiocasque (HMD) selon un mode de réalisation

FIGUE. 12 est un schéma fonctionnel d'un exemple des composants fonctionnels inclus dans le système HMD de la Fig. 11 selon un mode de réalisation

FIGUE. 13 est un schéma fonctionnel d'un exemple d'un cluster de traitement général inclus dans une unité de traitement parallèle selon un mode de réalisation

FIGUE. 14 est une illustration conceptuelle d'un exemple d'un pipeline de traitement graphique qui peut être mis en œuvre dans une unité de traitement parallèle, selon un mode de réalisation

FIGUE. 15 est un schéma fonctionnel d'un exemple d'un multiprocesseur de streaming selon un mode de réalisation

FIGUES. 16-18 sont des schémas fonctionnels d'un exemple d'une vue d'ensemble d'un système de traitement de données selon un mode de réalisation

FIGUE. 19 est un schéma fonctionnel d'un exemple d'un moteur de traitement graphique selon un mode de réalisation

FIGUES. 20-22 sont des schémas fonctionnels d'exemples d'unités d'exécution selon un mode de réalisation

FIGUE. 23 est un schéma fonctionnel d'un exemple de pipeline graphique selon un mode de réalisation

FIGUES. 24A-24B sont des schémas fonctionnels d'exemples de programmation de pipeline graphique selon un mode de réalisation

FIGUE. 25 est un schéma fonctionnel d'un exemple d'architecture logicielle graphique selon un mode de réalisation

FIGUE. 26 est un schéma fonctionnel d'un exemple d'un système de développement central de propriété intellectuelle (PI) selon un mode de réalisation et

FIGUE. 27 est un schéma synoptique d'un exemple de système sur puce à circuit intégré selon un mode de réalisation.

DESCRIPTION DÉTAILLÉE

Dans la description suivante, de nombreux détails spécifiques sont exposés pour fournir une compréhension plus approfondie de la présente invention. Cependant, il apparaîtra à l'homme du métier que la présente invention peut être mise en pratique sans un ou plusieurs de ces détails spécifiques. Dans d'autres cas, des caractéristiques bien connues n'ont pas été décrites afin d'éviter d'obscurcir la présente invention.

FIGUE. 1 est un schéma fonctionnel illustrant un système informatique 100 configuré pour mettre en œuvre un ou plusieurs aspects des modes de réalisation décrits ici. Le système informatique 100 comprend un sous-système de traitement 101 ayant un ou plusieurs processeur(s) 102 et une mémoire système 104 communiquer via un chemin d'interconnexion qui peut comprendre un concentrateur de mémoire 105. Le pôle mémoire 105 peut être un composant séparé dans un composant de jeu de puces ou peut être intégré dans le ou les processeurs 102. Le pôle mémoire 105 couple avec un sous-système d'E/S 111 via un lien de communication 106. Le sous-système d'E/S 111 comprend un concentrateur d'E/S 107 qui peut permettre au système informatique 100 recevoir une entrée d'un ou plusieurs périphériques d'entrée 108. De plus, le concentrateur d'E/S 107 peut activer un contrôleur d'affichage, qui peut être inclus dans le ou les processeurs 102, pour fournir des sorties à un ou plusieurs dispositifs d'affichage 110A. Dans un mode de réalisation, le ou les dispositifs d'affichage 110A couplé au hub d'E/S 107 peut inclure un périphérique d'affichage local, interne ou intégré.

Dans un mode de réalisation, le sous-système de traitement 101 comprend un ou plusieurs processeur(s) parallèle(s) 112 couplé au concentrateur de mémoire 105 via un bus ou un autre lien de communication 113. Le lien de communication 113 peut être l'un des nombreux protocoles ou technologies de liaison de communication basés sur des normes, tels que, mais sans s'y limiter, PCI Express, ou peut être une interface de communication ou un tissu de communication spécifique à un fournisseur. Dans un mode de réalisation, le ou les processeurs parallèles 112 forment un système de traitement parallèle ou vectoriel axé sur le calcul qui comprend un grand nombre de cœurs de traitement et/ou de grappes de traitement, tel qu'un processeur à plusieurs cœurs intégrés (MIC). Dans un mode de réalisation, le ou les processeurs parallèles 112 former un sous-système de traitement graphique qui peut sortir des pixels vers l'un des un ou plusieurs dispositifs d'affichage 110A couplé via le I/O Hub 107. Le ou les processeurs parallèles 112 peut également inclure un contrôleur d'affichage et une interface d'affichage (non illustrés) pour permettre une connexion directe à un ou plusieurs dispositifs d'affichage 110B.

Dans le sous-système d'E/S 111, une unité de stockage système 114 peut se connecter au hub d'E/S 107 pour fournir un mécanisme de stockage pour le système informatique 100. Un commutateur E/S 116 peut être utilisé pour fournir un mécanisme d'interface pour permettre les connexions entre le concentrateur d'E/S 107 et d'autres composants, tels qu'une carte réseau 118 et/ou adaptateur réseau sans fil 119 qui peuvent être intégrés à la plate-forme, et divers autres appareils qui peuvent être ajoutés via un ou plusieurs modules complémentaires 120. L'adaptateur réseau 118 peut être une carte Ethernet ou une autre carte réseau filaire. L'adaptateur réseau sans fil 119 peut inclure un ou plusieurs Wi-Fi, Bluetooth, communication en champ proche (NFC) ou tout autre périphérique réseau qui comprend une ou plusieurs radios sans fil.

Le système informatique 100 peut inclure d'autres composants non explicitement indiqués, y compris des connexions USB ou d'autres ports, des lecteurs de stockage optique, des périphériques de capture vidéo, etc. 107. Des chemins de communication interconnectant les divers composants de la Fig. 1 peut être mis en œuvre à l'aide de tout protocole approprié, tel que les protocoles basés sur PCI (Peripheral Component Interconnect) (par exemple, PCI-Express), ou tout autre bus ou interface de communication point à point et/ou protocole(s), tels que le Interconnexion à grande vitesse NV-Link, ou protocoles d'interconnexion connus dans l'art.

Dans un mode de réalisation, le ou les processeurs parallèles 112 incorpore des circuits optimisés pour le traitement graphique et vidéo, y compris, par exemple, des circuits de sortie vidéo, et constitue une unité de traitement graphique (GPU). Dans un autre mode de réalisation, le ou les processeurs parallèles 112 incorporer des circuits optimisés pour le traitement à usage général, tout en préservant l'architecture informatique sous-jacente, décrite plus en détail ici. Dans encore un autre mode de réalisation, les composants du système informatique 100 peut être intégré à un ou plusieurs autres éléments du système sur un seul circuit intégré. Par exemple, le ou les processeurs parallèles, 112 concentrateur de mémoire 105, processeur(s) 102, et concentrateur d'E/S 107 peut être intégré dans un circuit intégré de système sur puce (SoC). Alternativement, les composants du système informatique 100 peut être intégré dans un package unique pour former une configuration de système en package (SIP). Dans un mode de réalisation, au moins une partie des composants du système informatique 100 peut être intégré dans un module multipuce (MCM), qui peut être interconnecté avec d'autres modules multipuce dans un système informatique modulaire.

On comprendra que le système informatique 100 montré ici est illustratif et que des variations et des modifications sont possibles. La topologie de connexion, y compris le nombre et la disposition des ponts, le nombre de processeur(s) 102, et le nombre de processeur(s) parallèle(s) 112, peut être modifié à volonté. Par exemple, dans certains modes de réalisation, la mémoire système 104 est connecté au(x) processeur(s) 102 directement plutôt que via un pont, tandis que d'autres appareils communiquent avec la mémoire système 104 via le hub mémoire 105 et le(s) processeur(s) 102. Dans d'autres topologies alternatives, le ou les processeurs parallèles 112 sont connectés au concentrateur d'E/S 107 ou directement à l'un des un ou plusieurs processeur(s) 102, plutôt que vers le hub de mémoire 105. Dans d'autres modes de réalisation, le concentrateur d'E/S 107 et hub de mémoire 105 peuvent être intégrés dans une seule puce. Certains modes de réalisation peuvent inclure deux ou plusieurs ensembles de processeur(s) 102 attaché via plusieurs sockets, qui peuvent être couplés à deux ou plusieurs instances du ou des processeurs parallèles 112.

Certains des composants particuliers illustrés ici sont facultatifs et peuvent ne pas être inclus dans toutes les implémentations du système informatique. 100. Par exemple, n'importe quel nombre de cartes d'extension ou de périphériques peut être pris en charge, ou certains composants peuvent être éliminés. De plus, certaines architectures peuvent utiliser une terminologie différente pour des composants similaires à ceux illustrés à la Fig. 1 . Par exemple, le concentrateur de mémoire 105 peut être appelé Northbridge dans certaines architectures, tandis que le concentrateur d'E/S 107 peut être appelé Southbridge.

FIGUE. 2A illustre un processeur parallèle 200, selon un mode de réalisation. Les différents composants du processeur parallèle 200 peut être mis en œuvre à l'aide d'un ou plusieurs dispositifs de circuits intégrés, tels que des processeurs programmables, des circuits intégrés spécifiques à une application (ASIC) ou des réseaux de portes programmables sur site (FPGA). Le processeur parallèle illustré 200 est une variante du ou des processeurs parallèles 112 montré à la Fig. 1, selon un mode de réalisation.

Dans un mode de réalisation, le processeur parallèle 200 comprend une unité de traitement parallèle 202. L'unité de traitement parallèle comprend une unité d'E/S 204 qui permet la communication avec d'autres appareils, y compris d'autres instances de l'unité de traitement parallèle 202. L'unité d'E/S 204 peut être directement connecté à d'autres appareils. Dans un mode de réalisation, l'unité d'E/S 204 se connecte à d'autres appareils via l'utilisation d'une interface de concentrateur ou de commutateur, telle qu'un concentrateur de mémoire 105. Les connexions entre le hub de mémoire 105 et l'unité d'E/S 204 former un lien de communication 113. Au sein de l'unité de traitement parallèle 202, l'unité d'E/S 204 se connecte à une interface hôte 206 et une barre transversale de mémoire 216, où l'interface hôte 206 reçoit des commandes destinées à effectuer des opérations de traitement et la barre transversale de la mémoire 216 reçoit des commandes destinées à effectuer des opérations de mémoire.

Lorsque l'interface hôte 206 reçoit un tampon de commande via l'unité d'E/S 204, l'interface hôte 206 peut diriger les opérations de travail pour exécuter ces commandes vers un frontal 208. Dans un mode de réalisation, l'extrémité avant 208 couples avec un programmateur 210, qui est configuré pour distribuer des commandes ou d'autres éléments de travail à un tableau de cluster de traitement 212. Dans un mode de réalisation, le programmateur 210 garantit que la matrice de cluster de traitement 212 est correctement configuré et dans un état valide avant que les tâches ne soient distribuées aux clusters de traitement de la matrice de clusters de traitement 212. Dans un mode de réalisation, le programmateur 210 est implémenté via une logique de micrologiciel s'exécutant sur un microcontrôleur. Le microcontrôleur a implémenté l'ordonnanceur 210 est configurable pour effectuer des opérations complexes de planification et de distribution du travail à une granularité grossière et fine, permettant une préemption rapide et une commutation de contexte des threads s'exécutant sur la matrice de traitement 212. Dans un mode de réalisation, le logiciel hôte peut prouver des charges de travail pour la planification sur la matrice de traitement 212 via l'une des multiples sonnettes de traitement graphique. Les charges de travail peuvent ensuite être automatiquement réparties sur la matrice de traitement 212 par le planificateur 210 logique dans le microcontrôleur de l'ordonnanceur.

Le tableau de cluster de traitement 212 peut inclure jusqu'à « N » clusters de traitement (par exemple, cluster 214Un groupe 214B, à travers le cluster 214N). Chaque grappe 214UNE-214N du tableau de cluster de traitement 212 peut exécuter un grand nombre de threads simultanés. Le programmateur 210 peut allouer du travail aux clusters 214UNE-214N du tableau de cluster de traitement 212 en utilisant divers algorithmes d'ordonnancement et/ou de répartition du travail, qui peuvent varier en fonction de la charge de travail résultant de chaque type de programme ou de calcul. La planification peut être gérée dynamiquement par le planificateur 210, ou peut être assisté en partie par la logique du compilateur pendant la compilation de la logique du programme configurée pour l'exécution par le tableau de cluster de traitement 212. Dans un mode de réalisation, différents clusters 214UNE-214N du tableau de cluster de traitement 212 peuvent être alloués pour traiter différents types de programmes ou pour effectuer différents types de calculs.

Le tableau de cluster de traitement 212 peut être configuré pour effectuer divers types d'opérations de traitement en parallèle. Dans un mode de réalisation, le réseau de clusters de traitement 212 est configuré pour effectuer des opérations de calcul parallèles à usage général. Par exemple, le tableau de cluster de traitement 212 peut inclure une logique pour exécuter des tâches de traitement, y compris le filtrage de données vidéo et/ou audio, effectuer des opérations de modélisation, y compris des opérations physiques, et effectuer des transformations de données.

Dans un mode de réalisation, le réseau de clusters de traitement 212 est configuré pour effectuer des opérations de traitement graphique parallèle. Dans les modes de réalisation dans lesquels le processeur parallèle 200 est configuré pour effectuer des opérations de traitement graphique, le réseau de grappes de traitement 212 peut inclure une logique supplémentaire pour prendre en charge l'exécution de telles opérations de traitement graphique, y compris, mais sans s'y limiter, une logique d'échantillonnage de texture pour effectuer des opérations de texture, ainsi qu'une logique de tessellation et une autre logique de traitement de sommet. De plus, le tableau de cluster de traitement 212 peut être configuré pour exécuter des programmes de shader liés au traitement graphique tels que, mais sans s'y limiter, des shaders de vertex, des shaders de tessellation, des shaders de géométrie et des shaders de pixels. L'unité de traitement parallèle 202 peut transférer des données de la mémoire système via l'unité d'E/S 204 pour traitement. Pendant le traitement, les données transférées peuvent être stockées dans la mémoire sur puce (par exemple, la mémoire du processeur parallèle 222) pendant le traitement, puis réécrit dans la mémoire système.

Dans un mode de réalisation, lorsque l'unité de traitement parallèle 202 est utilisé pour effectuer le traitement graphique, le planificateur 210 peut être configuré pour diviser la charge de travail de traitement en tâches de taille approximativement égale, afin de mieux permettre la distribution des opérations de traitement graphique sur plusieurs clusters 214UNE-214N du tableau de cluster de traitement 212. Dans certains modes de réalisation, des parties du réseau de grappes de traitement 212 peut être configuré pour effectuer différents types de traitement. Par exemple, une première partie peut être configurée pour effectuer un ombrage de sommet et une génération de topologie, une deuxième partie peut être configurée pour effectuer une tessellation et un ombrage de géométrie, et une troisième partie peut être configurée pour effectuer un ombrage de pixels ou d'autres opérations d'espace d'écran, pour produire un rendu image pour l'affichage. Données intermédiaires produites par un ou plusieurs des clusters 214UNE-214N peut être stocké dans des tampons pour permettre la transmission des données intermédiaires entre les clusters 214UNE-214N pour un traitement ultérieur.

Pendant le fonctionnement, la baie de cluster de traitement 212 peut recevoir des tâches de traitement à exécuter via le planificateur 210, qui reçoit des commandes définissant les tâches de traitement du front-end 208. Pour les opérations de traitement graphique, les tâches de traitement peuvent inclure des indices de données à traiter, par exemple des données de surface (patch), des données primitives, des données de sommet et/ou des données de pixels, ainsi que des paramètres d'état et des commandes définissant comment les données doivent être traitées (par exemple, quel programme doit être exécuté). Le programmateur 210 peut être configuré pour récupérer les indices correspondant aux tâches ou peut recevoir les indices du frontal 208. L'extrémité avant 208 peut être configuré pour assurer la matrice de cluster de traitement 212 est configuré dans un état valide avant que la charge de travail spécifiée par les tampons de commande entrants (par exemple, les tampons de lots, les tampons de poussée, etc.) ne soit initiée.

Chacune des une ou plusieurs instances de l'unité de traitement parallèle 202 peut se coupler avec la mémoire du processeur parallèle 222. La mémoire du processeur parallèle 222 accessible via la barre transversale de la mémoire 216, qui peut recevoir des demandes de mémoire de la matrice de cluster de traitement 212 ainsi que l'unité d'E/S 204. La barre transversale de la mémoire 216 peut accéder à la mémoire du processeur parallèle 222 via une interface mémoire 218. L'interface mémoire 218 peut inclure plusieurs unités de partition (par exemple, unité de partition 220A, unité de séparation 220B, à travers l'unité de séparation 220N) qui peuvent chacun se coupler à une partie (par exemple, une unité de mémoire) de la mémoire du processeur parallèle 222. Dans une implémentation, le nombre d'unités de partition 220UNE-220N est configuré pour être égal au nombre d'unités de mémoire, de sorte qu'une première unité de partition 220A a une première unité de mémoire correspondante 224A, une deuxième unité de partition 220B a une unité de mémoire correspondante 224B, et une Nième unité de partition 220N a une Nième unité de mémoire correspondante 224N. Dans d'autres modes de réalisation, le nombre d'unités de partition 220UNE-220N peut ne pas être égal au nombre de dispositifs de mémoire.

Dans divers modes de réalisation, les unités de mémoire 224UNE-224N peut inclure divers types de dispositifs de mémoire, y compris la mémoire vive dynamique (DRAM) ou la mémoire vive graphique, telle que la mémoire vive graphique synchrone (SGRAM), y compris la mémoire graphique à double débit de données (GDDR). Dans un mode de réalisation, les unités de mémoire 224UNE-224N peut également inclure une mémoire empilée 3D, y compris, mais sans s'y limiter, une mémoire à bande passante élevée (HBM). L'homme du métier appréciera que la mise en œuvre spécifique des unités de mémoire 224UNE-224N peut varier et peut être choisi parmi l'une des diverses conceptions conventionnelles. Les cibles de rendu, telles que les tampons d'images ou les cartes de texture peuvent être stockées dans les unités de mémoire 224UNE-224N, autorisant les unités de partition 220UNE-220N pour écrire des parties de chaque cible de rendu en parallèle afin d'utiliser efficacement la bande passante disponible de la mémoire du processeur parallèle 222. Dans certains modes de réalisation, une instance locale de la mémoire du processeur parallèle 222 peut être exclu en faveur d'une conception de mémoire unifiée qui utilise la mémoire système en conjonction avec la mémoire cache locale.

Dans un mode de réalisation, l'un quelconque des clusters 214UNE-214N du tableau de cluster de traitement 212 peut traiter les données qui seront écrites dans l'une des unités de mémoire 224UNE-224N dans la mémoire du processeur parallèle 222. La barre transversale de la mémoire 216 peut être configuré pour transférer la sortie de chaque cluster 214UNE-214N à n'importe quelle unité de partition 220UNE-220N ou vers un autre cluster 214UNE-214N, qui peut effectuer des traitements supplémentaires sur la sortie. Chaque grappe 214UNE-214N peut communiquer avec l'interface mémoire 218 à travers la barre transversale de la mémoire 216 pour lire ou écrire sur divers périphériques de mémoire externes. Dans un mode de réalisation, la barre transversale de mémoire 216 a une connexion à l'interface mémoire 218 pour communiquer avec l'unité d'E/S 204, ainsi qu'une connexion à une instance locale de la mémoire du processeur parallèle 222, permettant aux unités de traitement au sein des différents clusters de traitement 214UNE-214N pour communiquer avec la mémoire système ou une autre mémoire qui n'est pas locale à l'unité de traitement parallèle 202. Dans un mode de réalisation, la barre transversale de mémoire 216 peut utiliser des canaux virtuels pour séparer les flux de trafic entre les clusters 214UNE-214N et les unités de partition 220UNE-220N.

Alors qu'une seule instance de l'unité de traitement parallèle 202 est illustré dans le processeur parallèle 200, un nombre quelconque d'instances de l'unité de traitement parallèle 202 peut être inclus. Par exemple, plusieurs instances de l'unité de traitement parallèle 202 peut être fourni sur une seule carte d'extension, ou plusieurs cartes d'extension peuvent être interconnectées. Les différentes instances de l'unité de traitement parallèle 202 peut être configuré pour interagir même si les différentes instances ont différents nombres de cœurs de traitement, différentes quantités de mémoire de processeur parallèle local et/ou d'autres différences de configuration. Par exemple et dans un mode de réalisation, certaines instances de l'unité de traitement parallèle 202 peut inclure des unités à virgule flottante de précision supérieure par rapport à d'autres instances. Systèmes incorporant une ou plusieurs instances de l'unité de traitement parallèle 202 ou le processeur parallèle 200 peut être mis en œuvre dans une variété de configurations et de facteurs de forme, y compris, mais sans s'y limiter, des ordinateurs de bureau, portables ou portables, des serveurs, des postes de travail, des consoles de jeux et/ou des systèmes embarqués.

FIGUE. 2B est un schéma fonctionnel d'une unité de partition 220, selon un mode de réalisation. Dans un mode de réalisation, l'unité de séparation 220 est une instance de l'une des unités de partition 220UNE-220N de la Fig. 2A. Comme illustré, l'unité de séparation 220 comprend un cache L2 221, une interface de tampon de trame 225, et une ROP 226 (unité d'opérations raster). Le cache L2 221 est un cache de lecture/écriture qui est configuré pour effectuer des opérations de chargement et de stockage reçues de la barre transversale de la mémoire 216 et ROP 226. Les échecs de lecture et les demandes de réécriture urgentes sont générés par le cache L2 221 à l'interface de tampon de trame 225 pour traitement. Les mises à jour peuvent également être envoyées au tampon de trame via l'interface de tampon de trame 225 pour traitement. Dans un mode de réalisation, l'interface de tampon de trame 225 interfaces avec l'une des unités de mémoire dans la mémoire du processeur parallèle, telles que les unités de mémoire 224UNE-224N de la Fig. 2 (par exemple, dans la mémoire du processeur parallèle 222).

Dans les applications graphiques, le ROP 226 est une unité de traitement qui effectue des opérations raster telles que le pochoir, le test z, le mélange, etc. Le ROP 226 sort ensuite les données graphiques traitées qui sont stockées dans la mémoire graphique. Dans certains modes de réalisation, le ROP 226 inclut une logique de compression pour compresser les données de profondeur ou de couleur qui sont écrites dans la mémoire et décompresser les données de profondeur ou de couleur qui sont lues à partir de la mémoire. La logique de compression peut être une logique de compression sans perte qui utilise un ou plusieurs algorithmes de compression multiples. Le type de compression effectué par le ROP 226 peut varier en fonction des caractéristiques statistiques des données à compresser. Par exemple, dans un mode de réalisation, la compression de couleur delta est effectuée sur des données de profondeur et de couleur sur une base par tuile.

Dans certains modes de réalisation, le ROP 226 est inclus dans chaque cluster de traitement (par exemple, cluster 214UNE-214N de la Fig. 2 ) au lieu de l'intérieur de l'unité de partition 220. Dans un tel mode de réalisation, les demandes de lecture et d'écriture de données de pixels sont transmises sur la barre transversale de la mémoire 216 au lieu de données de fragments de pixels. Les données graphiques traitées peuvent être affichées sur un dispositif d'affichage, tel que l'un des un ou plusieurs dispositifs d'affichage 110 de la fig. 1 , acheminé pour un traitement ultérieur par le(s) processeur(s) 102, ou acheminé pour un traitement ultérieur par l'une des entités de traitement au sein du processeur parallèle 200 de la fig. 2A.

FIGUE. 2C est un schéma fonctionnel d'un cluster de traitement 214 au sein d'une unité de traitement parallèle, selon un mode de réalisation. Dans un mode de réalisation, le cluster de traitement est une instance de l'un des clusters de traitement 214UNE-214N de la Fig. 2 . Le cluster de traitement 214 peut être configuré pour exécuter de nombreux threads en parallèle, où le terme « thread » fait référence à une instance d'un programme particulier s'exécutant sur un ensemble particulier de données d'entrée. Dans certains modes de réalisation, des techniques d'émission d'instructions à instruction unique et données multiples (SIMD) sont utilisées pour prendre en charge l'exécution parallèle d'un grand nombre de threads sans fournir de multiples unités d'instruction indépendantes. Dans d'autres modes de réalisation, des techniques à instruction unique et à threads multiples (SIMT) sont utilisées pour prendre en charge l'exécution parallèle d'un grand nombre de threads généralement synchronisés, à l'aide d'une unité d'instructions commune configurée pour émettre des instructions à un ensemble de moteurs de traitement dans chacun des clusters de traitement. Contrairement à un régime d'exécution SIMD, où tous les moteurs de traitement exécutent généralement des instructions identiques, l'exécution SIMT permet à différents threads de suivre plus facilement des chemins d'exécution divergents à travers un programme de thread donné. L'homme du métier comprendra qu'un régime de traitement SIMD représente un sous-ensemble fonctionnel d'un régime de traitement SIMT.

Fonctionnement du cluster de traitement 214 peut être contrôlé via un gestionnaire de pipeline 232 qui distribue les tâches de traitement aux processeurs parallèles SIMT. Le gestionnaire de canalisation 232 reçoit des instructions du planificateur 210 de la fig. 2 et gère l'exécution de ces instructions via un multiprocesseur graphique 234 et/ou une unité de texture 236. Le multiprocesseur graphique illustré 234 est un exemple d'instance d'un processeur parallèle SIMT. Cependant, divers types de processeurs parallèles SIMT d'architectures différentes peuvent être inclus dans le cluster de traitement. 214. Une ou plusieurs instances du multiprocesseur graphique 234 peut être inclus dans un cluster de traitement 214. Le multiprocesseur graphique 234 peut traiter des données et une barre transversale de données 240 peut être utilisé pour distribuer les données traitées vers l'une des multiples destinations possibles, y compris d'autres unités de shader. Le gestionnaire de canalisation 232 peut faciliter la distribution des données traitées en spécifiant des destinations pour les données traitées à distribuer via la barre transversale de données 240.

Chaque multiprocesseur graphique 234 au sein du cluster de traitement 214 peut inclure un ensemble identique de logique d'exécution fonctionnelle (par exemple, des unités logiques arithmétiques, des unités de stockage de charge, etc.). La logique d'exécution fonctionnelle peut être configurée d'une manière pipeline dans laquelle de nouvelles instructions peuvent être émises avant que les instructions précédentes ne soient terminées. La logique d'exécution fonctionnelle prend en charge diverses opérations, notamment l'arithmétique des nombres entiers et des virgules flottantes, les opérations de comparaison, les opérations booléennes, le décalage de bits et le calcul de diverses fonctions algébriques. Dans un mode de réalisation, le même matériel d'unité fonctionnelle peut être utilisé pour effectuer différentes opérations et n'importe quelle combinaison d'unités fonctionnelles peut être présente.

Les instructions transmises au cluster de traitement 214 constitue un fil. Un ensemble de threads s'exécutant sur l'ensemble de moteurs de traitement parallèles est un groupe de threads. Un groupe de threads exécute le même programme sur des données d'entrée différentes. Chaque thread d'un groupe de threads peut être affecté à un moteur de traitement différent dans un multiprocesseur graphique 234. Un groupe de threads peut comprendre moins de threads que le nombre de moteurs de traitement dans le multiprocesseur graphique 234. Lorsqu'un groupe de threads comprend moins de threads que le nombre de moteurs de traitement, un ou plusieurs moteurs de traitement peuvent être inactifs pendant les cycles au cours desquels ce groupe de threads est en cours de traitement. Un groupe de threads peut également inclure plus de threads que le nombre de moteurs de traitement dans le multiprocesseur graphique 234. Lorsque le groupe de threads comprend plus de threads que le nombre de moteurs de traitement dans le multiprocesseur graphique 234 le traitement peut être effectué sur des cycles d'horloge consécutifs. Dans un mode de réalisation, plusieurs groupes de threads peuvent être exécutés simultanément sur un multiprocesseur graphique 234.

Dans un mode de réalisation, le multiprocesseur graphique 234 comprend une mémoire cache interne pour effectuer des opérations de chargement et de stockage. Dans un mode de réalisation, le multiprocesseur graphique 234 peut renoncer à un cache interne et utiliser une mémoire cache (par exemple, L cache 308) au sein du cluster de traitement 214. Chaque multiprocesseur graphique 234 a également accès aux caches L2 dans les unités de partition (par exemple, les unités de partition 220UNE-220N de la Fig. 2 ) qui sont partagés entre tous les clusters de traitement 214 et peut être utilisé pour transférer des données entre les threads. Le multiprocesseur graphique 234 peut également accéder à la mémoire globale hors puce, qui peut inclure une ou plusieurs mémoires de processeur parallèle local et/ou mémoire système. Toute mémoire externe à l'unité de traitement parallèle 202 peut être utilisé comme mémoire globale. Modes de réalisation dans lesquels le cluster de traitement 214 inclut plusieurs instances du multiprocesseur graphique 234 peut partager des instructions et des données communes, qui peuvent être stockées dans le cache L1 308.

Chaque cluster de traitement 214 peut inclure un MMU 245 (unité de gestion de mémoire) configurée pour mapper des adresses virtuelles en adresses physiques. Dans d'autres modes de réalisation, une ou plusieurs instances de la MMU 245 peut résider dans l'interface mémoire 218 de la fig. 2 . Le MMU 245 comprend un ensemble d'entrées de table de pages (PTE) utilisées pour mapper une adresse virtuelle à une adresse physique d'une tuile (en savoir plus sur la mosaïque) et éventuellement un index de ligne de cache. Le MMU 245 peut inclure des tampons de traduction d'adresses (TLB) ou des caches pouvant résider dans le multiprocesseur graphique 234 ou le cache L1 ou cluster de traitement 214. L'adresse physique est traitée pour répartir la localité d'accès aux données de surface afin de permettre un entrelacement efficace des demandes entre les unités de partition. L'index de ligne de cache peut être utilisé pour déterminer si une demande de ligne de cache est un succès ou un échec.

Dans les applications graphiques et informatiques, un cluster de traitement 214 peut être configuré de telle sorte que chaque multiprocesseur graphique 234 est couplé à une unité de texture 236 pour effectuer des opérations de mappage de texture, par exemple, déterminer des positions d'échantillon de texture, lire des données de texture et filtrer les données de texture. Les données de texture sont lues à partir d'un cache de texture L1 interne (non représenté) ou, dans certains modes de réalisation, à partir du cache L1 dans un multiprocesseur graphique 234 et est extrait d'un cache L2, d'une mémoire de processeur parallèle local ou d'une mémoire système, selon les besoins. Chaque multiprocesseur graphique 234 envoie les tâches traitées à la barre transversale de données 240 pour fournir la tâche traitée à un autre cluster de traitement 214 pour un traitement ultérieur ou pour stocker la tâche traitée dans un cache L2, une mémoire de processeur parallèle local ou une mémoire système via la barre transversale de mémoire 216. Une préROP 242 (unité d'opérations pré-raster) est configurée pour recevoir des données du multiprocesseur graphique 234, dirigent les données vers les unités ROP, qui peuvent être localisées avec les unités de partition comme décrit ici (par exemple, les unités de partition 220UNE-220N de la Fig. 2 ). Le préROP 242 L'unité peut effectuer des optimisations pour le mélange des couleurs, organiser les données de couleur des pixels et effectuer des traductions d'adresses.

On comprendra que l'architecture centrale décrite ici est illustrative et que des variations et des modifications sont possibles. N'importe quel nombre d'unités de traitement, par exemple, multiprocesseur graphique 234, unités de texture 236, préROP 242, etc., peuvent être inclus dans un cluster de traitement 214. De plus, alors qu'un seul cluster de traitement 214 est représenté, une unité de traitement parallèle telle que décrite ici peut inclure un nombre quelconque d'instances du cluster de traitement 214. Dans un mode de réalisation, chaque cluster de traitement 214 peut être configuré pour fonctionner indépendamment des autres clusters de traitement 214 utilisant des unités de traitement séparées et distinctes, des caches L1, etc.

FIGUE. 2D montre un multiprocesseur graphique 234, selon un mode de réalisation. Dans un tel mode de réalisation, le multiprocesseur graphique 234 couples avec le gestionnaire de pipeline 232 du cluster de traitement 214. Le multiprocesseur graphique 234 a un pipeline d'exécution comprenant, mais sans s'y limiter, un cache d'instructions 252, une unité d'instruction 254, une unité de mappage d'adresses 256, un fichier de registre 258, un ou plusieurs cœurs d'unité de traitement graphique à usage général (GPGPU) 262, et une ou plusieurs unités de chargement/stockage 266. Les cœurs GPGPU 262 et unités de chargement/stockage 266 sont couplés à une mémoire cache 272 et mémoire partagée 270 via une interconnexion mémoire et cache 268.

Dans un mode de réalisation, le cache d'instructions 252 reçoit un flux d'instructions à exécuter du gestionnaire de pipeline 232. Les instructions sont mises en cache dans le cache d'instructions 252 et expédié pour exécution par l'unité d'instruction 254. L'unité d'instruction 254 peut envoyer des instructions sous forme de groupes de threads (par exemple, des chaînes), chaque thread du groupe de threads étant affecté à une unité d'exécution différente au sein du noyau GPGPU 262. Une instruction peut accéder à n'importe quel espace d'adressage local, partagé ou global en spécifiant une adresse dans un espace d'adressage unifié. L'unité de mappage d'adresses 256 peut être utilisé pour traduire les adresses dans l'espace d'adressage unifié en une adresse mémoire distincte accessible par les unités de chargement/stockage 266.

Le fichier du registre 258 fournit un ensemble de registres pour les unités fonctionnelles du multiprocesseur graphique 324. Le fichier du registre 258 fournit un stockage temporaire pour les opérandes connectés aux chemins de données des unités fonctionnelles (par exemple, les cœurs GPGPU 262, charger/stocker des unités 266) du multiprocesseur graphique 324. Dans un mode de réalisation, le fichier de registre 258 est divisé entre chacune des unités fonctionnelles de telle sorte que chaque unité fonctionnelle se voit allouer une partie dédiée du fichier de registre 258. Dans un mode de réalisation, le fichier de registre 258 est divisé entre les différentes déformations exécutées par le multiprocesseur graphique 324.

Les cœurs GPGPU 262 peuvent chacun comprendre des unités à virgule flottante (FPU) et/ou des unités arithmétiques logiques entières (ALU) qui sont utilisées pour exécuter des instructions du multiprocesseur graphique 324. Les cœurs GPGPU 262 peut être similaire en architecture ou peut différer en architecture, selon les modes de réalisation. Par exemple et dans un mode de réalisation, une première partie des cœurs GPGPU 262 comprennent une FPU simple précision et une ALU entière tandis qu'une deuxième partie des cœurs GPGPU comprend une FPU double précision. Dans un mode de réalisation, les FPU peuvent mettre en œuvre la norme IEEE 754-2008 pour l'arithmétique à virgule flottante ou permettre l'arithmétique à virgule flottante à précision variable. Le multiprocesseur graphique 324 peut en outre inclure une ou plusieurs unités à fonction fixe ou à fonction spéciale pour exécuter des fonctions spécifiques telles que des opérations de copie de rectangle ou de fusion de pixels. Dans un mode de réalisation, un ou plusieurs des cœurs GPGPU peuvent également inclure une logique de fonction fixe ou spéciale.

Dans un mode de réalisation, les cœurs GPGPU 262 inclure une logique SIMD capable d'exécuter une seule instruction sur plusieurs ensembles de données. Dans un mode de réalisation, les cœurs GPGPU 262 peut exécuter physiquement les instructions SIMD4, SIMD8 et SIMD16 et exécuter logiquement les instructions SIMD1, SIMD2 et SIMD32. Les instructions SIMD pour les cœurs GPGPU peuvent être générées au moment de la compilation par un compilateur shader ou générées automatiquement lors de l'exécution de programmes écrits et compilés pour des architectures SPMD (Single Program Multiple Data) ou SIMT. Plusieurs threads d'un programme configuré pour le modèle d'exécution SIMT peuvent être exécutés via une seule instruction SIMD. Par exemple et dans un mode de réalisation, huit threads SIMT qui effectuent des opérations identiques ou similaires peuvent être exécutés en parallèle via une seule unité logique SMD8.

L'interconnexion mémoire et cache 268 est un réseau d'interconnexion qui relie chacune des unités fonctionnelles du multiprocesseur graphique 324 au fichier de registre 258 et à la mémoire partagée 270. Dans un mode de réalisation, l'interconnexion de mémoire et de cache 268 est une interconnexion à barres transversales qui permet à l'unité de chargement/stockage 266 pour mettre en œuvre des opérations de chargement et de stockage entre la mémoire partagée 270 et le fichier du registre 258. Le fichier du registre 258 peut fonctionner à la même fréquence que les cœurs GPGPU 262, ainsi le transfert de données entre les cœurs GPGPU 262 et le fichier du registre 258 est une latence très faible. La mémoire partagée 270 peut être utilisé pour permettre la communication entre les threads qui s'exécutent sur les unités fonctionnelles au sein du multiprocesseur graphique 234. La mémoire cache 272 peut être utilisé comme cache de données par exemple, pour mettre en cache des données de texture communiquées entre les unités fonctionnelles et l'unité de texture 236. La mémoire partagée 270 peut également être utilisé comme un programme géré en cache. Threads s'exécutant sur les cœurs GPGPU 262 peut stocker par programmation des données dans la mémoire partagée en plus des données automatiquement mises en cache qui sont stockées dans la mémoire cache 272.

FIGUES. 3A-3B illustrent des multiprocesseurs graphiques supplémentaires, selon des modes de réalisation. Les multiprocesseurs graphiques illustrés 325, 350 sont des variantes du multiprocesseur graphique 234 de la fig. 2C. Les multiprocesseurs graphiques illustrés 325, 350 peut être configuré comme un multiprocesseur de streaming (SM) capable d'exécuter simultanément un grand nombre de threads d'exécution.

FIGUE. 3A montre un multiprocesseur graphique 325 selon un mode de réalisation supplémentaire. Le multiprocesseur graphique 325 comprend de multiples instances supplémentaires d'unités de ressources d'exécution relatives au multiprocesseur graphique 234 de la fig. 2D. Par exemple, le multiprocesseur graphique 325 peut inclure plusieurs instances de l'unité d'instruction 332UNE-332B, fichier d'enregistrement 334UNE-334B et unité(s) de texture 344UNE-344B. Le multiprocesseur graphique 325 comprend également plusieurs ensembles de graphiques ou d'unités d'exécution de calcul (par exemple, le noyau GPGPU 336UNE-336B, noyau GPGPU 337UNE-337B, noyau GPGPU 338UNE-338B) et plusieurs ensembles d'unités de chargement/stockage 340UNE-340B. Dans un mode de réalisation, les unités de ressources d'exécution ont un cache d'instructions commun 330, texture et/ou mémoire cache de données 342, et mémoire partagée 346.

Les différents composants peuvent communiquer via une matrice d'interconnexion 327. Dans un mode de réalisation, le tissu d'interconnexion 327 comprend un ou plusieurs commutateurs crossbar pour permettre la communication entre les divers composants du multiprocesseur graphique 325. Dans un mode de réalisation, le tissu d'interconnexion 327 est une couche de matrice de réseau à grande vitesse distincte sur laquelle chaque composant du multiprocesseur graphique 325 est empilé. Les composants du multiprocesseur graphique 325 communiquer avec des composants distants via la matrice d'interconnexion 327. Par exemple, les cœurs GPGPU 336UNE-336B, 337UNE-337Bande 3378UNE-338B peuvent chacun communiquer avec la mémoire partagée 346 via le tissu d'interconnexion 327. Le tissu d'interconnexion 327 peut arbitrer la communication au sein du multiprocesseur graphique 325 pour assurer une répartition équitable de la bande passante entre les composants.

FIGUE. 3B montre un multiprocesseur graphique 350 selon un mode de réalisation supplémentaire. Le processeur graphique comprend plusieurs ensembles de ressources d'exécution 356UNE-356D, où chaque ensemble de ressources d'exécution comprend plusieurs unités d'instructions, fichiers de registres, cœurs GPGPU et unités de stockage de charge, comme illustré sur la Fig. 2D et fig. 3A. Les ressources d'exécution 356UNE-356D peut fonctionner de concert avec les unités de texture 360UNE-360D pour les opérations de texture, tout en partageant un cache d'instructions 354, et mémoire partagée 362. Dans un mode de réalisation, les ressources d'exécution 356UNE-356D peut partager un cache d'instructions 354 et mémoire partagée 362, ainsi que plusieurs instances d'une mémoire cache de texture et/ou de données 358UNE-358B. Les différents composants peuvent communiquer via une matrice d'interconnexion 352 similaire au tissu d'interconnexion 327 de la fig. 3A.

L'homme du métier comprendra que l'architecture décrite aux Fig. 1, 2A-2D et 3A-3B sont descriptifs et non limitatifs quant à la portée des présents modes de réalisation. Ainsi, les techniques décrites ici peuvent être mises en œuvre sur n'importe quelle unité de traitement correctement configurée, y compris, sans s'y limiter, un ou plusieurs processeurs d'applications mobiles, une ou plusieurs unités centrales de traitement (CPU) de bureau ou de serveur, y compris des unités de traitement, telles que l'unité de traitement parallèle 202 de la fig. 2, ainsi qu'un ou plusieurs processeurs graphiques ou unités de traitement spécialisées, sans sortir du cadre des modes de réalisation décrits ici.

Dans certains modes de réalisation, un processeur parallèle ou GPGPU tel que décrit ici est couplé en communication à des cœurs d'hôte/processeur pour accélérer les opérations graphiques, les opérations d'apprentissage automatique, les opérations d'analyse de modèle et diverses fonctions GPU à usage général (GPGPU). Le GPU peut être couplé en communication au processeur/cœurs hôte sur un bus ou une autre interconnexion (par exemple, une interconnexion à grande vitesse telle que PCIe ou NVLink). Dans d'autres modes de réalisation, le GPU peut être intégré sur le même boîtier ou puce que les cœurs et couplé en communication aux cœurs sur un bus/une interconnexion de processeur interne (c'est-à-dire interne au boîtier ou à la puce). Quel que soit le mode de connexion du GPU, les coeurs de processeurs peuvent allouer du travail au GPU sous forme de séquences de commandes/instructions contenues dans un descripteur de travail. Le GPU utilise ensuite des circuits/logiques dédiés pour traiter efficacement ces commandes/instructions.

Techniques d'interconnexion entre GPU et processeur hôte

FIGUE. 4A illustre un exemple d'architecture dans laquelle une pluralité de GPU 410-413 sont couplés en communication à une pluralité de processeurs multicœurs 405-406 sur des liaisons à haut débit 440-443 (par exemple, bus, interconnexions point à point, etc.). Dans un mode de réalisation, les liaisons à grande vitesse 440-443 prennent en charge un débit de communication de 4 Go/s, 30 Go/s, 80 Go/s ou plus, selon l'implémentation. Divers protocoles d'interconnexion peuvent être utilisés, y compris, mais sans s'y limiter, PCIe 4.0 ou 5.0 et NVLink 2.0. Cependant, les principes sous-jacents de l'invention ne sont limités à aucun protocole ou débit de communication particulier.

De plus, dans un mode de réalisation, au moins deux des GPU 410-413 sont interconnectés sur des liaisons à haut débit 444-445, qui peuvent être mis en œuvre en utilisant des protocoles/liens identiques ou différents de ceux utilisés pour les liens à grande vitesse 440-443. De même, au moins deux des processeurs multicœurs 405-406 peut être connecté via une liaison haut débit 433 qui peuvent être des bus multiprocesseurs symétriques (SMP) fonctionnant à 20 Go/s, 30 Go/s, 120 Go/s ou plus. En variante, toutes les communications entre les divers composants du système illustrés à la Fig. 4A peut être accompli en utilisant les mêmes protocoles/liens (par exemple, sur une structure d'interconnexion commune). Comme mentionné, cependant, les principes sous-jacents de l'invention ne sont limités à aucun type particulier de technologie d'interconnexion.

Dans un mode de réalisation, chaque processeur multicœur 405-406 est couplé en communication à une mémoire de processeur 401-402, via des interconnexions de mémoire 430-431, respectivement, et chaque GPU 410-413 est couplé de manière communicative à la mémoire GPU 420-423 sur les interconnexions de mémoire GPU 450-453, respectivement. La mémoire s'interconnecte 430-431 et 450-453 peuvent utiliser des technologies d'accès à la mémoire identiques ou différentes. A titre d'exemple et non limitatif, les mémoires du processeur 401-402 et mémoires GPU 420-423 peuvent être des mémoires volatiles telles que des mémoires dynamiques à accès aléatoire (DRAM) (y compris des DRAM empilées), des mémoires SDRAM DDR graphiques (GDDR) (par exemple, GDDR5, GDDR6) ou une mémoire à bande passante élevée (HBM) et/ou peuvent être des mémoires non volatiles telles que comme 3D XPoint ou Nano-Ram. Dans un mode de réalisation, une partie des mémoires peut être une mémoire volatile et une autre partie peut être une mémoire non volatile (par exemple, en utilisant une hiérarchie de mémoire à deux niveaux (2LM)).

Comme décrit ci-dessous, bien que les différents processeurs 405-406 et GPU 410-413 peut être physiquement couplé à une mémoire particulière 401-402, 420-423, respectivement, une architecture de mémoire unifiée peut être mise en œuvre dans laquelle le même espace d'adressage du système virtuel (appelé aussi espace « d'adressage effectif ») est réparti entre l'ensemble des différentes mémoires physiques. Par exemple, les mémoires de processeur 401-402 peuvent comprendre chacun 64 Go de l'espace d'adressage de la mémoire système et des mémoires GPU 420-423 peuvent comprendre chacun 32 Go de l'espace d'adressage de la mémoire système (d'où un total de 256 Go de mémoire adressable dans cet exemple).

FIGUE. 4B illustre des détails supplémentaires pour une interconnexion entre un processeur multicœur 407 et un module d'accélération graphique 446 selon un mode de réalisation. Le module d'accélération graphique 446 peut inclure une ou plusieurs puces GPU intégrées sur une carte de ligne qui est couplée au processeur 407 via la liaison à grande vitesse 440. Alternativement, le module d'accélération graphique 446 peut être intégré sur le même boîtier ou puce que le processeur 407.

Le processeur illustré 407 comprend une pluralité de noyaux 460UNE-460D, chacun avec un tampon lookaside de traduction 461UNE-461D et une ou plusieurs caches 462UNE-462D. Les noyaux peuvent inclure divers autres composants pour exécuter des instructions et traiter des données qui ne sont pas illustrés pour éviter d'obscurcir les principes sous-jacents de l'invention (par exemple, des unités d'extraction d'instructions, des unités de prédiction de branchement, des décodeurs, des unités d'exécution, des tampons de réorganisation, etc.) . les caches 462UNE-462D peut comprendre des caches de niveau 1 (L1) et de niveau 2 (L2). De plus, un ou plusieurs caches partagés 426 peut être inclus dans la hiérarchie de mise en cache et partagé par des ensembles de cœurs 460UNE-460D. Par exemple, un mode de réalisation du processeur 407 comprend 24 cœurs, chacun avec son propre cache L1, douze caches L2 partagés et douze caches L3 partagés. Dans ce mode de réalisation, l'un des caches L2 et L3 est partagé par deux cœurs adjacents. Le processeur 407 et le module d'intégration de l'accélérateur graphique 446 se connecter avec la mémoire système 441, qui peut inclure des mémoires de processeur 401-402

La cohérence est maintenue pour les données et les instructions stockées dans les différents caches 462UNE-462RÉ, 456 et mémoire système 441 via une communication inter-cœurs sur un bus de cohérence 464. Par exemple, chaque cache peut avoir une logique/des circuits de cohérence de cache qui lui sont associés pour communiquer via le bus de cohérence. 464 en réponse aux lectures ou écritures détectées sur des lignes de cache particulières. Dans une mise en œuvre, un protocole de surveillance de cache est mis en œuvre sur le bus de cohérence 464 pour surveiller les accès au cache Les techniques de surveillance/cohérence du cache sont bien comprises par l'homme du métier et ne seront pas décrites en détail ici pour éviter d'obscurcir les principes sous-jacents de l'invention.

Dans un mode de réalisation, un circuit proxy 425 couple de manière communicative le module d'accélération graphique 446 au bus de cohérence 464, permettant au module d'accélération graphique 446 participer au protocole de cohérence de cache en tant que pair des cœurs. En particulier, une interface 435 fournit la connectivité au circuit proxy 425 sur liaison haut débit 440 (par exemple, un bus PCIe, NVLink, etc.) et une interface 437 connecte le module d'accélération graphique 446 au lien 440.

Dans un mode de réalisation, un circuit d'intégration d'accélérateur 436 fournit des services de gestion de cache, d'accès à la mémoire, de gestion de contexte et de gestion d'interruption pour le compte d'une pluralité de moteurs de traitement graphique 431, 432, N du module d'accélération graphique 446. Les moteurs de traitement graphique 431, 432, N peuvent comprendre chacun une unité de traitement graphique (GPU) distincte. Alternativement, les moteurs de traitement graphique 431, 432, N peut comprendre différents types de moteurs de traitement graphique au sein d'un GPU, tels que des unités d'exécution graphique, des moteurs de traitement multimédia (par exemple, des encodeurs/décodeurs vidéo), des échantillonneurs et des moteurs Blit. Autrement dit, le module d'accélération graphique peut être un GPU avec une pluralité de moteurs de traitement graphique 431-432, N ou les moteurs de traitement graphique 431-432, N peuvent être des GPU individuels intégrés sur un package commun, une carte de ligne ou une puce.

Dans un mode de réalisation, le circuit d'intégration d'accélérateur 436 comprend une unité de gestion de mémoire (MMU) 439 pour exécuter diverses fonctions de gestion de mémoire telles que des traductions de mémoire virtuelle à physique (également appelées traductions de mémoire effective à réelle) et des protocoles d'accès à la mémoire pour accéder à la mémoire système 441. Le MMU 439 peut également comprendre une mémoire tampon de traduction (TLB) (non représentée) pour mettre en cache les traductions d'adresses virtuelles/efficaces vers physiques/réelles. Dans une implémentation, un cache 438 stocke les commandes et les données pour un accès efficace par les moteurs de traitement graphique 431-432, N. Dans un mode de réalisation, les données stockées dans le cache 438 et mémoires graphiques 433-434, N reste cohérent avec les caches principaux 462UNE-462RÉ, 456 et mémoire système 411. Comme mentionné, cela peut être accompli via un circuit proxy 425 qui participe au mécanisme de cohérence du cache pour le compte du cache 438 et souvenirs 433-434, N (par exemple, envoyer des mises à jour au cache 438 liés aux modifications/accès des lignes de cache sur les caches des processeurs 462UNE-462RÉ, 456 et recevoir des mises à jour du cache 438).

Un ensemble de registres 445 stocker des données de contexte pour les threads exécutés par les moteurs de traitement graphique 431-432, N et un circuit de gestion de contexte 448 gère les contextes de thread. Par exemple, le circuit de gestion de contexte 448 peut effectuer des opérations de sauvegarde et de restauration pour sauvegarder et restaurer les contextes des divers threads pendant les changements de contexte (par exemple, lorsqu'un premier thread est enregistré et un deuxième thread est stocké de sorte que le deuxième thread puisse être exécuté par un moteur de traitement graphique). Par exemple, sur un commutateur de contexte, le circuit de gestion de contexte 448 peut stocker des valeurs de registre actuelles dans une région désignée en mémoire (par exemple, identifiée par un pointeur de contexte). Il peut alors restaurer les valeurs des registres lors du retour au contexte. Dans un mode de réalisation, un circuit de gestion d'interruption 447 reçoit et traite les interruptions reçues des périphériques du système.

Dans une mise en œuvre, les adresses virtuelles/effectives d'un moteur de traitement graphique 431 sont traduits en adresses réelles/physiques dans la mémoire système 411 par le MMU 439. Un mode de réalisation du circuit d'intégration d'accélérateur 436 prend en charge plusieurs (par exemple, 4, 8, 16) modules d'accélérateur graphique 446 et/ou d'autres dispositifs accélérateurs. Le module accélérateur graphique 446 peut être dédié à une seule application exécutée sur le processeur 407 ou peut être partagé entre plusieurs applications. Dans un mode de réalisation, un environnement d'exécution graphique virtualisé est présenté dans lequel les ressources des moteurs de traitement graphique 431-432, N sont partagés avec plusieurs applications ou machines virtuelles (VM). Les ressources peuvent être subdivisées en « tranches » qui sont allouées à différentes VM et/ou applications sur la base des exigences de traitement et des priorités associées aux VM et/ou applications.

Ainsi, le circuit d'intégration d'accélérateur agit comme un pont vers le système pour le module d'accélération graphique 446 et fournit des services de traduction d'adresses et de cache de mémoire système. De plus, le circuit d'intégration de l'accélérateur 436 peut fournir des installations de virtualisation au processeur hôte pour gérer la virtualisation des moteurs de traitement graphique, les interruptions et la gestion de la mémoire.

Parce que les ressources matérielles des moteurs de traitement graphique 431-432, N sont mappés explicitement sur l'espace d'adressage réel vu par le processeur hôte 407, tout processeur hôte peut adresser ces ressources directement à l'aide d'une valeur d'adresse effective. Une fonction du circuit d'intégration de l'accélérateur 436, dans un mode de réalisation, est la séparation physique des moteurs de traitement graphique 431-432, N pour qu'elles apparaissent au système comme des unités indépendantes.

Comme mentionné, dans le mode de réalisation illustré, une ou plusieurs mémoires graphiques 433-434, M sont couplés à chacun des moteurs de traitement graphique 431-432, N, respectivement. Les mémoires graphiques 433-434, M stockent des instructions et des données en cours de traitement par chacun des moteurs de traitement graphique 431-432, N. Les mémoires graphiques 433-434, M peuvent être des mémoires volatiles telles que des DRAM (y compris des DRAM empilées), des mémoires GDDR (par exemple, GDDR5, GDDR6) ou HBM, et/ou peuvent être des mémoires non volatiles telles que 3D XPoint ou Nano-Ram.

Dans un mode de réalisation, pour réduire le trafic de données sur la liaison 440, des techniques de polarisation sont utilisées pour garantir que les données stockées dans les mémoires graphiques 433-434, M sont les données qui seront utilisées le plus fréquemment par les moteurs de traitement graphique 431-432, N et de préférence non utilisé par les noyaux 460UNE-460D (du moins pas fréquemment). De même, le mécanisme de polarisation tente de conserver les données nécessaires aux cœurs (et de préférence pas aux moteurs de traitement graphique 431-432, N) dans les caches 462UNE-462RÉ, 456 des cœurs et de la mémoire système 411.

FIGUE. 4C illustre un autre mode de réalisation dans lequel le circuit d'intégration d'accélérateur 436 est intégré au processeur 407. Dans ce mode de réalisation, les moteurs de traitement graphique 431-432, N communiquent directement sur la liaison haut débit 440 au circuit d'intégration de l'accélérateur 436 via l'interface 437 et interface 435 (qui, encore une fois, peut utiliser n'importe quelle forme de bus ou de protocole d'interface). Le circuit d'intégration de l'accélérateur 436 peut effectuer les mêmes opérations que celles décrites en regard de la fig. 4B , mais potentiellement à un débit plus élevé compte tenu de sa proximité avec le bus de cohérence 462 et cache 462UNE-462RÉ, 426.

Un mode de réalisation prend en charge différents modèles de programmation, notamment un modèle de programmation à processus dédié (pas de virtualisation de module d'accélération graphique) et des modèles de programmation partagés (avec virtualisation). Ce dernier peut inclure des modèles de programmation qui sont contrôlés par le circuit d'intégration de l'accélérateur 436 et des modèles de programmation qui sont contrôlés par le module d'accélération graphique 446.

Dans un mode de réalisation du modèle de processus dédié, les moteurs de traitement graphique 431-432, N sont dédiés à une seule application ou à un seul processus sous un seul système d'exploitation. L'application unique peut canaliser d'autres demandes d'applications vers les moteurs graphiques 431-432, N, fournissant la virtualisation au sein d'une VM/partition.

Dans les modèles de programmation à processus dédiés, les moteurs de traitement graphique 431-432, N, peut être partagé par plusieurs partitions VM/application. Les modèles partagés nécessitent un hyperviseur système pour virtualiser les moteurs de traitement graphique 431-432, N pour autoriser l'accès par chaque système d'exploitation. Pour les systèmes à partition unique sans hyperviseur, les moteurs de traitement graphique 431-432, N appartiennent au système d'exploitation. Dans les deux cas, le système d'exploitation peut virtualiser les moteurs de traitement graphique 431-432, N pour donner accès à chaque processus ou application.

Pour le modèle de programmation partagé, le module d'accélération graphique 446 ou un moteur de traitement graphique individuel 431-432, N sélectionne un élément de processus à l'aide d'un descripteur de processus. Dans un mode de réalisation, les éléments de processus sont stockés dans la mémoire système 411 et sont adressables en utilisant les techniques de traduction d'adresse effective en adresse réelle décrites ici. Le descripteur de processus peut être une valeur spécifique à la mise en œuvre fournie au processus hôte lors de l'enregistrement de son contexte auprès du moteur de traitement graphique. 431-432, N (c'est-à-dire en appelant le logiciel système pour ajouter l'élément de processus à la liste chaînée des éléments de processus). Les 16 bits inférieurs du descripteur de processus peuvent être le décalage de l'élément de processus dans la liste chaînée d'éléments de processus.

FIGUE. 4D illustre une tranche d'intégration d'accélérateur exemplaire 490. Telle qu'utilisée ici, une « tranche » comprend une partie spécifiée des ressources de traitement du circuit d'intégration d'accélérateur 436. Espace d'adressage effectif de l'application 482 dans la mémoire système 411 stocke les éléments de processus 483. Dans un mode de réalisation, les éléments de processus 483 sont stockés en réponse aux invocations GPU 481 à partir d'applications 480 exécuté sur le processeur 407. Un élément de processus 483 contient l'état du processus pour l'application correspondante 480. Un descripteur de travail (WD) 484 contenu dans l'élément de processus 483 peut être un seul travail demandé par une application ou peut contenir un pointeur vers une file d'attente de travaux. Dans ce dernier cas, le WD 484 est un pointeur vers la file d'attente des demandes de travail dans l'espace d'adressage de l'application 482.

Le module d'accélération graphique 446 et/ou les moteurs de traitement graphique individuels 431-432, N peut être partagé par tous ou un sous-ensemble des processus du système. Des modes de réalisation de l'invention comprennent une infrastructure pour établir l'état du processus et envoyer un WD 484 à un module d'accélération graphique 446 pour démarrer un travail dans un environnement virtualisé.

Dans une implémentation, le modèle de programmation de processus dédié est spécifique à l'implémentation. Dans ce modèle, un seul processus possède le module d'accélération graphique 446 ou un moteur de traitement graphique individuel 431. Parce que le module d'accélération graphique 446 appartient à un seul processus, l'hyperviseur initialise le circuit d'intégration de l'accélérateur 436 pour la partition propriétaire et le système d'exploitation initialise le circuit d'intégration de l'accélérateur 436 pour le processus propriétaire au moment où le module d'accélération graphique 446 est assigné.

En fonctionnement, une unité de récupération WD 491 dans la tranche d'intégration de l'accélérateur 490 récupère le prochain WD 484 qui comprend une indication du travail à effectuer par l'un des moteurs de traitement graphique du module d'accélération graphique 446. Données du DEO 484 peut être stocké dans des registres 445 et utilisé par la MMU 439, circuit de gestion des interruptions 447 et/ou circuit de gestion de contexte 446 comme illustré. Par exemple, un mode de réalisation de la MMU 439 comprend un circuit de marche de segment/page pour accéder aux tables de segment/page 486 dans l'espace d'adressage virtuel du système d'exploitation 485. Le circuit de gestion des interruptions 447 peut traiter des événements d'interruption 492 reçu du module d'accélération graphique 446. Lors de l'exécution d'opérations graphiques, une adresse efficace 493 généré par un moteur de traitement graphique 431-432, N est traduit en une adresse réelle par la MMU 439.

Dans un mode de réalisation, le même ensemble de registres 445 sont dupliqués pour chaque moteur de traitement graphique 431-432, N et/ou module d'accélération graphique 446 et peut être initialisé par l'hyperviseur ou le système d'exploitation. Chacun de ces registres dupliqués peut être inclus dans une tranche d'intégration d'accélérateur 490. Des exemples de registres pouvant être initialisés par l'hyperviseur sont présentés dans le tableau 1.

Des exemples de registres pouvant être initialisés par le système d'exploitation sont présentés dans le tableau 2.

Dans un mode de réalisation, chaque WD 484 est spécifique à un module d'accélération graphique particulier 446 et/ou moteur de traitement graphique 431-432, N. Il contient toutes les informations d'un moteur de traitement graphique 431-432, N nécessite de faire son travail ou il peut s'agir d'un pointeur vers un emplacement mémoire où l'application a mis en place une file d'attente de commandes de travail à terminer.

FIGUE. 4E illustre des détails supplémentaires pour un mode de réalisation d'un modèle partagé. Ce mode de réalisation comprend un espace d'adressage réel d'hyperviseur 498 dans laquelle une liste d'éléments de processus 499 est stocké. L'espace d'adressage réel de l'hyperviseur 498 est accessible via un hyperviseur 496 qui virtualise les moteurs du module d'accélération graphique du système d'exploitation 495.

Les modèles de programmation partagés permettent à tout ou à un sous-ensemble de processus de tout ou d'un sous-ensemble de partitions du système d'utiliser un module d'accélération graphique 446. Il existe deux modèles de programmation où le module d'accélération graphique 446 est partagé par plusieurs processus et partitions : partagé par tranches de temps et partagé par les graphiques.

Dans ce modèle, l'hyperviseur du système 496 possède le module d'accélération graphique 446 et rend sa fonction disponible pour tous les systèmes d'exploitation 495. Pour un module d'accélération graphique 446 pour prendre en charge la virtualisation par l'hyperviseur système 496, le module d'accélération graphique 446 peut respecter les exigences suivantes : 1) La demande de tâche d'une application doit être autonome (c'est-à-dire que l'état n'a pas besoin d'être maintenu entre les tâches), ou le module d'accélération graphique 446 doit fournir un mécanisme de sauvegarde et de restauration de contexte. 2) La demande de travail d'une application est garantie par le module d'accélération graphique 446 pour terminer dans un laps de temps spécifié, y compris les erreurs de traduction, ou le module d'accélération graphique 446 offre la possibilité d'anticiper le traitement de la tâche. 3) Le module d'accélération graphique 446 doit être garanti l'équité entre les processus lorsqu'ils fonctionnent dans le modèle de programmation partagée dirigée.

Dans un mode de réalisation, pour le modèle partagé, l'application 480 est nécessaire pour créer un système d'exploitation 495 appel système avec un module d'accélération graphique 446 type, un descripteur de travail (WD), une valeur de registre de masque d'autorité (AMR) et un pointeur de zone de sauvegarde/restauration de contexte (CSRP). Le module d'accélération graphique 446 type décrit la fonction d'accélération ciblée pour l'appel système. Le module d'accélération graphique 446 type peut être une valeur spécifique au système. Le WD est formaté spécifiquement pour le module d'accélération graphique 446 et peut se présenter sous la forme d'un module d'accélération graphique 446 commande, un pointeur d'adresse efficace vers une structure définie par l'utilisateur, un pointeur d'adresse efficace vers une file d'attente de commandes, ou toute autre structure de données pour décrire le travail à effectuer par le module d'accélération graphique 446. Dans un mode de réalisation, la valeur AMR est l'état AMR à utiliser pour le processus en cours. La valeur transmise au système d'exploitation est similaire à une application définissant l'AMR. Si le circuit d'intégration de l'accélérateur 436 et module d'accélération graphique 446 les implémentations ne prennent pas en charge un registre de remplacement de masque d'autorité utilisateur (UAMOR), le système d'exploitation peut appliquer la valeur UAMOR actuelle à la valeur AMR avant de transmettre l'AMR dans l'appel de l'hyperviseur. L'hyperviseur 496 peut éventuellement appliquer la valeur actuelle du registre de remplacement du masque d'autorité (AMOR) avant de placer l'AMR dans l'élément de processus 483. Dans un mode de réalisation, le CSRP est l'un des registres 445 contenant l'adresse effective d'une zone dans l'espace d'adressage de l'application 482 pour le module d'accélération graphique 446 pour enregistrer et restaurer l'état du contexte. Ce pointeur est facultatif si aucun état ne doit être enregistré entre les travaux ou lorsqu'un travail est préempté. La zone de sauvegarde/restauration du contexte peut être épinglée dans la mémoire système.

A la réception de l'appel système, le système d'exploitation 495 peut vérifier que la demande 480 s'est enregistré et a reçu l'autorisation d'utiliser le module d'accélération graphique 446. Le système d'exploitation 495 puis appelle l'hyperviseur 496 avec les informations présentées dans le tableau 3.

Lors de la réception de l'appel de l'hyperviseur, l'hyperviseur 496 vérifie que le système d'exploitation 495 s'est enregistré et a reçu l'autorisation d'utiliser le module d'accélération graphique 446. L'hyperviseur 496 puis met l'élément de processus 483 dans la liste chaînée d'éléments de processus pour le module d'accélération graphique correspondant 446 taper. L'élément de processus peut inclure les informations présentées dans le tableau 4.

Dans un mode de réalisation, l'hyperviseur initialise une pluralité de tranches d'intégration d'accélérateurs 490 registres 445.

Comme illustré sur la Fig. 4F, un mode de réalisation de l'invention utilise une mémoire unifiée adressable via un espace d'adressage de mémoire virtuelle commun utilisé pour accéder aux mémoires physiques du processeur 401-402 et mémoires GPU 420-423. Dans cette implémentation, les opérations exécutées sur les GPU 410-413 utiliser le même espace d'adressage mémoire virtuel/effectif pour accéder aux mémoires des processeurs 401-402 et vice versa, simplifiant ainsi la programmabilité. Dans un mode de réalisation, une première partie de l'espace d'adressage virtuel/effectif est allouée à la mémoire du processeur 401, une seconde partie à la seconde mémoire de processeur 402, une troisième partie à la mémoire GPU 420, etc. L'ensemble de l'espace mémoire virtuel/effectif (parfois appelé espace d'adressage effectif) est ainsi réparti sur chacune des mémoires du processeur 401-402 et mémoires GPU 420-423, permettant à n'importe quel processeur ou GPU d'accéder à n'importe quelle mémoire physique avec une adresse virtuelle mappée sur cette mémoire.

Dans un mode de réalisation, des circuits de gestion de polarisation/cohérence 494UNE-494E dans une ou plusieurs des UMM 439UNE-439E assure la cohérence du cache entre les caches des processeurs hôtes (par exemple, 405) et les GPU 410-413 et met en œuvre des techniques de polarisation indiquant les mémoires physiques dans lesquelles certains types de données doivent être stockés. Alors que plusieurs instances de circuits de gestion de polarisation/cohérence 494UNE-494E sont illustrés sur la Fig. 4F , les circuits de polarisation/cohérence peuvent être mis en œuvre dans la MMU d'un ou plusieurs processeurs hôtes 405 et/ou au sein du circuit d'intégration de l'accélérateur 436.

Un mode de réalisation permet à la mémoire connectée au GPU 420-423 être mappé dans le cadre de la mémoire système et accessible à l'aide de la technologie de mémoire virtuelle partagée (SVM), mais sans subir les inconvénients de performances typiques associés à la cohérence totale du cache système. La capacité à la mémoire GPU-attachée 420-423 être accessible en tant que mémoire système sans surcharge de cohérence de cache onéreuse fournit un environnement d'exploitation avantageux pour le déchargement du GPU. Cette disposition permet au processeur hôte 405 logiciel pour configurer les opérandes et accéder aux résultats des calculs, sans la surcharge des copies de données I/O DMA traditionnelles. Ces copies traditionnelles impliquent des appels de pilotes, des interruptions et des accès E/S mappés en mémoire (MMIO) qui sont tous inefficaces par rapport aux simples accès mémoire. Dans le même temps, la possibilité d'accéder à la mémoire attachée au GPU 420-423 sans cohérence de cache, les surcharges peuvent être critiques pour le temps d'exécution d'un calcul déchargé. Dans les cas de trafic important de mémoire d'écriture en continu, par exemple, la surcharge de cohérence du cache peut réduire considérablement la bande passante d'écriture effective vue par un GPU 410-413. L'efficacité de la configuration des opérandes, l'efficacité de l'accès aux résultats et l'efficacité du calcul GPU jouent toutes un rôle dans la détermination de l'efficacité du déchargement GPU.

Dans une mise en œuvre, la sélection entre la polarisation GPU et la polarisation du processeur hôte est pilotée par une structure de données de suivi de polarisation. Une table de polarisation peut être utilisée, par exemple, qui peut être une structure granulaire de page (c'est-à-dire contrôlée à la granularité d'une page mémoire) qui comprend 1 ou 2 bits par page mémoire rattachée au GPU. La table de polarisation peut être mise en œuvre dans une plage de mémoire volée d'une ou plusieurs mémoires liées au GPU 420-423, avec ou sans cache de polarisation dans le GPU 410-413 (par exemple, pour mettre en cache les entrées fréquemment/récemment utilisées de la table de biais). En variante, l'intégralité de la table de polarisation peut être conservée dans le GPU.

Dans une mise en œuvre, l'entrée de la table de polarisation associée à chaque accès à la mémoire rattachée au GPU 420-423 est accédé avant l'accès réel à la mémoire GPU, provoquant les opérations suivantes. Tout d'abord, les requêtes locales du GPU 410-413 qui trouvent leur page en biais GPU sont transférés directement vers une mémoire GPU correspondante 420-423. Les requêtes locales du GPU qui trouvent leur page en biais de l'hôte sont transmises au processeur 405 (par exemple, sur une liaison à grande vitesse comme indiqué ci-dessus). Dans un mode de réalisation, les demandes du processeur 405 qui trouvent la page demandée dans le biais du processeur hôte terminent la demande comme une lecture de mémoire normale. Alternativement, les demandes dirigées vers une page orientée GPU peuvent être transmises au GPU 410-413. Le GPU peut ensuite faire passer la page à un biais de processeur hôte s'il n'utilise pas actuellement la page.

L'état de polarisation d'une page peut être modifié soit par un mécanisme logiciel, soit par un mécanisme logiciel assisté par matériel, soit, pour un ensemble limité de cas, par un mécanisme purement matériel.

Un mécanisme pour changer l'état de polarisation utilise un appel d'API (par exemple OpenCL), qui, à son tour, appelle le pilote de périphérique du GPU qui, à son tour, envoie un message (ou met en file d'attente un descripteur de commande) au GPU pour lui demander de changer le biais et, pour certaines transitions, effectuez une opération de vidage du cache dans l'hôte. L'opération de vidage du cache est requise pour une transition du processeur hôte 405 biais au biais du GPU, mais n'est pas requis pour la transition inverse.

Dans un mode de réalisation, la cohérence du cache est maintenue en rendant temporairement les pages orientées GPU non mises en cache par le processeur hôte 405. Pour accéder à ces pages, le processeur 405 peut demander l'accès au GPU 410 qui peut ou non accorder l'accès immédiatement, selon la mise en œuvre. Ainsi, pour réduire la communication entre le processeur 405 et GPU 410 il est avantageux de s'assurer que les pages orientées GPU sont celles qui sont requises par le GPU mais pas par le processeur hôte 405 et vice versa.

Pipeline de traitement graphique

FIGUE. 5 illustre un pipeline de traitement graphique 500, selon un mode de réalisation. Dans un mode de réalisation, un processeur graphique peut mettre en œuvre le pipeline de traitement graphique illustré 500. Le processeur graphique peut être inclus dans les sous-systèmes de traitement parallèle décrits ici, tels que le processeur parallèle 200 de la fig. 2 qui, dans un mode de réalisation, est une variante du ou des processeurs parallèles 112 de la fig. 1 . Les différents systèmes de traitement parallèles peuvent mettre en œuvre le pipeline de traitement graphique 500 via une ou plusieurs instances de l'unité de traitement parallèle (par exemple, l'unité de traitement parallèle 202 de la fig. 2) comme décrit ici. Par exemple, une unité de shader (par exemple, un multiprocesseur graphique 234 de la fig. 3 ) peut être configuré pour exécuter les fonctions d'une ou plusieurs unités de traitement de sommet 504, une unité de traitement de contrôle de tessellation 508, une unité de traitement d'évaluation de tessellation 512, une unité de traitement de géométrie 516, et une unité de traitement de fragments/pixels 524. Les fonctions d'assembleur de données 502, assembleurs primitifs 506, 514, 518, unité de pavage 510, rastériseur 522, et unité d'opérations raster 526 peut également être exécuté par d'autres moteurs de traitement au sein d'un cluster de traitement (par exemple, un cluster de traitement 214 de la fig. 3 ) et une unité de partition correspondante (par exemple, unité de partition 220UNE-220N de la Fig. 2 ). Le pipeline de traitement graphique 500 peut également être mis en œuvre à l'aide d'unités de traitement dédiées pour une ou plusieurs fonctions. Dans un mode de réalisation, une ou plusieurs parties du pipeline de traitement graphique 500 peut être effectué par une logique de traitement parallèle dans un processeur à usage général (par exemple, CPU). Dans un mode de réalisation, une ou plusieurs parties du pipeline de traitement graphique 500 peut accéder à la mémoire sur puce (par exemple, la mémoire du processeur parallèle 222 comme sur la fig. 2 ) via une interface mémoire 528, qui peut être une instance de l'interface mémoire 218 de la fig. 2 .

Dans un mode de réalisation, l'assembleur de données 502 est une unité de traitement qui collecte des données de sommet pour les surfaces et les primitives. L'assembleur de données 502 puis délivre les données de sommet, y compris les attributs de sommet, à l'unité de traitement de sommet 504. L'unité de traitement des sommets 504 est une unité d'exécution programmable qui exécute des programmes de vertex shader, éclairant et transformant les données de vertex comme spécifié par les programmes de vertex shader. L'unité de traitement des sommets 504 lit les données qui sont stockées dans la mémoire cache, locale ou système pour une utilisation dans le traitement des données de sommet et peuvent être programmées pour transformer les données de sommet d'une représentation de coordonnées basée sur un objet en un espace de coordonnées d'espace mondial ou un espace de coordonnées de dispositif normalisé.

Une première instance d'un assembleur primitif 506 reçoit des attributs de sommet de l'unité de traitement de sommet 504. L'assembleur primitif 506 lit les attributs de sommet stockés selon les besoins et construit des primitives graphiques pour le traitement par l'unité de traitement de contrôle de tessellation 508. Les primitives graphiques comprennent des triangles, des segments de ligne, des points, des patchs, etc., tels que pris en charge par diverses interfaces de programmation d'applications (API) de traitement graphique.

L'unité de traitement de contrôle de tessellation 508 traite les sommets en entrée comme des points de contrôle pour un patch géométrique. Les points de contrôle sont transformés à partir d'une représentation d'entrée du patch (par exemple, les bases du patch) en une représentation qui est appropriée pour une utilisation dans l'évaluation de surface par l'unité de traitement d'évaluation de tessellation 512. L'unité de traitement de contrôle de tessellation 508 peut également calculer des facteurs de tessellation pour les bords des patchs géométriques. Un facteur de tessellation s'applique à un seul bord et quantifie un niveau de détail dépendant de la vue associé au bord. Une unité de tessellation 510 est configuré pour recevoir les facteurs de tessellation pour les bords d'un patch et pour tesseler le patch en plusieurs primitives géométriques telles que des primitives de ligne, de triangle ou de quadrilatère, qui sont transmises à une unité de traitement d'évaluation de tessellation 512. L'unité de traitement d'évaluation de la tessellation 512 opère sur des coordonnées paramétrées du patch subdivisé pour générer une représentation de surface et des attributs de sommet pour chaque sommet associé aux primitives géométriques.

Une deuxième instance d'un assembleur primitif 514 reçoit des attributs de sommet de l'unité de traitement d'évaluation de tessellation 512, en lisant les attributs de sommet stockés selon les besoins, et en construisant des primitives graphiques pour le traitement par l'unité de traitement de géométrie 516. L'unité de traitement de la géométrie 516 est une unité d'exécution programmable qui exécute des programmes de shader de géométrie pour transformer les primitives graphiques reçues de l'assembleur de primitives 514 comme spécifié par les programmes de shader de géométrie. Dans un mode de réalisation, l'unité de traitement de géométrie 516 est programmé pour subdiviser les primitives graphiques en une ou plusieurs nouvelles primitives graphiques et calculer les paramètres utilisés pour rastériser les nouvelles primitives graphiques.

Dans certains modes de réalisation, l'unité de traitement de géométrie 516 peut ajouter ou supprimer des éléments dans le flux de géométrie. L'unité de traitement de la géométrie 516 génère les paramètres et les sommets spécifiant de nouvelles primitives graphiques à l'assembleur de primitives 518. L'assembleur primitif 518 reçoit les paramètres et les sommets de l'unité de traitement de géométrie 516 et construit des primitives graphiques pour le traitement par une unité d'échelle, de suppression et de découpage de la fenêtre d'affichage 520. L'unité de traitement de la géométrie 516 lit les données qui sont stockées dans la mémoire du processeur parallèle ou la mémoire système pour une utilisation dans le traitement des données géométriques. L'échelle de la fenêtre, l'élimination et l'unité de découpage 520 effectue l'écrêtage, l'élimination et la mise à l'échelle de la fenêtre et génère les primitives graphiques traitées vers un rastériseur 522.

Le rastériseur 522 peut effectuer une sélection de profondeur et d'autres optimisations basées sur la profondeur. Le rastériseur 522 effectue également une conversion de balayage sur les nouvelles primitives graphiques pour générer des fragments et sortir ces fragments et les données de couverture associées vers l'unité de traitement de fragment/pixel 524. L'unité de traitement des fragments/pixels 524 est une unité d'exécution programmable qui est configurée pour exécuter des programmes de shader de fragment ou des programmes de shader de pixel. L'unité de traitement des fragments/pixels 524 transformer des fragments ou des pixels reçus du rastériseur 522, comme spécifié par les programmes de fragment ou de pixel shader. Par exemple, l'unité de traitement des fragments/pixels 524 peut être programmé pour effectuer des opérations comprenant, mais sans s'y limiter, le mappage de texture, l'ombrage, le mélange, la correction de texture et la correction de perspective pour produire des fragments ou des pixels ombrés qui sont transmis à une unité d'opérations raster 526. L'unité de traitement des fragments/pixels 524 peut lire les données stockées dans la mémoire du processeur parallèle ou dans la mémoire système à utiliser lors du traitement des données fragmentées. Les programmes de shader de fragment ou de pixel peuvent être configurés pour ombrager au niveau de l'échantillon, du pixel, de la tuile ou d'autres granularités en fonction de la fréquence d'échantillonnage configurée pour les unités de traitement.

L'unité d'opérations raster 526 est une unité de traitement qui effectue des opérations de trame, y compris, mais sans s'y limiter, le pochoir, le test z, le mélange, etc., et génère des données de pixels sous forme de données graphiques traitées à stocker dans la mémoire graphique (par exemple, la mémoire du processeur parallèle 222 comme sur la fig. 2 , et/ou mémoire système 104 comme sur la fig. 1 , à afficher sur le ou les dispositifs d'affichage 110 ou pour un traitement ultérieur par l'un des un ou plusieurs processeur(s) 102 ou processeur(s) parallèle(s) 112. Dans certains modes de réalisation, l'unité d'opérations raster 526 est configuré pour compresser les données z ou de couleur qui sont écrites dans la mémoire et décompresser les données z ou de couleur qui sont lues à partir de la mémoire.

Technologie de tramage de géométrie différée

Comme indiqué précédemment, la taille des données graphiques a augmenté au fil des ans pour représenter des visuels plus réalistes. Étant donné que les données graphiques peuvent être limitées par les ressources disponibles sur le processeur graphique (par exemple, GPU), la technologie décrite ici peut être utilisée pour simplifier et optimiser la gestion d'une grande quantité de données graphiques avec des ressources de processeur graphique limitées grâce à la mise en cache et à l'élimination des données.

Passons maintenant à la fig. 6, une illustration d'un exemple de flux d'informations graphiques selon un mode de réalisation est représentée. Par exemple, une application graphique 602 transfère des données à un conducteur 604 et le chauffeur 604 transfère les données vers un processeur graphique 606. Le pilote illustré 604, qui est en communication directe avec l'application graphique 602 et le processeur graphique 606, connaît la quantité de ressources libres (par exemple, la mémoire) disponibles dans le processeur graphique 606. Comme nous le verrons plus en détail, la quantité de données transférées depuis l'application graphique 602 au processeur graphique 606 peut être fonction de la mémoire libre disponible dans le processeur graphique 606. En conséquence, une surcharge de mémoire dans le processeur graphique 606 peut être empêché.

FIGUE. 7 illustre un organigramme d'un exemple de méthode 700 de faire fonctionner un appareil de tramage à géométrie différée selon un mode de réalisation. La méthode 700 peut être implémenté sous la forme d'un ou plusieurs modules dans un ensemble d'instructions logiques stockées dans un support de stockage non transitoire lisible par machine ou par ordinateur tel qu'une mémoire vive (RAM), une mémoire morte (ROM), une ROM programmable (PROM), micrologiciel, mémoire flash, etc., dans une logique configurable telle que, par exemple, des réseaux logiques programmables (PLA), des réseaux de portes programmables sur site (FPGA), des dispositifs logiques programmables complexes (CPLD), dans une logique matérielle à fonctionnalité fixe utilisant une technologie de circuit telle comme, par exemple, une technologie de circuit intégré à application spécifique (ASIC), une technologie à semi-conducteur à oxyde métallique complémentaire (CMOS) ou à logique transistor-transistor (TTL), ou toute combinaison de celles-ci.

Par exemple, un code de programme informatique pour effectuer les opérations indiquées dans la méthode 700 peut être écrit dans n'importe quelle combinaison d'un ou plusieurs langages de programmation, y compris un langage de programmation orienté objet tel que C#, JAVA ou similaire. De plus, les instructions logiques peuvent inclure des instructions assembleur, des instructions d'architecture de jeu d'instructions (ISA), des instructions machine, des instructions dépendantes de la machine, un microcode, des données de réglage d'état, des données de configuration pour les circuits intégrés, des informations d'état qui personnalisent les circuits électroniques et/ou d'autres composants structurels qui sont natifs du matériel (par exemple, processeur hôte, unité centrale de traitement/CPU, microcontrôleur, etc.).

En bloc illustré 704, l'appareil de tramage de géométrie différée détermine, sur la base des ressources disponibles dans un processeur graphique et un tronc de vue, et éventuellement un ensemble de paramètres définis par l'application, un sous-ensemble d'informations graphiques à sortir vers le processeur graphique et stocke une partie restante ou l'intégralité informations graphiques dans un cache pour une utilisation future. Les ressources disponibles dans le processeur graphique peuvent correspondre, par exemple, à une quantité de mémoire libre disponible dans le processeur graphique. Un état de mémoire réduit dans le processeur graphique peut correspondre, par exemple, à moins d'une disponibilité totale de mémoire libre dans le processeur graphique. La partie des informations graphiques à sortir vers le processeur graphique peut être limitée aux objets dans le tronc qui sont en vue directe d'un utilisateur lorsque le processeur graphique est dans l'état de mémoire réduite. Sur la base de paramètres/attributs d'application (c'est-à-dire une séquence d'animation, un mouvement de caméra), une séquence de troncs de vue et leur sous-ensemble visible d'objets géométriques peuvent être déterminés pour la sortie vers le processeur graphique pour le rendu. En ce qui concerne le mouvement de la caméra, les informations graphiques peuvent être étiquetées comme des horodatages pour déterminer quels objets se trouvent dans le tronc. Dans un tel cas, un temporisateur peut être utilisé pour déterminer l'âge des objets par rapport au tronc et/ou au champ de vision (par exemple, expiration basée sur le temporisateur).

En bloc illustré 706, l'appareil de tramage de géométrie différée délivre la partie précédemment déterminée des informations graphiques au processeur graphique. En bloc illustré 708, la partie restante est remplacée par des informations graphiques libérées et/ou inutilisées sur le processeur graphique. La quantité de mémoire libre disponible dans le processeur graphique peut être déterminée sur la base, par exemple, d'une vitesse de bus de données, d'une fréquence d'images ou d'une fréquence de changement du tronc de vue.

Ainsi, dans une situation où la quantité de données graphiques (par exemple, 6 Go) dépasse les ressources disponibles sur le processeur graphique (par exemple, le processeur graphique a 2 Go de mémoire), bloquez 704 peut déterminer, en fonction de ce qui est visible dans le frustum et de certains paramètres d'application (par exemple, si la caméra est statique ou animée), quelle partie des données sera envoyée au processeur graphique pour le rendu. La portion envoyée peut être conçue pour être inférieure à 2 Go, mais si tout est dans le tronc, les 6 Go pourraient être envoyés au processeur graphique. Les données graphiques qui ne sont pas dans le tronc peuvent être mises en cache dans la mémoire principale pour une utilisation future. Par exemple, lorsque la caméra bouge, le frustum change et certaines des données mises en cache peuvent être transmises au processeur graphique pour remplacer les données qui se trouvent maintenant en dehors du nouveau frustum.

FIGUE. 8 illustre un système de tramage à géométrie différée 800 selon un mode de réalisation. Le système 800 peut généralement mettre en œuvre un ou plusieurs aspects de la méthode 700 (figure 7), déjà discutée. Dans l'exemple illustré, un appareil de tramage à géométrie différée 801 peut inclure un contrôleur de décision 802 qui détermine, sur la base des ressources disponibles dans un processeur graphique et un tronc de vue, et éventuellement un ensemble de paramètres définis par l'application, un sous-ensemble d'informations graphiques à sortir vers le processeur graphique. Le dispositif 801 peut également inclure un périphérique de stockage 804 couplé de manière communicative au contrôleur de décision 802, dans lequel le dispositif de stockage 804 stocke une partie mise en cache (par exemple, restante) des informations graphiques pour une utilisation future. Le périphérique de stockage 804 pourrait également être une partie ou référencer une partie dans une mémoire système 924 (figure 9). Le dispositif 801 peut également inclure un gestionnaire de sortie 806 couplé en communication au dispositif de stockage 804, dans lequel le gestionnaire de sortie 806 envoie les informations graphiques au processeur graphique 810 et remplace la seconde partie par des informations graphiques libérées et/ou inutilisées sur le processeur graphique 810. L'appareil de rastérisation à géométrie différée 801 peut inclure des instructions logiques, une logique configurable, un matériel logique à fonctionnalité fixe, etc., ou toute combinaison de ceux-ci.

Le système de rastérisation à géométrie différée 800 peut inclure un affichage 808 qui présente un contenu visuel associé à une application graphique et au processeur graphique 810 couplé en communication à l'appareil 801. Le processeur graphique 810 peut traiter et gérer les informations graphiques reçues de l'appareil 801.

FIGUE. 9 montre un système informatique aux performances améliorées 900. Dans l'exemple illustré, un processeur hôte 902 comprend un contrôleur de mémoire intégré (IMC) 904 qui communique avec une mémoire système 906 (par exemple, DRAM). Le processeur hôte 902 peut être couplé à un processeur graphique 908 (par exemple, via un bus PCI/Interconnect de composants périphériques) et un module d'entrée/sortie (IO) 910. Le module E/S 910 peut être couplé à un contrôleur de réseau 912 (par exemple, sans fil et/ou filaire), un écran 914 (par exemple, écran à cristaux liquides/LCD fixe ou monté sur la tête, affichage à diodes électroluminescentes/LED, etc., pour présenter visuellement une scène en trois dimensions/3D) et stockage de masse 918 (par exemple, mémoire flash, disque optique, lecteur à état solide/SSD). Le processeur graphique illustré 908 comprend un ou plusieurs pipelines 920 (par exemple, pipeline 3D, pipeline multimédia, pipeline de calcul) et est couplé à une mémoire graphique 916 (par exemple, RAM graphique dédiée).

La mémoire système 906 et/ou le stockage de masse 918 peut inclure un ensemble d'instructions 924, qui lorsqu'il est exécuté par le processeur hôte 902 et/ou le processeur graphique 908, car le système informatique 900 exécuter un ou plusieurs aspects de la méthode 700 (figure 7).

FIGUE. 10 montre un appareil à boîtier semi-conducteur 1000 (par exemple, puce) qui comprend un substrat 1002 (par exemple, silicium, saphir, arséniure de gallium) et logique 1004 (1004une-1004c, par exemple un réseau de transistors et d'autres composants de circuits intégrés/CI) couplés au substrat 1002. La logique 1004, qui peut être implémenté, par exemple, dans une logique configurable et/ou une logique matérielle à fonctionnalité fixe, comprend un processeur graphique 1004une, un processeur hôte 1004b et un module IO 1004c. La logique 1004 peut exécuter un ou plusieurs aspects de la méthode 700 (figure 7). Le processeur hôte 1000b et/ou le module IO 1004c peut alternativement être situé ailleurs (par exemple, sur une puce différente).

Présentation du système de visiocasque

FIGUE. 11 montre un système de visiocasque (HMD) 1100 qui est porté par un utilisateur lors de l'expérience d'un environnement immersif tel que, par exemple, un environnement de réalité virtuelle (VR), un environnement de réalité augmentée (AR), un jeu multi-joueurs en trois dimensions (3D), etc. Dans l'exemple illustré, une ou plusieurs sangles 1120 tenir un cadre 1102 du système HMD 1100 devant les yeux de l'utilisateur. En conséquence, un affichage de l'œil gauche 1104 peut être positionné pour être vu par l'œil gauche de l'utilisateur et un affichage pour l'œil droit 1106 peut être positionné pour être vu par l'œil droit de l'utilisateur. L'affichage de l'œil gauche 1104 et l'affichage de l'œil droit 1106 peut alternativement être intégré dans un affichage unique dans certains exemples comme par exemple un smartphone porté par l'utilisateur. Dans le cas de la RA, les affichages 1104, 1106 peuvent être des affichages transparents qui permettent à l'utilisateur de visualiser l'environnement physique, avec d'autres contenus rendus (par exemple, des personnages virtuels, des annotations informatives, un affichage tête haute/HUD) étant présentés au-dessus d'un flux en direct de l'environnement physique.

Dans un exemple, le cadre 1102 comprend une caméra de regard vers le bas 1108 pour capturer des images d'une zone généralement devant l'utilisateur et sous l'œil gauche (par exemple, les gestes de la main gauche). De plus, une caméra de regard vers le bas 1110 peut capturer des images d'une zone généralement devant l'utilisateur et sous l'œil droit (par exemple, les gestes de la main droite). Le cadre illustré 1102 comprend également une caméra avant gauche 1112 et une caméra frontale droite 1114 pour capturer des images devant les yeux gauche et droit, respectivement, de l'utilisateur. Le cadre 1102 peut également inclure une caméra côté gauche 1116 pour capturer des images d'une zone à gauche de l'utilisateur et d'une caméra à droite 1118 pour capturer des images d'une zone à droite de l'utilisateur.

Les images capturées par les caméras 1108, 1110, 1112, 1114, 1116, 1118, qui peuvent avoir des champs de vision qui se chevauchent, peuvent être utilisés pour détecter les gestes effectués par l'utilisateur ainsi que pour analyser et/ou reproduire l'environnement extérieur sur les écrans 1104, 1106. Dans un exemple, les gestes détectés sont utilisés par une architecture de traitement graphique (par exemple, interne et/ou externe) pour restituer et/ou contrôler une représentation virtuelle de l'utilisateur dans un jeu 3D. En effet, les champs de vision qui se chevauchent peuvent permettre la capture de gestes effectués par d'autres individus (par exemple, dans un jeu multi-joueurs), où les gestes d'autres individus peuvent être davantage utilisés pour rendre/contrôler l'expérience immersive. Les champs de vision qui se chevauchent peuvent également permettre au système HMD 1100 pour détecter automatiquement les obstacles ou autres dangers à proximité de l'utilisateur. Une telle approche peut être particulièrement avantageuse dans les applications de système avancé d'assistance à la conduite (ADAS).

Dans un exemple, fournir la caméra de regard vers le bas gauche 1108 et la bonne caméra plongeante 1110 avec des champs de vision qui se chevauchent fournit une vue stéréoscopique ayant une résolution accrue. La résolution accrue peut à son tour permettre à des mouvements d'utilisateur très similaires d'être distingués les uns des autres (par exemple, avec une précision inférieure au millimètre). Le résultat peut être une performance améliorée du système HMD 1100 en ce qui concerne la fiabilité. En effet, la solution illustrée peut être utile dans une grande variété d'applications telles que, par exemple, la coloration d'informations dans les paramètres AR, l'échange d'outils/dispositifs virtuels entre utilisateurs dans un environnement multi-utilisateurs, le rendu d'objets virtuels (par exemple, des armes, des épées, personnel), et ainsi de suite. Les gestes d'autres objets, membres et/ou parties du corps peuvent également être détectés et utilisés pour rendre/contrôler l'environnement virtuel. Par exemple, les signaux myélographiques, les signaux électroencéphalographiques, le suivi des yeux, la respiration ou les bouffées, les mouvements de la main, etc., peuvent être suivis en temps réel, qu'ils proviennent du porteur ou d'un autre individu dans un environnement partagé. Les images capturées par les caméras 1108, 1110, 1112, 1114, 1116, 1118, peut également servir d'entrée contextuelle. Par exemple, il peut être déterminé que l'utilisateur indique un mot particulier à modifier ou une touche à appuyer dans une application de traitement de texte, une arme particulière à déployer ou une direction de déplacement dans un jeu, etc.

De plus, les images capturées par les caméras 1108, 1110, 1112, 1114, 1116, 1118, peut être utilisé pour effectuer des communications partagées ou une interactivité en réseau dans le fonctionnement d'équipements, la formation médicale et/ou les applications de guidage à distance/télé-opération. Des bibliothèques de gestes spécifiques à une tâche ou un apprentissage automatique par réseau neuronal pourraient permettre l'identification d'outils et la rétroaction pour une tâche. Par exemple, un outil virtuel qui se traduit par des actions réelles à distance peut être activé. Dans encore un autre exemple, le système HMD 1100 traduit la manipulation d'une perceuse virtuelle dans une scène virtuelle à l'opération à distance d'une perceuse sur un dispositif robotique déployé pour rechercher un bâtiment effondré. De plus, le système HMD 1100 peut être programmable dans la mesure où il comprend, par exemple, un protocole permettant à l'utilisateur d'ajouter un nouveau geste à une liste de gestes identifiables associés à des actions de l'utilisateur.

De plus, les différentes caméras du HMD 1100 peut être configurable pour détecter des fréquences spectrales en plus des longueurs d'onde visibles du spectre. Les capacités d'imagerie multispectrale des caméras d'entrée permettent le suivi de la position de l'utilisateur et/ou des objets en éliminant les caractéristiques de l'image non essentielles (par exemple, le bruit de fond). Par exemple, dans les applications de réalité augmentée (RA) telles que la chirurgie, les instruments et l'équipement peuvent être suivis par leur réflectivité infrarouge sans avoir besoin d'aides de suivi supplémentaires. De plus, HMD 1100 pourrait être utilisé dans des situations de faible visibilité où un « flux en direct » des diverses caméras pourrait être amélioré ou augmenté par une analyse informatique et affiché à l'utilisateur sous forme de repères visuels ou audio.

Le système HMD 1100 peut également renoncer à effectuer tout type de communication de données avec un système informatique distant ou nécessiter des câbles d'alimentation (par exemple, un mode de fonctionnement indépendant). À cet égard, le système HMD 1100 peut être un appareil « sans fil » doté d'une unité d'alimentation qui active le système HMD 1100 fonctionner indépendamment des systèmes d'alimentation externes. En conséquence, l'utilisateur peut jouer à un jeu complet sans être connecté à un autre appareil (par exemple, une console de jeu) ou à une alimentation électrique. Dans un exemple de traitement de texte, le système HMD 1100 peut présenter un clavier virtuel et/ou une souris virtuelle sur les écrans 1104 et 1106 pour fournir un bureau virtuel ou une scène de traitement de texte. Ainsi, les données de reconnaissance de geste capturées par une ou plusieurs des caméras peuvent représenter des activités de saisie de l'utilisateur sur le clavier virtuel ou des mouvements de la souris virtuelle. Les avantages incluent, sans s'y limiter, la facilité de portabilité et la confidentialité du bureau virtuel des personnes à proximité. L'architecture de traitement graphique sous-jacente peut prendre en charge la compression et/ou la décompression de signaux vidéo et audio. De plus, fournir des images séparées à l'œil gauche et à l'œil droit de l'utilisateur peut faciliter le rendu, la génération et/ou la perception de scènes 3D. Les positions relatives de l'affichage de l'œil gauche 1104 et l'affichage de l'œil droit 1106 peut également être réglable pour s'adapter aux variations de la séparation des yeux entre les différents utilisateurs.

Le nombre de caméras illustré à la Fig. 11 est de faciliter la discussion uniquement. En effet, le système HMD 1100 peut comprendre moins de six ou plus de six caméras, selon les circonstances.

Composants fonctionnels du système HMD

FIGUE. 12 montre le système HMD plus en détail. Dans l'exemple illustré, le cadre 1102 comprend un bloc d'alimentation 1200 (par exemple, alimentation par batterie, adaptateur) pour alimenter le système HMD. Le cadre illustré 1102 comprend également un module de suivi de mouvement 1220 (par exemple, accéléromètres, gyroscopes), dans lequel le module de suivi de mouvement 1220 fournit des données de suivi de mouvement, des données d'orientation et/ou des données de position à un système de processeur 1204. Le système de processeur 1204 peut inclure une carte réseau 1224 qui est couplé à un pont d'E/S 1206. Le pont d'E/S 1206 peut permettre les communications entre la carte réseau 1224 et divers composants tels que, par exemple, des modules d'entrée audio 1210, modules de sortie audio 1208, un dispositif d'affichage 1207, caméras d'entrée 1202, et ainsi de suite.

Dans l'exemple illustré, les modules d'entrée audio 1210 inclure une entrée audio droite 1218 et une entrée audio gauche 1216, qui détectent les sons pouvant être traités afin de reconnaître les commandes vocales de l'utilisateur ainsi que des personnes à proximité. Les commandes vocales reconnues dans les signaux audio capturés peuvent augmenter la reconnaissance des gestes pendant la commutation de modalité et d'autres applications. De plus, les signaux audio capturés peuvent fournir des informations 3D qui sont utilisées pour améliorer l'expérience immersive.

Les modules de sortie audio 1208 peut inclure une sortie audio droite 1214 et une sortie audio gauche 1212. Les modules de sortie audio 1208 peut délivrer un son aux oreilles de l'utilisateur et/ou d'autres personnes à proximité. Les modules de sortie audio 1208, qui peut se présenter sous la forme d'écouteurs, de haut-parleurs supra-auriculaires, de haut-parleurs supra-auriculaires, de haut-parleurs, etc., ou de toute combinaison de ceux-ci, peut fournir un contenu audio stéréo et/ou 3D à l'utilisateur (par exemple, localisation spatiale). Le cadre illustré 1102 comprend également un module sans fil 1222, ce qui peut faciliter les communications entre le système HMD et divers autres systèmes (par exemple, ordinateurs, appareils portables, consoles de jeux). Dans un exemple, le module sans fil 1222 communique avec le système de processeur 1204 via la carte réseau 1224.

Le dispositif d'affichage illustré 1207 comprend l'affichage de l'œil gauche 1104 et l'affichage de l'œil droit 1106, dans lequel le contenu visuel présenté sur les écrans 1104, 1106 peut être obtenu à partir du système de processeur 1204 via le pont E/S 1206. Les caméras d'entrée 1202 peut inclure la caméra du côté gauche 1116 la bonne caméra 1118, la caméra de regard vers le bas 1108, la caméra avant gauche 1112, la bonne caméra frontale 1114 et la bonne caméra plongeante 1110, déjà discuté.

En tournant maintenant la FIG. 13, un cluster de traitement général (GPC) 1300 est montré. Le GPC illustré 1300 peut être intégré dans un système de traitement tel que, par exemple, le système de processeur 1204 (figure 12), déjà discutée. Le GPC 1300 peut inclure un gestionnaire de pipeline 1302 qui communique avec un ordonnanceur. Dans un exemple, le gestionnaire de pipeline 1302 reçoit des tâches du planificateur et distribue les tâches à un ou plusieurs multiprocesseurs en continu (SM) 1304. Chaque SM 1304 peut être configuré pour traiter des groupes de threads, un groupe de threads pouvant être considéré comme une pluralité de threads associés qui exécutent des opérations identiques ou similaires sur différentes données d'entrée. Ainsi, chaque thread du groupe de threads peut être affecté à un SM particulier 1304. Dans un autre exemple, le nombre de threads peut être supérieur au nombre d'unités d'exécution dans le SM 1304. A cet égard, les threads d'un groupe de threads peuvent fonctionner en parallèle. Le gestionnaire de canalisation 1302 peut également spécifier des destinations de données traitées vers une barre transversale de répartition du travail 1308, qui communique avec une barre transversale de mémoire.

Ainsi, comme chaque SM 1304 transmet une tâche traitée à la barre transversale de répartition du travail 1308, la tâche traitée peut être fournie à un autre GPC 1300 pour un traitement ultérieur. La sortie du SM 1304 peut également être envoyé à une unité d'opérations pré-raster (preROP) 1314, qui à son tour dirige les données vers une ou plusieurs unités d'opérations raster, ou effectue d'autres opérations (par exemple, effectuer des traductions d'adresses, organiser des données de couleur d'image, mélanger des couleurs, etc.). Le SM 1304 peut inclure un cache interne de niveau un (L1) (non représenté) auquel le SM 1304 peut stocker des données. Le SM 1304 peut également avoir accès à un cache de niveau deux (L2) (non représenté) via une unité de gestion de mémoire (MMU) 1310 et un cache de niveau un virgule cinq (L1.5) 1306. Le MMU 1310 peut mapper des adresses virtuelles à des adresses physiques. À cet égard, la MMU 1310 peut inclure des entrées de table de page (PTE) qui sont utilisées pour mapper des adresses virtuelles à des adresses physiques d'une tuile, d'une page de mémoire et/ou d'un index de ligne de cache. Le GPC illustré 1300 comprend également une unité de texture 1312.

Architecture de pipeline graphique

Passons maintenant à la fig. 14, un pipeline graphique 1400 est montré. Dans l'exemple illustré, un pipeline spatial mondial 1420 comprend un distributeur primitif (PD) 1402. Le PD 1402 peut collecter des données de sommet associées à des services d'ordre élevé, des primitives graphiques, des triangles, etc., et transmettre les données de sommet à une unité d'extraction d'attribut de sommet (VAF) 1404. Le VAF 1404 peut récupérer des attributs de sommet associés à chacun des sommets entrants à partir de la mémoire partagée et stocker les données de sommet, ainsi que les attributs de sommet associés, dans la mémoire partagée.

Le pipeline spatial mondial illustré 1420 comprend également un sommet, une tessellation, une unité de traitement géométrique (VTG) 1406. Le VTG 1406 peut inclure, par exemple, une unité de traitement de sommet, une unité de traitement d'initialisation de tessellation, un répartiteur de tâches, une unité de génération de tâches, une unité de génération de topologie, une unité de traitement de géométrie, une unité de traitement de tessellation, etc., ou toute combinaison de ceux-ci. Dans un exemple, le VTG 1406 est une unité d'exécution programmable qui est configurée pour exécuter des programmes de géométrie, des programmes de tessellation et des programmes de vertex shader. Les programmes exécutés par le VTG 1406 peut traiter les données de sommet et les attributs de sommet reçus du VAF 1404. De plus, les programmes exécutés par le VTG 1406 peut produire des primitives graphiques, des valeurs de couleur, des facteurs normaux de surface et des valeurs de transparence à chaque sommet pour les primitives graphiques pour un traitement ultérieur dans le pipeline de traitement graphique 1400.

L'unité de traitement des vertex du VTG 1406 peut être une unité d'exécution programmable qui exécute des programmes de nuanceur de sommet, éclairant et transformant les données de sommet comme spécifié par les programmes de nuanceur de sommet. Par exemple, l'unité de traitement de sommet peut être programmée pour transformer les données de sommet d'une représentation de coordonnées basée sur un objet (par exemple, un espace objet) en un système de coordonnées basé alternativement tel que l'espace mondial ou l'espace de coordonnées de dispositif normalisé (NDC). De plus, l'unité de traitement de sommet peut lire des données de sommet et des attributs de sommet qui sont stockés dans la mémoire partagée par le VAF. 1404 et traiter les données de sommet et les attributs de sommet. Dans un exemple, l'unité de traitement des sommets stocke les sommets traités dans la mémoire partagée.

L'unité de traitement d'initialisation de tessellation (par exemple, shader de coque, shader de contrôle de tessellation) peut exécuter des programmes de shader d'initialisation de tessellation. Dans un exemple, l'unité de traitement d'initialisation de tessellation traite des sommets produits par l'unité de traitement de sommets et génère des primitives graphiques parfois appelées « patchs ». L'unité de traitement d'initialisation de tessellation peut également générer divers attributs de patch, les données de patch et les attributs de patch étant stockés dans une mémoire partagée. L'unité de génération de tâches du VTG 1406 peut récupérer des données et des attributs pour les sommets et les patchs de la mémoire partagée. Dans un exemple, l'unité de génération de tâches génère des tâches pour traiter les sommets et les patchs à traiter par les étapes ultérieures du pipeline de traitement graphique. 1400.

Les tâches produites par l'unité de génération de tâches peuvent être redistribuées par le distributeur de tâches du VTG 1406. Par exemple, les tâches produites par les différentes instances du programme vertex shader et le programme d'initialisation de tessellation peuvent varier considérablement entre un pipeline de traitement graphique 1400 et un autre. En conséquence, le distributeur de tâches peut redistribuer ces tâches de telle sorte que chaque pipeline de traitement graphique 1400 a approximativement la même charge de travail au cours des étapes ultérieures du pipeline.

Comme nous l'avons déjà indiqué, le VTG 1406 peut également comprendre une unité de génération de topologie. Dans un exemple, l'unité de génération de topologie récupère les tâches distribuées par le distributeur de tâches, indexe les sommets, y compris les sommets associés aux patchs, et calcule les coordonnées (UV) des sommets de tessellation et les indices qui relient les sommets de tessellation pour former des primitives graphiques. Les sommets indexés peuvent être stockés par l'unité de génération de topologie en mémoire partagée. L'unité de traitement de tessellation du VTG 1406 peut être configuré pour exécuter des programmes de shader de tessellation (par exemple, des shaders de domaine, des shaders d'évaluation de tessellation). L'unité de traitement de tessellation peut lire des données d'entrée à partir de la mémoire partagée et écrire des données de sortie dans la mémoire partagée. Les données de sortie peuvent être transmises de la mémoire partagée à l'unité de traitement géométrique (par exemple, l'étage de nuanceur suivant) en tant que données d'entrée.

L'unité de traitement de géométrie du VTG 1406 peut exécuter des programmes de shader de géométrie pour transformer des primitives graphiques (par exemple, des triangles, des segments de ligne, des points, etc.). Dans un exemple, les sommets sont regroupés pour construire des primitives graphiques, l'unité de traitement de géométrie subdivisant les primitives graphiques en une ou plusieurs nouvelles primitives graphiques. L'unité de traitement de géométrie peut également calculer des paramètres tels que, par exemple, des coefficients d'équation simples, qui peuvent être utilisés pour rastériser les nouvelles primitives graphiques.

Le pipeline spatial mondial illustré 1420 comprend également une échelle de fenêtre, une sélection et une unité de découpage (VPC) 1408 qui reçoit les paramètres et les sommets spécifiant de nouvelles primitives graphiques du VTG 1406. Dans un exemple, le VPC 1408 effectue un découpage, un rebord, une correction de perspective et une transformation de la fenêtre d'affichage pour identifier les primitives graphiques potentiellement visibles dans l'image rendue finale. Le VPC 1408 peut également identifier les primitives graphiques qui peuvent ne pas être visibles.

Le pipeline de traitement graphique 1400 peut également inclure une unité de carrelage 1410 couplé au pipeline spatial mondial 1420. L'unité de carrelage 1410 peut être un moteur de tri de primitives graphiques, les primitives graphiques étant traitées dans le pipeline spatial mondial 1420 puis transmis à l'unité de carrelage 1410. À cet égard, le pipeline de traitement graphique 1400 peut également inclure un pipeline d'espace d'écran 1422, dans lequel l'espace d'écran peut être divisé en tuiles de cache. Chaque tuile de cache peut donc être associée à une portion de l'espace écran. Pour chaque primitive graphique, l'unité de tuile 1410 peut identifier l'ensemble de tuiles de cache qui croisent la primitive graphique (par exemple, « tuilage »). Après avoir carrelé un certain nombre de primitives graphiques, l'unité de tuile 1410 peut traiter les primitives graphiques sur une base de tuile de cache. Dans un exemple, des primitives graphiques associées à une tuile de cache particulière sont transmises à une unité de configuration 1412 dans le pipeline de l'espace écran 1422 une tuile à la fois. Les primitives graphiques qui se croisent avec plusieurs tuiles de cache peuvent être traitées une fois dans le pipeline spatial mondial 1420, tout en étant transmis plusieurs fois au pipeline spatial d'écran 1422.

Dans un exemple, l'unité de configuration 1412 reçoit les données de vertex du VPC 1408 via l'unité de carrelage 1410 et calcule les paramètres associés aux primitives graphiques. Les paramètres peuvent inclure, par exemple, des équations de bord, des équations de plan partiel et des équations de profondeur de plaine. Le pipeline de l'espace écran 1422 peut également inclure un rastériseur 1414 couplé à l'unité de configuration 1412. Le rastériseur peut convertir par balayage les nouvelles primitives graphiques et transmettre des fragments et des données de couverture à une unité d'ombrage de pixels (PS) 1416. Le rastériseur 1414 peut également effectuer le Z culling et d'autres optimisations basées sur Z.

Le PS 1416, qui peut accéder à la mémoire partagée, peut exécuter des programmes de shader de fragment qui transforment les fragments reçus du rastériseur 1414. Plus particulièrement, les programmes de shader de fragment peuvent ombrer des fragments à une granularité au niveau du pixel (par exemple, fonctionnant comme des programmes de shader de pixel). Dans un autre exemple, le nuanceur de fragments programme des fragments de nuance à une granularité au niveau de l'échantillon, où chaque pixel comprend plusieurs échantillons, et chaque échantillon représente une partie d'un pixel. De plus, les programmes de shader de fragment peuvent ombrer des fragments à n'importe quelle autre granularité, selon les circonstances (par exemple, le taux d'échantillonnage). Le PS 1416 peut effectuer un mélange, un ombrage, une correction de perspective, un mappage de texture, etc., pour générer des fragments ombrés.

Le pipeline de l'espace d'écran illustré 1422 comprend également une unité d'opérations raster (ROP) 1418, qui peut effectuer des opérations raster telles que, par exemple, le pochoir, le test Z, la fusion, etc. Le ROP 1418 peut ensuite transmettre des données de pixels sous forme de données graphiques traitées à une ou plusieurs cibles rendues (par exemple, une mémoire graphique). Le ROP 1418 peut être configuré pour compresser les données Z ou de couleur qui sont écrites dans la mémoire et décompresser les données Z ou de couleur qui sont lues à partir de la mémoire. L'emplacement du ROP 1418 peut varier selon les circonstances.

Le pipeline de traitement graphique 1400 peut être mis en œuvre par un ou plusieurs éléments de traitement. Par exemple, le VTG 1406 et/ou le PS 1416 peut être mis en œuvre dans un ou plusieurs SM, le PD 1402, le VAF 1404, le VPC 1408, l'unité de carrelage 1410, l'unité de configuration 1412, le rastériseur 1414 et/ou le ROP 1418 pourrait être mis en œuvre dans des éléments de traitement d'un GPC particulier en conjonction avec une unité de partition correspondante. Le pipeline de traitement graphique 1400 peut également être implémenté dans une logique matérielle à fonctionnalité fixe. En effet, le pipeline de traitement graphique 1400 peut être implémenté dans un PPU.

Ainsi, le pipeline spatial mondial illustré 1420 traite les objets graphiques dans l'espace 3D, où la position de chaque objet graphique est connue par rapport aux autres objets graphiques et par rapport à un système de coordonnées 3D. En revanche, le pipeline d'espace d'écran 1422 peut traiter des objets graphiques qui ont été projetés à partir du système de coordonnées 3D sur une surface plane 2D qui représente la surface du dispositif d'affichage. De plus, le pipeline spatial mondial 1420 peut être divisé en un pipeline de phase alpha et un pipeline de phase bêta, le pipeline de phase alpha comprenant des étages de pipeline provenant du PD 1402 via l'unité de génération de tâches. Le pipeline de phase bêta peut inclure des étapes de pipeline depuis l'unité de génération de topologie jusqu'au VPC 1408. Dans un tel cas, le pipeline de traitement graphique 1400 peut effectuer un premier ensemble d'opérations (par exemple, un seul thread, un groupe de threads, plusieurs groupes de threads agissant à l'unisson) dans le pipeline de phase alpha et un deuxième ensemble d'opérations (par exemple, un seul thread, un groupe de threads, plusieurs groupes de threads agissant à l'unisson) dans le pipeline de la phase bêta.

Si plusieurs pipelines de traitement graphique 1400 sont en cours d'utilisation, les données de sommet et les attributs de sommet associés à un ensemble d'objets graphiques peuvent être divisés de sorte que chaque pipeline de traitement graphique 1400 a une charge de travail similaire pendant la phase alpha. Par conséquent, le traitement en phase alpha peut considérablement augmenter la quantité de données de sommet et d'attributs de sommet, de sorte que la quantité de données de sommet et d'attributs de sommet produite par l'unité de génération de tâche est nettement supérieure à la quantité de données de sommet et d'attributs de sommet traités par le PD. 1402 et le VAF 1404. De plus, les unités de génération de tâches associées aux différents pipelines de traitement graphique 1400 peut produire des données de sommet et des attributs de sommet ayant différents niveaux de qualité, même au début de la phase alpha avec la même quantité d'attributs. Dans de tels cas, le distributeur de tâches peut redistribuer les attributs produits par le pipeline de phase alpha de sorte que chaque pipeline de traitement graphique 1400 a approximativement la même charge de travail au début du pipeline de la phase bêta.

Passons maintenant à la fig. 15, un multiprocesseur de streaming (SM) 1500 est montré. Le SM illustré 1500 comprend K unités de planification 1504 couplé à un cache d'instructions 1502, dans lequel chaque unité de programmation 1504 reçoit un réseau de blocs de threads d'un gestionnaire de pipeline (non représenté) et gère la planification d'instructions pour un ou plusieurs blocs de threads de chaque réseau de blocs de threads actifs. L'unité de planification 1504 peut planifier des threads pour l'exécution dans des groupes de threads parallèles, où chaque groupe peut être appelé un « warp ». Ainsi, chaque chaîne pourrait comprendre, par exemple, soixante-quatre fils. De plus, l'unité de programmation 1504 peut gérer une pluralité de blocs de threads différents, en allouant les blocs de threads aux chaînes pour l'exécution. L'unité de programmation peut ensuite programmer des instructions à partir de la pluralité de chaînes différentes sur diverses unités fonctionnelles au cours de chaque cycle d'horloge. Chaque unité de planification 1504 peut comprendre une ou plusieurs unités d'envoi d'instructions 1522, dans lequel chaque unité d'expédition 1522 transmet des instructions à une ou plusieurs des unités fonctionnelles. Le nombre d'unités d'expédition 1522 peut varier selon les circonstances. Dans l'exemple illustré, l'unité de planification 1504 comprend deux unités d'expédition 1522 qui permettent d'envoyer deux instructions différentes d'une même chaîne à chaque cycle d'horloge.

Le SM 1500 peut également inclure un fichier de registre 1506. Le fichier du registre 1506 peut comprendre un ensemble de registres qui sont divisés entre les unités fonctionnelles de telle sorte que chaque unité fonctionnelle se voit allouer une partie dédiée du fichier de registre 1506. Le fichier du registre 1506 peut également être divisé entre différentes chaînes exécutées par le SM 1500. Dans un exemple, le fichier de registre 1506 fournit un stockage temporaire pour les opérandes connectés aux chemins de données des unités fonctionnelles. Le SM illustré 1500 comprend également des noyaux de traitement L 1508, où L peut être un nombre relativement grand (par exemple, 192). Chaque noyau 1508 peut être une unité de traitement simple précision en pipeline qui comprend une unité logique arithmétique à virgule flottante (par exemple, IEEE 754-2008) ainsi qu'une unité logique arithmétique entière.

Le SM illustré 1500 comprend également M unités de double précision (DPU) 1510, N unités fonctionnelles spéciales (SFU) 1512 et P unités de chargement/stockage (LSU) 1514. Chaque DPU 1510 peut implémenter une arithmétique à virgule flottante double précision et chaque SFU 1512 peut exécuter des fonctions spéciales telles que, par exemple, la copie de rectangles, la fusion de pixels, etc. De plus, chaque LSU 1514 peut effectuer des opérations de chargement et de stockage entre une mémoire partagée 1518 et le fichier du registre 1506. Dans un exemple, les opérations de chargement et de stockage sont effectuées via J texture unit/L1 caches 1520 et un réseau interconnecté 1516. Dans un exemple, l'unité de texture J/L1 cache 1520 sont également couplés à une traverse (non représentée). Ainsi, le réseau d'interconnexion 1516 peut connecter chacune des unités fonctionnelles au fichier de registre 1506 et à la mémoire partagée 1518. Dans un exemple, le réseau d'interconnexion 1516 fonctionne comme une barre transversale qui relie l'une des unités fonctionnelles à l'un des registres du fichier de registre 1506.

Le SM 1500 peut être mis en œuvre dans un processeur graphique (par exemple, une unité de traitement graphique/GPU), dans lequel l'unité de texture/L1 met en cache 1520 peut accéder à des cartes de texture à partir de la mémoire et échantillonner les cartes de texture pour produire des valeurs de texture échantillonnées à utiliser dans des programmes de shader. Opérations de texture effectuées par les caches d'unité de texture/L1 1520 incluent, mais ne sont pas limités à, l'anticrénelage basé sur les mipmaps.

Exemple de vue d'ensemble du système supplémentaire

FIGUE. 16 est un schéma fonctionnel d'un système de traitement 1600, selon un mode de réalisation. Dans divers modes de réalisation, le système 1600 comprend un ou plusieurs processeurs 1602 et un ou plusieurs processeurs graphiques 1608, et peut être un système de bureau à processeur unique, un système de station de travail multiprocesseur ou un système de serveur ayant un grand nombre de processeurs 1602 ou cœurs de processeur 1607. Dans le mode de réalisation, le système 1600 est une plate-forme de traitement incorporée dans un circuit intégré de système sur puce (SoC) pour une utilisation dans des appareils mobiles, portables ou intégrés.

Une incarnation du système 1600 peut inclure, ou être incorporé dans une plate-forme de jeu sur serveur, une console de jeu, y compris une console de jeu et multimédia, une console de jeu mobile, une console de jeu portable ou une console de jeu en ligne. Dans certains modes de réalisation, le système 1600 est un téléphone mobile, un téléphone intelligent, une tablette ou un appareil Internet mobile. Système de traitement des données 1600 peut également inclure, se coupler avec ou être intégré dans un dispositif portable, tel qu'un dispositif portable de montre intelligente, un dispositif de lunettes intelligent, un dispositif de réalité augmentée ou un dispositif de réalité virtuelle. Dans certains modes de réalisation, le système de traitement de données 1600 est un téléviseur ou un décodeur doté d'un ou plusieurs processeurs 1602 et une interface graphique générée par un ou plusieurs processeurs graphiques 1608.

Dans certains modes de réalisation, le ou les processeurs 1602 chacun comprend un ou plusieurs cœurs de processeur 1607 pour traiter des instructions qui, lorsqu'elles sont exécutées, effectuent des opérations pour le logiciel système et utilisateur. Dans certains modes de réalisation, chacun des un ou plusieurs cœurs de processeur 1607 est configuré pour traiter un jeu d'instructions spécifique 1609. Dans certains modes de réalisation, le jeu d'instructions 1609 peut faciliter le calcul du jeu d'instructions complexes (CISC), le calcul du jeu d'instructions réduit (RISC) ou le calcul via un mot d'instruction très long (VLIW). Plusieurs cœurs de processeur 1607 chacun peut traiter un jeu d'instructions différent 1609, qui peut inclure des instructions pour faciliter l'émulation d'autres jeux d'instructions.Noyau de processeur 1607 peut également inclure d'autres dispositifs de traitement, tels qu'un processeur de signal numérique (DSP).

Dans certains modes de réalisation, le processeur 1602 comprend la mémoire cache 1604. Selon l'architecture, le processeur 1602 peut avoir un seul cache interne ou plusieurs niveaux de cache interne. Dans certains modes de réalisation, la mémoire cache est partagée entre divers composants du processeur 1602. Dans certains modes de réalisation, le processeur 1602 utilise également un cache externe (par exemple, un cache de niveau 3 (L3) ou un cache de dernier niveau (LLC)) (non illustré), qui peut être partagé entre les cœurs de processeur 1607 en utilisant des techniques de cohérence de cache connues. Un dossier de registre 1606 est en plus inclus dans le processeur 1602 qui peut inclure différents types de registres pour stocker différents types de données (par exemple, des registres d'entiers, des registres à virgule flottante, des registres d'état et un registre de pointeur d'instruction). Certains registres peuvent être des registres à usage général, tandis que d'autres registres peuvent être spécifiques à la conception du processeur 1602.

Dans certains modes de réalisation, le processeur 1602 est couplé à un bus processeur 1610 pour transmettre des signaux de communication tels que des adresses, des données ou des signaux de commande entre le processeur 1602 et d'autres composants du système 1600. Dans un mode de réalisation, le système 1600 utilise une architecture de système « hub » exemplaire, y compris un concentrateur de contrôleur de mémoire 1616 et un concentrateur de contrôleur d'entrée-sortie (E/S) 1630. Un hub de contrôleur de mémoire 1616 facilite la communication entre un dispositif de mémoire et d'autres composants du système 1600, tandis qu'un I/O Controller Hub (ICH) 1630 fournit des connexions aux périphériques d'E/S via un bus d'E/S local. Dans un mode de réalisation, la logique du concentrateur de contrôleur de mémoire 1616 est intégré au processeur.

Dispositif de mémoire 1620 peut être un dispositif de mémoire vive dynamique (DRAM), un dispositif de mémoire vive statique (SRAM), un dispositif de mémoire flash, un dispositif de mémoire à changement de phase ou tout autre dispositif de mémoire ayant des performances appropriées pour servir de mémoire de processus. Dans un mode de réalisation, le dispositif de mémoire 1620 peut fonctionner comme mémoire système pour le système 1600, pour stocker des données 1622 et instructions 1621 à utiliser lorsque le ou les processeurs 1602 exécute une application ou un processus. Concentrateur de contrôleur de mémoire 1616 se couple également avec un processeur graphique externe en option 1612, qui peut communiquer avec le ou les processeurs graphiques 1608 dans les processeurs 1602 pour effectuer des opérations graphiques et multimédias.

Dans certains modes de réalisation, ICH 1630 permet aux périphériques de se connecter au périphérique de mémoire 1620 et processeur 1602 via un bus d'E/S à grande vitesse. Les périphériques d'E/S incluent, sans s'y limiter, un contrôleur audio 1646, une interface de micrologiciel 1628, un émetteur-récepteur sans fil 1626 (par exemple, Wi-Fi, Bluetooth), un périphérique de stockage de données 1624 (par exemple, disque dur, mémoire flash, etc.) et un contrôleur d'E/S hérité 1640 pour coupler des périphériques hérités (par exemple, Personal System 2 (PS/2)) au système. Un ou plusieurs contrôleurs Universal Serial Bus (USB) 1642 connecter des périphériques d'entrée, tels que le clavier et la souris 1644 combinaisons. Un contrôleur de réseau 1634 peut également se coupler à l'ICH 1630. Dans certains modes de réalisation, un contrôleur de réseau hautes performances (non représenté) se couple au bus du processeur 1610. On comprendra que le système 1600 représenté est exemplaire et non limitatif, car d'autres types de systèmes de traitement de données qui sont configurés différemment peuvent également être utilisés. Par exemple, le concentrateur du contrôleur d'E/S 1630 peut être intégré dans le ou les processeurs 1602, ou le concentrateur du contrôleur mémoire 1616 et concentrateur de contrôleur d'E/S 1630 peut être intégré dans un processeur graphique externe discret, tel que le processeur graphique externe 1612.

FIGUE. 17 est un schéma fonctionnel d'un mode de réalisation d'un processeur 1700 ayant un ou plusieurs cœurs de processeur 1702UNE-1702N, un contrôleur de mémoire intégré 1714, et un processeur graphique intégré 1708. Ces éléments de la fig. 17 ayant les mêmes numéros de référence (ou noms) que les éléments de toute autre figure ici peuvent fonctionner ou fonctionner de n'importe quelle manière similaire à celle décrite ailleurs ici, mais ne sont pas limités à cela. Processeur 1700 peut inclure des noyaux supplémentaires jusqu'à et y compris un noyau supplémentaire 1702N représenté par les cases en pointillés. Chacun des cœurs de processeur 1702UNE-1702N inclut une ou plusieurs unités de cache interne 1704UNE-1704N. Dans certains modes de réalisation, chaque cœur de processeur a également accès à une ou plusieurs unités mises en cache partagées 1706.

Les unités de cache interne 1704UNE-1704N et unités de cache partagées 1706 représenter une hiérarchie de mémoire cache dans le processeur 1700. La hiérarchie de mémoire cache peut comprendre au moins un niveau de cache d'instructions et de données dans chaque cœur de processeur et un ou plusieurs niveaux de cache de niveau intermédiaire partagé, tels qu'un niveau 2 (L2), niveau 3 (L3), niveau 4 (L4 ), ou d'autres niveaux de cache, où le niveau de cache le plus élevé avant la mémoire externe est classé comme LLC. Dans certains modes de réalisation, la logique de cohérence d'antémémoire maintient la cohérence entre les diverses unités d'antémémoire 1706 et 1704UNE-1704N.

Dans certains modes de réalisation, le processeur 1700 peut également comprendre un ensemble d'une ou plusieurs unités de contrôleur de bus 1716 et un noyau d'agent système 1710. La ou les unités de contrôle de bus 1716 gérer un ensemble de bus périphériques, tels qu'un ou plusieurs bus d'interconnexion de composants périphériques (par exemple, PCI, PCI Express). Noyau de l'agent système 1710 fournit des fonctionnalités de gestion pour les différents composants du processeur. Dans certains modes de réalisation, le noyau de l'agent système 1710 comprend un ou plusieurs contrôleurs de mémoire intégrés 1714 pour gérer l'accès à divers dispositifs de mémoire externes (non représentés).

Dans certains modes de réalisation, un ou plusieurs des cœurs de processeur 1702UNE-1702N inclut la prise en charge du multi-threading simultané. Dans un tel mode de réalisation, le noyau de l'agent système 1710 comprend des composants pour la coordination et l'exploitation des noyaux 1702UNE-1702N pendant le traitement multithread. Noyau de l'agent système 1710 peut en outre comprendre une unité de contrôle d'alimentation (PCU), qui comprend une logique et des composants pour réguler l'état d'alimentation des cœurs de processeur 1702UNE-1702N et processeur graphique 1708.

Dans certains modes de réalisation, le processeur 1700 comprend en plus un processeur graphique 1708 pour exécuter des opérations de traitement graphique. Dans certains modes de réalisation, le processeur graphique 1708 couple avec l'ensemble des unités de cache partagées 1706, et le noyau de l'agent système 1710, y compris le ou les contrôleurs de mémoire intégrés 1714. Dans certains modes de réalisation, un contrôleur d'affichage 1711 est couplé au processeur graphique 1708 pour piloter la sortie du processeur graphique vers un ou plusieurs écrans couplés. Dans certains modes de réalisation, le contrôleur d'affichage 1711 peut être un module séparé couplé au processeur graphique via au moins une interconnexion, ou peut être intégré dans le processeur graphique 1708 ou noyau de l'agent système 1710.

Dans certains modes de réalisation, une unité d'interconnexion en anneau 1712 sert à coupler les composants internes du processeur 1700. Cependant, une autre unité d'interconnexion peut être utilisée, telle qu'une interconnexion point à point, une interconnexion commutée ou d'autres techniques, y compris des techniques bien connues dans l'art. Dans certains modes de réalisation, le processeur graphique 1708 se couple avec l'interconnexion en anneau 1712 via une liaison E/S 1713.

Le lien I/O exemplaire 1713 représente au moins l'une des multiples variétés d'interconnexions d'E/S, y compris une interconnexion d'E/S sur boîtier qui facilite la communication entre divers composants de processeur et un module de mémoire intégré hautes performances 1718, tel qu'un module eDRAM. Dans certains modes de réalisation, chacun des cœurs de processeur 1702-1702N et processeur graphique 1708 utiliser des modules de mémoire intégrés 1718 en tant que cache de dernier niveau partagé.

Dans certains modes de réalisation, les cœurs de processeur 1702UNE-1702N sont des cœurs homogènes exécutant la même architecture de jeu d'instructions. Dans un autre mode de réalisation, les cœurs de processeur 1702UNE-1702N sont hétérogènes en termes d'architecture de jeu d'instructions (ISA), où un ou plusieurs cœurs de processeur 1702A-N exécute un premier jeu d'instructions, tandis qu'au moins l'un des autres cœurs exécute un sous-ensemble du premier jeu d'instructions ou un jeu d'instructions différent. Dans un mode de réalisation, les cœurs de processeur 1702UNE-1702N sont hétérogènes en termes de microarchitecture, où un ou plusieurs coeurs ayant une consommation électrique relativement plus élevée se couplent avec un ou plusieurs coeurs ayant une consommation électrique plus faible. De plus, le processeur 1700 peut être implémenté sur une ou plusieurs puces ou sous forme de circuit intégré SoC ayant les composants illustrés, en plus d'autres composants.

FIGUE. 18 est un schéma fonctionnel d'un processeur graphique 1800, qui peut être une unité de traitement graphique discrète, ou peut être un processeur graphique intégré à une pluralité de cœurs de traitement. Dans certains modes de réalisation, le processeur graphique communique via une interface E/S mappée en mémoire avec des registres sur le processeur graphique et avec des commandes placées dans la mémoire du processeur. Dans certains modes de réalisation, le processeur graphique 1800 comprend une interface mémoire 1814 pour accéder à la mémoire. Interface mémoire 1814 peut être une interface vers la mémoire locale, un ou plusieurs caches internes, un ou plusieurs caches externes partagés et/ou vers la mémoire système.

Dans certains modes de réalisation, le processeur graphique 1800 comprend également un contrôleur d'affichage 1802 pour conduire des données de sortie d'affichage vers un dispositif d'affichage 1820. Contrôleur d'affichage 1802 comprend du matériel pour un ou plusieurs plans de superposition pour l'affichage et la composition de plusieurs couches d'éléments vidéo ou d'interface utilisateur. Dans certains modes de réalisation, le processeur graphique 1800 comprend un moteur de codec vidéo 1806 pour encoder, décoder ou transcoder des médias vers, depuis ou entre un ou plusieurs formats d'encodage multimédia, y compris, mais sans s'y limiter, les formats MPEG (Moving Picture Experts Group) tels que MPEG-2, les formats de codage vidéo avancé (AVC) tels que H.264/MPEG-4 AVC, ainsi que les formats Society of Motion Picture & Television Engineers (SMPTE) 421M/VC-1 et Joint Photographic Experts Group (JPEG) tels que les formats JPEG et Motion JPEG (MJPEG).

Dans certains modes de réalisation, le processeur graphique 1800 comprend un moteur de transfert d'images par blocs (BLIT) 1804 pour effectuer des opérations de rastérisation en deux dimensions (2D), y compris, par exemple, des transferts de blocs de limites de bits. Cependant, dans un mode de réalisation, les opérations graphiques 2D sont effectuées à l'aide d'un ou plusieurs composants du moteur de traitement graphique (GPE) 1810. Dans certains modes de réalisation, le moteur de traitement graphique 1810 est un moteur de calcul permettant d'effectuer des opérations graphiques, notamment des opérations graphiques tridimensionnelles (3D) et des opérations multimédias.

Dans certains modes de réalisation, le GPE 1810 comprend un pipeline 3D 1812 pour effectuer des opérations 3D, telles que le rendu d'images et de scènes tridimensionnelles à l'aide de fonctions de traitement qui agissent sur des formes primitives 3D (par exemple, rectangle, triangle, etc.). La canalisation 3D 1812 comprend des éléments de fonction programmables et fixes qui effectuent diverses tâches au sein de l'élément et/ou génèrent des fils d'exécution vers un sous-système 3D/média 1815. Alors que le pipeline 3D 1812 peut être utilisé pour effectuer des opérations multimédias, un mode de réalisation du GPE 1810 comprend également un pipeline de médias 1816 qui est spécifiquement utilisé pour effectuer des opérations multimédias, telles que le post-traitement vidéo et l'amélioration de l'image.

Dans certains modes de réalisation, le pipeline multimédia 1816 comprend une fonction fixe ou des unités logiques programmables pour effectuer une ou plusieurs opérations multimédia spécialisées, telles que l'accélération de décodage vidéo, le désentrelacement vidéo et l'accélération de codage vidéo à la place ou au nom du moteur de codec vidéo 1806. Dans certains modes de réalisation, le pipeline multimédia 1816 comprend en outre une unité de génération de threads pour générer des threads à exécuter sur le sous-système 3D/Media 1815. Les threads générés effectuent des calculs pour les opérations multimédias sur une ou plusieurs unités d'exécution graphique incluses dans le sous-système 3D/Media 1815.

Dans certains modes de réalisation, le sous-système 3D/Media 1815 inclut une logique pour l'exécution des threads générés par le pipeline 3D 1812 et pipeline média 1816. Dans un mode de réalisation, les pipelines envoient des demandes d'exécution de thread au sous-système 3D/Media 1815, qui inclut une logique de répartition des threads pour arbitrer et répartir les différentes requêtes vers les ressources d'exécution de thread disponibles. Les ressources d'exécution comprennent un réseau d'unités d'exécution graphiques pour traiter les fils 3D et multimédia. Dans certains modes de réalisation, le sous-système 3D/Media 1815 inclut un ou plusieurs caches internes pour les instructions et les données des threads. Dans certains modes de réalisation, le sous-système comprend également une mémoire partagée, comprenant des registres et une mémoire adressable, pour partager des données entre des threads et pour stocker des données de sortie.

FIGUE. 19 est un schéma fonctionnel d'un moteur de traitement graphique 1910 d'un processeur graphique selon certains modes de réalisation. Dans un mode de réalisation, le GPE 1910 est une version du GPE 1810 montré à la Fig. 18 . Les éléments de la fig. 19 ayant les mêmes numéros de référence (ou noms) que les éléments de toute autre figure ici peuvent fonctionner ou fonctionner de n'importe quelle manière similaire à celle décrite ailleurs ici, mais ne sont pas limités à cela.

Dans certains modes de réalisation, le GPE 1910 couple avec un streamer de commande 1903, qui fournit un flux de commandes au GPE 3D et aux pipelines multimédias 1912, 1916. Dans certains modes de réalisation, le streamer de commandes 1903 est couplé à une mémoire, qui peut être une mémoire système, ou une ou plusieurs mémoires caches internes et mémoires caches partagées. Dans certains modes de réalisation, le streamer de commandes 1903 reçoit les commandes de la mémoire et envoie les commandes au pipeline 3D 1912 et/ou pipeline média 1916. Les commandes sont des directives extraites d'un tampon en anneau, qui stocke les commandes pour les pipelines 3D et multimédia 1912, 1916. Dans un mode de réalisation, la mémoire tampon en anneau peut en outre comprendre des mémoires tampon de commandes par lots stockant des lots de plusieurs commandes. Les pipelines 3D et médias 1912, 1916 traiter les commandes en effectuant des opérations via la logique dans les pipelines respectifs ou en envoyant un ou plusieurs fils d'exécution à un tableau d'unités d'exécution 1914. Dans certains modes de réalisation, le réseau d'unités d'exécution 1914 est évolutif, de sorte que le réseau comprend un nombre variable d'unités d'exécution en fonction de la puissance cible et du niveau de performance du GPE 1910.

Dans certains modes de réalisation, un moteur d'échantillonnage 1930 couple avec la mémoire (par exemple, la mémoire cache ou la mémoire système) et le tableau d'unités d'exécution 1914. Dans certains modes de réalisation, le moteur d'échantillonnage 1930 fournit un mécanisme d'accès mémoire pour un réseau d'unités d'exécution 1914 qui permet l'exécution du tableau 1914 pour lire des graphiques et des données multimédias à partir de la mémoire. Dans certains modes de réalisation, le moteur d'échantillonnage 1930 comprend une logique pour effectuer des opérations d'échantillonnage d'images spécialisées pour les médias.

Dans certains modes de réalisation, la logique d'échantillonnage de média spécialisée dans le moteur d'échantillonnage 1930 comprend un module de débruitage/désentrelacement 1932, un module d'estimation de mouvement 1934, et un module de mise à l'échelle et de filtrage d'images 1936. Dans certains modes de réalisation, le module de débruitage/désentrelacement 1932 comprend une logique pour exécuter un ou plusieurs algorithme de débruitage ou de désentrelacement sur des données vidéo décodées. La logique de désentrelacement combine des champs alternatifs de contenu vidéo entrelacé en une seule image vidéo. La logique de débruitage réduit ou supprime le bruit de données des données vidéo et image. Dans certains modes de réalisation, la logique de débruitage et la logique de désentrelacement sont adaptatives au mouvement et utilisent un filtrage spatial ou temporel basé sur la quantité de mouvement détectée dans les données vidéo. Dans certains modes de réalisation, le module de débruitage/désentrelacement 1932 comprend une logique de détection de mouvement dédiée (par exemple, dans le moteur d'estimation de mouvement 1934).

Dans certains modes de réalisation, le moteur d'estimation de mouvement 1934 fournit une accélération matérielle pour les opérations vidéo en exécutant des fonctions d'accélération vidéo telles que l'estimation du vecteur de mouvement et la prédiction sur les données vidéo. Le moteur d'estimation de mouvement détermine des vecteurs de mouvement qui décrivent la transformation de données d'image entre des trames vidéo successives. Dans certains modes de réalisation, un codec multimédia de processeur graphique utilise un moteur d'estimation de mouvement vidéo 1934 pour effectuer des opérations sur vidéo au niveau des macro-blocs qui pourraient autrement être trop gourmandes en calculs pour être exécutées avec un processeur à usage général. Dans certains modes de réalisation, le moteur d'estimation de mouvement 1934 est généralement disponible pour les composants du processeur graphique pour aider au décodage vidéo et aux fonctions de traitement qui sont sensibles ou adaptatives à la direction ou à l'amplitude du mouvement dans les données vidéo.

Dans certains modes de réalisation, le module de mise à l'échelle et de filtrage d'image 1936 effectue des opérations de traitement d'images pour améliorer la qualité visuelle des images et des vidéos générées. Dans certains modes de réalisation, le module de mise à l'échelle et de filtrage 1936 traite les données d'image et de vidéo pendant l'opération d'échantillonnage avant de fournir les données au réseau d'unités d'exécution 1914.

Dans certains modes de réalisation, le GPE 1910 comprend un port de données 1944, qui fournit un mécanisme supplémentaire permettant aux sous-systèmes graphiques d'accéder à la mémoire. Dans certains modes de réalisation, le port de données 1944 facilite l'accès à la mémoire pour les opérations, y compris les écritures de cible de rendu, les lectures de mémoire tampon constantes, les lectures/écritures d'espace mémoire de travail et les accès à la surface des médias Dans certains modes de réalisation, le port de données 1944 inclut un espace de mémoire cache pour mettre en cache les accès à la mémoire. La mémoire cache peut être un seul cache de données ou séparée en plusieurs caches pour les multiples sous-systèmes qui accèdent à la mémoire via le port de données (par exemple, un cache de tampon de rendu, un cache de tampon constant, etc.). Dans certains modes de réalisation, des threads s'exécutant sur une unité d'exécution dans un tableau d'unités d'exécution 1914 communiquer avec le port de données en échangeant des messages via une interconnexion de distribution de données qui couple chacun des sous-systèmes de GPE 1910.

FIGUE. 20 est un schéma fonctionnel d'un autre mode de réalisation d'un processeur graphique 2000. Les éléments de la fig. 20 ayant les mêmes numéros de référence (ou noms) que les éléments de toute autre figure ici peuvent fonctionner ou fonctionner de n'importe quelle manière similaire à celle décrite ailleurs ici, mais ne sont pas limités à cela.

Dans certains modes de réalisation, le processeur graphique 2000 comprend une interconnexion en anneau 2002, un frontal de pipeline 2004, un moteur multimédia 2037, et les cœurs graphiques 2080UNE-2080N. Dans certains modes de réalisation, l'interconnexion en anneau 2002 couple le processeur graphique à d'autres unités de traitement, y compris d'autres processeurs graphiques ou un ou plusieurs cœurs de processeur à usage général. Dans certains modes de réalisation, le processeur graphique est l'un des nombreux processeurs intégrés dans un système de traitement multicœur.

Dans certains modes de réalisation, le processeur graphique 2000 reçoit des lots de commandes via l'interconnexion en anneau 2002. Les commandes entrantes sont interprétées par un streamer de commandes 2003 en amont du pipeline 2004. Dans certains modes de réalisation, le processeur graphique 2000 comprend une logique d'exécution évolutive pour effectuer un traitement de géométrie 3D et un traitement multimédia via le ou les cœurs graphiques 2080UNE-2080N. Pour les commandes de traitement de géométrie 3D, commande streamer 2003 fournit des commandes au pipeline de géométrie 2036. Pour au moins certaines commandes de traitement multimédia, la commande streamer 2003 fournit les commandes à un frontal vidéo 2034, qui se couple avec un moteur multimédia 2037. Dans certains modes de réalisation, le moteur multimédia 2037 inclut un moteur de qualité vidéo (VQE) 2030 pour le post-traitement vidéo et image et un encodage/décodage multiformat (MFX) 2033 pour fournir un codage et un décodage des données multimédias avec accélération matérielle. Dans certains modes de réalisation, le pipeline géométrique 2036 et moteur multimédia 2037 génèrent chacun des fils d'exécution pour les ressources d'exécution de fil fournies par au moins un cœur graphique 2080UNE.

Dans certains modes de réalisation, le processeur graphique 2000 comprend des ressources d'exécution de threads évolutives avec des cœurs modulaires 2080UNE-2080N (parfois appelées tranches de cœur), chacune ayant plusieurs sous-cœurs 2050UNE-2050N, 2060UNE-2060N (parfois appelées sous-tranches principales). Dans certains modes de réalisation, le processeur graphique 2000 peut avoir n'importe quel nombre de cœurs graphiques 2080A travers 2080N. Dans certains modes de réalisation, le processeur graphique 2000 comprend un noyau graphique 2080A ayant au moins un premier sous-noyau 2050A et un deuxième noyau sous-cœur 2060A. Dans d'autres modes de réalisation, le processeur graphique est un processeur basse consommation avec un seul sous-cœur (par exemple, 2050UNE). Dans certains modes de réalisation, le processeur graphique 2000 comprend plusieurs cœurs graphiques 2080UNE-2080N, comprenant chacun un ensemble de premiers sous-noyaux 2050UNE-2050N et un ensemble de seconds sous-noyaux 2060UNE-2060N. Chaque sous-cœur de l'ensemble des premiers sous-cœurs 2050UNE-2050N comprend au moins un premier ensemble d'unités d'exécution 2052UNE-2052Échantillonneurs N et média/texture 2054UNE-2054N. Chaque sous-cœur dans l'ensemble des deuxièmes sous-cœurs 2060UNE-2060N comprend au moins un deuxième ensemble d'unités d'exécution 2062UNE-2062N et échantillonneurs 2064UNE-2064N. Dans certains modes de réalisation, chaque sous-noyau 2050UNE-2050N, 2060UNE-2060N partage un ensemble de ressources partagées 2070UNE-2070N. Dans certains modes de réalisation, les ressources partagées comprennent une mémoire cache partagée et une logique d'opération de pixel. D'autres ressources partagées peuvent également être incluses dans les divers modes de réalisation du processeur graphique.

FIGUE. 21 illustre la logique d'exécution du thread 2100 comprenant un réseau d'éléments de traitement utilisés dans certains modes de réalisation d'un GPE. Les éléments de la fig. 21 ayant les mêmes numéros de référence (ou noms) que les éléments de toute autre figure ici peuvent fonctionner ou fonctionner de n'importe quelle manière similaire à celle décrite ailleurs ici, mais ne sont pas limités à cela.

Dans certains modes de réalisation, la logique d'exécution de thread 2100 inclut un pixel shader 2102, un répartiteur de threads 2104, cache d'instructions 2106, un réseau d'unités d'exécution évolutif comprenant une pluralité d'unités d'exécution 2108UNE-2108N, un échantillonneur 2110, un cache de données 2112, et un port de données 2114. Dans un mode de réalisation, les composants inclus sont interconnectés via une structure d'interconnexion qui se relie à chacun des composants. Dans certains modes de réalisation, la logique d'exécution de thread 2100 comprend une ou plusieurs connexions à la mémoire, telles que la mémoire système ou la mémoire cache, via un ou plusieurs caches d'instructions 2106, port de données 2114, échantillonneur 2110, et tableau d'unités d'exécution 2108UNE-2108N. Dans certains modes de réalisation, chaque unité d'exécution (par ex. 2108A) est un processeur vectoriel individuel capable d'exécuter plusieurs threads simultanés et de traiter plusieurs éléments de données en parallèle pour chaque thread. Dans certains modes de réalisation, le réseau d'unités d'exécution 2108UNE-2108N comprend un nombre quelconque d'unités d'exécution individuelles.

Dans certains modes de réalisation, le réseau d'unités d'exécution 2108UNE-2108N est principalement utilisé pour exécuter des programmes de « shader ». Dans certains modes de réalisation, les unités d'exécution du tableau 2108UNE-2108N exécute un jeu d'instructions qui inclut la prise en charge native de nombreuses instructions de shader graphique 3D standard, de sorte que les programmes de shader des bibliothèques graphiques (par exemple, Direct 3D et OpenGL) soient exécutés avec une traduction minimale. Les unités d'exécution prennent en charge le traitement de vertex et de géométrie (par exemple, les programmes de vertex, les programmes de géométrie, les vertex shaders), le traitement de pixels (par exemple, les pixel shaders, les fragment shaders) et le traitement à usage général (par exemple, les shaders de calcul et de média).

Chaque unité d'exécution dans le tableau d'unités d'exécution 2108UNE-2108N opère sur des tableaux d'éléments de données. Le nombre d'éléments de données est la « taille d'exécution » ou le nombre de canaux pour l'instruction. Un canal d'exécution est une unité logique d'exécution pour l'accès aux éléments de données, le masquage et le contrôle de flux dans les instructions. Le nombre de canaux peut être indépendant du nombre d'unités logiques arithmétiques (ALU) physiques ou d'unités à virgule flottante (FPU) pour un processeur graphique particulier. Dans certains modes de réalisation, les unités d'exécution 2108UNE-2108N prend en charge les types de données entiers et à virgule flottante.

L'ensemble d'instructions d'unité d'exécution comprend des instructions de données multiples à instruction unique (SIMD). Les divers éléments de données peuvent être stockés sous forme de type de données condensées dans un registre et l'unité d'exécution traitera les divers éléments en fonction de la taille des données des éléments. Par exemple, lors d'un fonctionnement sur un vecteur de 256 bits de large, les 256 bits du vecteur sont stockés dans un registre et l'unité d'exécution fonctionne sur le vecteur sous forme de quatre éléments de données compressés séparés de 64 bits (données de taille Quad-Word (QW) éléments de données), huit éléments de données compressés séparés de 32 bits (éléments de données de taille Double Word (DW)), seize éléments de données compressés séparés de 16 bits (éléments de données de taille Word (W)) ou trente-deux éléments de données séparés de 8 bits (éléments de données de taille octet (B)). Cependant, différentes largeurs de vecteur et tailles de registre sont possibles.

Un ou plusieurs caches d'instructions internes (par exemple, 2106) sont inclus dans la logique d'exécution du thread 2100 pour mettre en cache les instructions de thread pour les unités d'exécution. Dans certains modes de réalisation, un ou plusieurs caches de données (par exemple, 2112) sont inclus pour mettre en cache les données du thread pendant l'exécution du thread. Dans certains modes de réalisation, l'échantillonneur 2110 est inclus pour fournir un échantillonnage de texture pour les opérations 3D et un échantillonnage de média pour les opérations de média. Dans certains modes de réalisation, l'échantillonneur 2110 comprend une fonctionnalité spécialisée d'échantillonnage de texture ou de média pour traiter les données de texture ou de média pendant le processus d'échantillonnage avant de fournir les données échantillonnées à une unité d'exécution.

Pendant l'exécution, les pipelines graphiques et multimédias envoient des demandes d'initiation de thread à la logique d'exécution de thread 2100 via la logique de génération et de répartition des threads. Dans certains modes de réalisation, la logique d'exécution de thread 2100 inclut un répartiteur de thread local 2104 qui arbitre les demandes d'initiation de thread à partir des pipelines graphiques et multimédias et instancie les threads demandés sur une ou plusieurs unités d'exécution 2108UNE-2108N. Par exemple, le pipeline de géométrie (par exemple, 2036 de la fig. 20 ) envoie des threads de traitement de sommet, de tessellation ou de traitement de géométrie à la logique d'exécution de thread 2100 (figure 21). Dans certains modes de réalisation, le répartiteur de fil 2104 peut également traiter les demandes de génération de threads d'exécution à partir des programmes de shader en cours d'exécution.

Une fois qu'un groupe d'objets géométriques a été traité et rastérisé en données de pixels, le pixel shader 2102 est invoqué pour calculer davantage les informations de sortie et provoquer l'écriture des résultats sur les surfaces de sortie (par exemple, les tampons de couleur, les tampons de profondeur, les tampons de stencil, etc.). Dans certains modes de réalisation, le pixel shader 2102 calcule les valeurs des divers attributs de sommet qui doivent être interpolés sur l'objet rastérisé. Dans certains modes de réalisation, le pixel shader 2102 exécute ensuite un programme de nuanceur de pixels fourni par l'interface de programmation d'application (API). Pour exécuter le programme de pixel shader, pixel shader 2102 envoie des threads à une unité d'exécution (par exemple, 2108A) via le répartiteur de threads 2104. Dans certains modes de réalisation, le pixel shader 2102 utilise la logique d'échantillonnage de texture dans l'échantillonneur 2110 pour accéder aux données de texture dans les cartes de texture stockées en mémoire. Les opérations arithmétiques sur les données de texture et les données de géométrie d'entrée calculent des données de couleur de pixel pour chaque fragment géométrique, ou suppriment un ou plusieurs pixels d'un traitement ultérieur.

Dans certains modes de réalisation, le port de données 2114 fournit un mécanisme d'accès mémoire pour la logique d'exécution du thread 2100 sortir les données traitées vers la mémoire pour traitement sur un pipeline de sortie de processeur graphique. Dans certains modes de réalisation, le port de données 2114 inclut ou se couple à une ou plusieurs mémoires cache (par exemple, cache de données 2112) pour mettre en cache les données pour l'accès à la mémoire via le port de données.

FIGUE. 22 est un schéma fonctionnel illustrant les formats d'instructions d'un processeur graphique 2200 selon certains modes de réalisation. Dans un ou plusieurs modes de réalisation, les unités d'exécution du processeur graphique prennent en charge un jeu d'instructions ayant des instructions dans de multiples formats. Les cases en trait plein illustrent les composants qui sont généralement inclus dans une instruction d'unité d'exécution, tandis que les lignes en pointillés incluent des composants qui sont facultatifs ou qui ne sont inclus que dans un sous-ensemble des instructions. Dans certains modes de réalisation, le format d'instruction 2200 décrites et illustrées sont des macro-instructions, en ce qu'il s'agit d'instructions fournies à l'unité d'exécution, par opposition aux micro-opérations résultant du décodage de l'instruction une fois l'instruction traitée.

Dans certains modes de réalisation, les unités d'exécution du processeur graphique prennent en charge nativement les instructions au format 128 bits. 2210. Un format d'instruction compacté de 64 bits 2230 est disponible pour certaines instructions en fonction de l'instruction sélectionnée, des options d'instruction et du nombre d'opérandes. Le format natif 128 bits 2210 donne accès à toutes les options d'instructions, tandis que certaines options et opérations sont restreintes au format 64 bits 2230. Les instructions natives disponibles au format 64 bits 2230 varient selon le mode de réalisation. Dans certains modes de réalisation, l'instruction est en partie compactée à l'aide d'un ensemble de valeurs d'index dans un champ d'index. 2213. Le matériel de l'unité d'exécution référence un ensemble de tables de compactage sur la base des valeurs d'index et utilise les sorties de la table de compactage pour reconstruire une instruction native au format 128 bits 2210.

Pour chaque format, l'opcode d'instruction 2212 définit l'opération que l'unité d'exécution doit effectuer. Les unités d'exécution exécutent chaque instruction en parallèle sur les multiples éléments de données de chaque opérande. Par exemple, en réponse à une instruction d'ajout, l'unité d'exécution exécute une opération d'ajout simultanée sur chaque canal de couleur représentant un élément de texture ou un élément d'image. Par défaut, l'unité d'exécution exécute chaque instruction sur tous les canaux de données des opérandes. Dans certains modes de réalisation, le champ de commande d'instruction 2214 permet de contrôler certaines options d'exécution, telles que la sélection des canaux (par exemple, prédication) et l'ordre des canaux de données (par exemple, swizzle). Pour les instructions 128 bits 2210 un champ de taille exécutive 2216 limite le nombre de canaux de données qui seront exécutés en parallèle. Dans certains modes de réalisation, le champ exec-size 2216 n'est pas disponible pour une utilisation dans le format d'instruction compact 64 bits 2230.

Certaines instructions d'unité d'exécution ont jusqu'à trois opérandes dont deux opérandes source, src0 2220, src1 2222, et une destination 2218. Dans certains modes de réalisation, les unités d'exécution prennent en charge des instructions à double destination, où l'une des destinations est implicite. Les instructions de manipulation de données peuvent avoir un troisième opérande source (par exemple, SRC2 2224), où l'opcode de l'instruction 2212 détermine le nombre d'opérandes source. Le dernier opérande source d'une instruction peut être une valeur immédiate (par exemple, codée en dur) transmise avec l'instruction.

Dans certains modes de réalisation, le format d'instruction 128 bits 2210 comprend une information de mode d'accès/d'adresse 2226 spécifiant, par exemple, si le mode d'adressage de registre direct ou le mode d'adressage de registre indirect est utilisé. Lorsque le mode d'adressage de registre direct est utilisé, l'adresse de registre d'un ou plusieurs opérandes est directement fournie par des bits dans l'instruction 2210.

Dans certains modes de réalisation, le format d'instruction 128 bits 2210 comprend un champ de mode d'accès/d'adresse 2226, qui spécifie un mode d'adressage et/ou un mode d'accès pour l'instruction. Dans un mode de réalisation, le mode d'accès définit un alignement d'accès aux données pour l'instruction. Certains modes de réalisation prennent en charge des modes d'accès comprenant un mode d'accès aligné sur 16 octets et un mode d'accès aligné sur 1 octet, où l'alignement d'octets du mode d'accès détermine l'alignement d'accès des opérandes d'instruction. Par exemple, dans un premier mode, l'instruction 2210 peut utiliser l'adressage aligné sur les octets pour les opérandes de source et de destination et dans un second mode, l'instruction 2210 peut utiliser un adressage aligné sur 16 octets pour tous les opérandes source et destination.

Dans un mode de réalisation, la partie de mode d'adresse du champ de mode d'accès/d'adresse 2226 détermine si l'instruction doit utiliser l'adressage indirect du directeur. Lorsque le mode d'adressage de registre direct est utilisé des bits dans l'instruction 2210 fournir directement l'adresse de registre d'un ou plusieurs opérandes. Lorsque le mode d'adressage de registre indirect est utilisé, l'adresse de registre d'un ou plusieurs opérandes peut être calculée sur la base d'une valeur de registre d'adresse et d'un champ d'adresse immédiate dans l'instruction.

Dans certains modes de réalisation, les instructions sont regroupées en fonction de l'opcode 2212 champs de bits pour simplifier le décodage Opcode 2240. Pour un opcode 8 bits, bits 4, 5, et 6 permettre à l'unité d'exécution de déterminer le type d'opcode. Le groupement précis d'opcode montré n'est qu'un exemple. Dans certains modes de réalisation, un groupe d'opcodes de mouvement et de logique 2242 inclut le mouvement des données et les instructions logiques (par exemple, déplacer (mov), comparer (cmp)). Dans certains modes de réalisation, le mouvement et le groupe logique 2242 partage les cinq bits les plus significatifs (MSB), où les instructions de déplacement (mov) se présentent sous la forme 0000xxxxb et les instructions logiques sous la forme 0001xxxxb. Un groupe d'instructions de contrôle de flux 2244 (par exemple, appeler, sauter (mp)) comprend des instructions sous la forme 0010xxxxb (par exemple, 0x20). Un groupe d'instructions diverses 2246 comprend un mélange d'instructions, y compris des instructions de synchronisation (par exemple, attendre, envoyer) sous la forme 0011xxxxb (par exemple, 0x30). Un groupe parallèle d'enseignement des mathématiques 2248 comprend des instructions arithmétiques par composant (par exemple, additionner, multiplier (mul)) sous la forme 0100xxxxb (par exemple, 0x40). Le groupe mathématique parallèle 2248 effectue les opérations arithmétiques en parallèle sur les canaux de données. Le groupe de maths vectorielles 2250 comprend des instructions arithmétiques (par exemple, dp4) sous la forme 0101xxxxb (par exemple, 0x50). Le groupe de mathématiques vectorielles effectue des opérations arithmétiques telles que des calculs de produits scalaires sur des opérandes vectoriels.

FIGUE. 23 est un schéma fonctionnel d'un autre mode de réalisation d'un processeur graphique 2300. Les éléments de la fig. 23 ayant les mêmes numéros de référence (ou noms) que les éléments de toute autre figure ici peuvent fonctionner ou fonctionner de n'importe quelle manière similaire à celle décrite ailleurs ici, mais ne sont pas limités à cela.

Dans certains modes de réalisation, le processeur graphique 2300 comprend un pipeline graphique 2320, un pipeline média 2330, un moteur d'affichage 2340, logique d'exécution des threads 2350, et un pipeline de sortie de rendu 2370. Dans certains modes de réalisation, le processeur graphique 2300 est un processeur graphique au sein d'un système de traitement multicœur qui comprend un ou plusieurs cœurs de traitement à usage général. Le processeur graphique est contrôlé par des écritures de registre dans un ou plusieurs registres de contrôle (non représentés) ou via des commandes envoyées au processeur graphique. 2300 via une interconnexion en anneau 2302. Dans certains modes de réalisation, l'interconnexion en anneau 2302 couple processeur graphique 2300 à d'autres composants de traitement, tels que d'autres processeurs graphiques ou des processeurs à usage général. Commandes de l'interconnexion en anneau 2302 sont interprétés par un streamer de commandes 2303, qui fournit des instructions aux composants individuels du pipeline graphique 2320 ou pipeline média 2330.

Dans certains modes de réalisation, le streamer de commandes 2303 dirige l'opération d'un vertex fetcher 2305 qui lit les données de vertex de la mémoire et exécute les commandes de traitement de vertex fournies par le streamer de commandes 2303. Dans certains modes de réalisation, l'extracteur de sommet 2305 fournit des données de vertex à un vertex shader 2307, qui effectue des opérations de transformation d'espace de coordonnées et d'éclairage sur chaque sommet. Dans certains modes de réalisation, l'extracteur de sommet 2305 et vertex shader 2307 exécuter des instructions de traitement de sommet en envoyant des threads d'exécution aux unités d'exécution 2352UNE, 2352B via un répartiteur de threads 2331.

Dans certains modes de réalisation, les unités d'exécution 2352UNE, 2352B sont un réseau de processeurs vectoriels ayant un jeu d'instructions pour effectuer des opérations graphiques et multimédias. Dans certains modes de réalisation, les unités d'exécution 2352UNE, 2352B ont un cache L1 attaché 2351 qui est spécifique à chaque baie ou partagé entre les baies. Le cache peut être configuré comme un cache de données, un cache d'instructions ou un cache unique qui est partitionné pour contenir des données et des instructions dans différentes partitions.

Dans certains modes de réalisation, le pipeline graphique 2320 comprend des composants de tessellation pour effectuer une tessellation accélérée par matériel d'objets 3D. Dans certains modes de réalisation, un shader de coque programmable 2311 configure les opérations de tessellation. Un shader de domaine programmable 2317 fournit une évaluation back-end de la sortie de tessellation. Un tessellateur 2313 fonctionne dans la direction du shader de coque 2311 et contient une logique à usage spécial pour générer un ensemble d'objets géométriques détaillés sur la base d'un modèle géométrique grossier qui est fourni comme entrée au pipeline graphique 2320. Dans certains modes de réalisation, si la tessellation n'est pas utilisée, les composants de tessellation 2311, 2313, 2317 peut être contourné.

Dans certains modes de réalisation, des objets géométriques complets peuvent être traités par un shader de géométrie 2319 via un ou plusieurs threads envoyés aux unités d'exécution 2352UNE, 2352B, ou peut passer directement à la tondeuse 2329. Dans certains modes de réalisation, le shader géométrique fonctionne sur des objets géométriques entiers, plutôt que sur des sommets ou des parcelles de sommets comme dans les étapes précédentes du pipeline graphique. Si la tessellation est désactivée, le shader de géométrie 2319 reçoit l'entrée du vertex shader 2307. Dans certains modes de réalisation, le shader de géométrie 2319 est programmable par un programme de shader de géométrie pour effectuer la tessellation de la géométrie si les unités de tessellation sont désactivées.

Avant la rastérisation, une tondeuse 2329 traite les données de sommet. La tondeuse 2329 peut être un clipper à fonction fixe ou un clipper programmable ayant des fonctions de clipping et de shader de géométrie. Dans certains modes de réalisation, un rastériseur 2373 (par exemple, composant de test de profondeur) dans le pipeline de sortie de rendu 2370 envoie des pixel shaders pour convertir les objets géométriques en leurs représentations par pixel. Dans certains modes de réalisation, la logique de nuanceur de pixels est incluse dans la logique d'exécution de thread 2350. Dans certains modes de réalisation, une application peut contourner le rastériseur 2373 et accéder aux données de sommet non rastérisées via une unité de sortie de flux 2323.

Le processeur graphique 2300 possède un bus d'interconnexion, une matrice d'interconnexion ou un autre mécanisme d'interconnexion qui permet aux données et aux messages de passer entre les principaux composants du processeur. Dans certains modes de réalisation, les unités d'exécution 2352UNE, 2352B et cache(s) associé(s) 2351, échantillonneur de textures et de médias 2354, et cache de texture/échantillonneur 2358 s'interconnecter via un port de données 2356 pour effectuer un accès à la mémoire et communiquer avec les composants du pipeline de sortie de rendu du processeur. Dans certains modes de réalisation, l'échantillonneur 2354, cache 2351, 2358 et unités d'exécution 2352UNE, 2352B ont chacun des chemins d'accès mémoire séparés.

Dans certains modes de réalisation, le pipeline de sortie de rendu 2370 contient un rastériseur 2373 qui convertit les objets basés sur les sommets en une représentation basée sur les pixels associée. Dans certains modes de réalisation, la logique de tramage comprend une unité de fenêtrage/masqueur pour effectuer une tramage de triangle et de ligne à fonction fixe. Un cache de rendu associé 2378 et cache de profondeur 2379 sont également disponibles dans certains modes de réalisation. Un composant d'opérations de pixels 2377 effectue des opérations basées sur les pixels sur les données, bien que dans certains cas, les opérations sur les pixels associées aux opérations 2D (par exemple, les transferts d'images par blocs de bits avec mélange) soient effectuées par le moteur 2D 2341, ou remplacé au moment de l'affichage par le contrôleur d'affichage 2343 en utilisant des plans d'affichage superposés. Dans certains modes de réalisation, un cache L3 partagé 2375 est disponible pour tous les composants graphiques, permettant le partage de données sans utiliser la mémoire principale du système.

Dans certains modes de réalisation, le pipeline multimédia du processeur graphique 2330 comprend un moteur multimédia 2337 et un frontal vidéo 2334. Dans certains modes de réalisation, le frontal vidéo 2334 reçoit des commandes de pipeline du streamer de commandes 2303. Dans certains modes de réalisation, le pipeline multimédia 2330 comprend un streamer de commandes séparé. Dans certains modes de réalisation, le frontal vidéo 2334 traite les commandes multimédia avant d'envoyer la commande au moteur multimédia 2337. Dans certains modes de réalisation, le moteur multimédia 2337 inclut une fonctionnalité de génération de threads pour générer des threads pour la distribution à la logique d'exécution de thread 2350 via le répartiteur de threads 2331.

Dans certains modes de réalisation, le processeur graphique 2300 comprend un moteur d'affichage 2340. Dans certains modes de réalisation, le moteur d'affichage 2340 est externe au processeur 2300 et se couple au processeur graphique via l'interconnexion en anneau 2302, ou un autre bus ou matrice d'interconnexion.Dans certains modes de réalisation, le moteur d'affichage 2340 comprend un moteur 2D 2341 et un contrôleur d'affichage 2343. Dans certains modes de réalisation, le moteur d'affichage 2340 contient une logique spéciale capable de fonctionner indépendamment du pipeline 3D. Dans certains modes de réalisation, le contrôleur d'affichage 2343 se couple avec un dispositif d'affichage (non représenté), qui peut être un dispositif d'affichage intégré au système, comme dans un ordinateur portable, ou un dispositif d'affichage externe connecté via un connecteur de dispositif d'affichage.

Dans certains modes de réalisation, le pipeline graphique 2320 et pipeline média 2330 sont configurables pour effectuer des opérations basées sur plusieurs interfaces de programmation graphique et multimédia et ne sont spécifiques à aucune interface de programmation d'application (API). Dans certains modes de réalisation, le logiciel pilote pour le processeur graphique traduit les appels API qui sont spécifiques à une bibliothèque graphique ou multimédia particulière en commandes qui peuvent être traitées par le processeur graphique. Dans certains modes de réalisation, une prise en charge est fournie pour Open Graphics Library (OpenGL) et Open Computing Language (OpenCL) de Khronos Group, la bibliothèque Direct3D de Microsoft Corporation, ou une prise en charge peut être fournie à la fois pour OpenGL et D3D. Un support peut également être fourni pour la bibliothèque Open Source Computer Vision (OpenCV). Une future API avec un pipeline 3D compatible serait également prise en charge si un mappage peut être réalisé depuis le pipeline de la future API vers le pipeline du processeur graphique.

Programmation de pipeline graphique

FIGUE. 24A est un schéma fonctionnel illustrant un format de commande de processeur graphique 2400 selon certains modes de réalisation. FIGUE. 24B est un schéma fonctionnel illustrant une séquence de commandes de processeur graphique 2410 selon un mode de réalisation. Les cases pleines de la Fig. 24A illustrent les composants qui sont généralement inclus dans une commande graphique tandis que les lignes en pointillés incluent des composants qui sont facultatifs ou qui ne sont inclus que dans un sous-ensemble des commandes graphiques. L'exemple de format de commande de processeur graphique 2400 de la fig. 24A comprend des champs de données pour identifier un client cible 2402 de la commande, un code opération de commande (opcode) 2404, et les données pertinentes 2406 pour la commande. Un sous-opcode 2405 et une taille de commande 2408 sont également inclus dans certaines commandes.

Dans certains modes de réalisation, le client 2402 spécifie l'unité cliente du périphérique graphique qui traite les données de commande. Dans certains modes de réalisation, un analyseur de commandes de processeur graphique examine le champ client de chaque commande pour conditionner le traitement ultérieur de la commande et acheminer les données de commande vers l'unité client appropriée. Dans certains modes de réalisation, les unités clientes du processeur graphique comprennent une unité d'interface mémoire, une unité de rendu, une unité 2D, une unité 3D et une unité multimédia. Chaque unité cliente possède un pipeline de traitement correspondant qui traite les commandes. Une fois la commande reçue par l'unité cliente, l'unité cliente lit l'opcode 2404 et, s'il est présent, sous-opcode 2405 pour déterminer l'opération à effectuer. L'unité client exécute la commande en utilisant les informations dans le champ de données 2406. Pour certaines commandes une taille de commande explicite 2408 doit spécifier la taille de la commande. Dans certains modes de réalisation, l'analyseur de commandes détermine automatiquement la taille d'au moins certaines des commandes sur la base du code opération de commande. Dans certains modes de réalisation, les commandes sont alignées via des multiples d'un double mot.

L'organigramme de la Fig. 24B montre un exemple de séquence de commandes de processeur graphique 2410. Dans certains modes de réalisation, un logiciel ou micrologiciel d'un système de traitement de données qui présente un mode de réalisation d'un processeur graphique utilise une version de la séquence de commandes illustrée pour configurer, exécuter et terminer un ensemble d'opérations graphiques. Un exemple de séquence de commandes est montré et décrit à des fins d'exemple uniquement car les modes de réalisation ne sont pas limités à ces commandes spécifiques ou à cette séquence de commandes. De plus, les commandes peuvent être émises sous la forme d'un lot de commandes dans une séquence de commandes, de sorte que le processeur graphique traitera la séquence de commandes au moins partiellement en concurrence.

Dans certains modes de réalisation, la séquence de commandes du processeur graphique 2410 peut commencer par une commande de vidage du pipeline 2412 pour que tout pipeline graphique actif termine les commandes actuellement en attente pour le pipeline. Dans certains modes de réalisation, le pipeline 3D 2422 et le pipeline des médias 2424 ne fonctionnent pas simultanément. Le vidage du pipeline est effectué pour amener le pipeline graphique actif à terminer toutes les commandes en attente. En réponse à un vidage du pipeline, l'analyseur de commandes pour le processeur graphique interrompra le traitement des commandes jusqu'à ce que les moteurs de dessin actifs terminent les opérations en attente et que les caches de lecture pertinents soient invalidés. En option, toutes les données du cache de rendu qui sont marquées « dirty » peuvent être vidées en mémoire. Dans certains modes de réalisation, la commande de vidage du pipeline 2412 peut être utilisé pour la synchronisation du pipeline ou avant de placer le processeur graphique dans un état de faible consommation.

Dans certains modes de réalisation, une commande de sélection de pipeline 2413 est utilisé lorsqu'une séquence de commandes nécessite que le processeur graphique bascule explicitement entre les pipelines. Dans certains modes de réalisation, une commande de sélection de pipeline 2413 n'est requis qu'une seule fois dans un contexte d'exécution avant d'émettre des commandes de pipeline, sauf si le contexte consiste à émettre des commandes pour les deux pipelines. Dans certains modes de réalisation, une commande de vidage du pipeline est 2412 est requis juste avant un changement de pipeline via la commande pipeline select 2413.

Dans certains modes de réalisation, une commande de contrôle de pipeline 2414 configure un pipeline graphique pour le fonctionnement et est utilisé pour programmer le pipeline 3D 2422 et le pipeline des médias 2424. Dans certains modes de réalisation, la commande de contrôle de pipeline 2414 configure l'état du pipeline pour le pipeline actif. Dans un mode de réalisation, la commande de contrôle de pipeline 2414 est utilisé pour la synchronisation du pipeline et pour effacer les données d'une ou plusieurs mémoires cache dans le pipeline actif avant de traiter un lot de commandes.

Dans certains modes de réalisation, les commandes d'état du tampon de retour 2416 sont utilisés pour configurer un ensemble de tampons de retour pour que les pipelines respectifs écrivent des données. Certaines opérations de pipeline nécessitent l'allocation, la sélection ou la configuration d'un ou plusieurs tampons de retour dans lesquels les opérations écrivent des données intermédiaires pendant le traitement. Dans certains modes de réalisation, le processeur graphique utilise également un ou plusieurs tampons de retour pour stocker des données de sortie et pour effectuer une communication interfil. Dans certains modes de réalisation, l'état du tampon de retour 2416 inclut la sélection de la taille et du nombre de tampons de retour à utiliser pour un ensemble d'opérations de pipeline.

Les commandes restantes dans la séquence de commandes diffèrent en fonction du pipeline actif pour les opérations. Basé sur une détermination de pipeline 2420, la séquence de commandes est adaptée au pipeline 3D 2422 en commençant par l'état du pipeline 3D 2430, ou le pipeline média 2424 commençant à l'état du pipeline de médias 2440.

Les commandes pour l'état du pipeline 3D 2430 comprennent des commandes de réglage d'état 3D pour l'état du tampon de sommet, l'état de l'élément de sommet, l'état de couleur constante, l'état du tampon de profondeur et d'autres variables d'état qui doivent être configurées avant le traitement des commandes primitives 3D. Les valeurs de ces commandes sont déterminées au moins en partie en fonction de l'API 3D particulière utilisée. Dans certains modes de réalisation, l'état du pipeline 3D 2430 Les commandes sont également capables de désactiver ou de contourner de manière sélective certains éléments du pipeline si ces éléments ne sont pas utilisés.

Dans certains modes de réalisation, la primitive 3D 2432 La commande est utilisée pour soumettre des primitives 3D à traiter par le pipeline 3D. Commandes et paramètres associés qui sont passés au processeur graphique via la primitive 3D 2432 sont transmises à la fonction d'extraction de sommet dans le pipeline graphique. La fonction vertex fetch utilise la primitive 3D 2432 données de commande pour générer des structures de données de sommet. Les structures de données de sommet sont stockées dans un ou plusieurs tampons de retour. Dans certains modes de réalisation, la primitive 3D 2432 La commande est utilisée pour effectuer des opérations de vertex sur des primitives 3D via des vertex shaders. Pour traiter les vertex shaders, pipeline 3D 2422 envoie les threads d'exécution du shader aux unités d'exécution du processeur graphique.

Dans certains modes de réalisation, le pipeline 3D 2422 est déclenché via une exécution 2434 commande ou événement. Dans certains modes de réalisation, une écriture de registre déclenche l'exécution d'une commande. Dans certains modes de réalisation, l'exécution est déclenchée via une commande « go » ou « kick » dans la séquence de commandes. Dans un mode de réalisation, l'exécution de la commande est déclenchée à l'aide d'une commande de synchronisation de pipeline pour vider la séquence de commandes à travers le pipeline graphique. Le pipeline 3D effectuera le traitement de la géométrie pour les primitives 3D. Une fois les opérations terminées, les objets géométriques résultants sont rastérisés et le moteur de pixels colore les pixels résultants. Des commandes supplémentaires pour contrôler l'ombrage des pixels et les opérations d'arrière-plan des pixels peuvent également être incluses pour ces opérations.

Dans certains modes de réalisation, la séquence de commandes du processeur graphique 2410 suit le pipeline des médias 2424 chemin lors de l'exécution d'opérations multimédias. En général, l'utilisation et le mode de programmation spécifiques du pipeline de médias 2424 dépend du support ou des opérations de calcul à effectuer. Des opérations de décodage multimédia spécifiques peuvent être déchargées vers le pipeline multimédia pendant le décodage multimédia. Dans certains modes de réalisation, le pipeline multimédia peut également être contourné et le décodage multimédia peut être effectué en totalité ou en partie à l'aide de ressources fournies par un ou plusieurs cœurs de traitement à usage général. Dans un mode de réalisation, le pipeline multimédia comprend également des éléments pour les opérations d'unité de processeur graphique à usage général (GPGPU), où le processeur graphique est utilisé pour effectuer des opérations vectorielles SIMD à l'aide de programmes de nuanceur de calcul qui ne sont pas explicitement liés au rendu de primitives graphiques.

Dans certains modes de réalisation, le pipeline multimédia 2424 est configuré de la même manière que le pipeline 3D 2422. Un ensemble de commandes d'état du pipeline multimédia 2440 sont distribués ou placés dans une file d'attente de commandes avant les commandes de l'objet média 2442. Dans certains modes de réalisation, les commandes d'état du pipeline multimédia 2440 inclure des données pour configurer les éléments du pipeline multimédia qui seront utilisés pour traiter les objets multimédias. Cela inclut les données pour configurer le décodage vidéo et la logique d'encodage vidéo dans le pipeline multimédia, telles que le format d'encodage ou de décodage. Dans certains modes de réalisation, les commandes d'état du pipeline multimédia 2440 prennent également en charge l'utilisation d'un ou plusieurs pointeurs vers des éléments d'état « indirects » qui contiennent un lot de paramètres d'état.

Dans certains modes de réalisation, les commandes d'objet multimédia 2442 fournir des pointeurs vers des objets multimédias pour traitement par le pipeline multimédia. Les objets multimédias comprennent des mémoires tampons contenant des données vidéo à traiter. Dans certains modes de réalisation, tous les états du pipeline multimédia doivent être valides avant d'émettre une commande d'objet multimédia 2442. Une fois l'état du pipeline configuré et les commandes d'objet média 2442 sont mis en file d'attente, le pipeline multimédia 2424 est déclenché via une commande d'exécution 2444 ou un événement d'exécution équivalent (par exemple, une écriture de registre). Sortie du pipeline multimédia 2424 peuvent ensuite être post-traités par des opérations fournies par le pipeline 3D 2422 ou le pipeline des médias 2424. Dans certains modes de réalisation, les opérations GPGPU sont configurées et exécutées de la même manière que les opérations multimédias.

Architecture logicielle graphique

FIGUE. 25 illustre un exemple d'architecture logicielle graphique pour un système de traitement de données 2500 selon certains modes de réalisation. Dans certains modes de réalisation, l'architecture logicielle comprend une application graphique 3D 2510, un système d'exploitation 2520, et au moins un processeur 2530. Dans certains modes de réalisation, le processeur 2530 comprend un processeur graphique 2532 et un ou plusieurs cœurs de processeur à usage général 2534. L'application graphique 2510 et système d'exploitation 2520 chacun s'exécute dans la mémoire système 2550 du système de traitement des données.

Dans certains modes de réalisation, l'application graphique 3D 2510 contient un ou plusieurs programmes de shader, y compris les instructions de shader 2512. Les instructions du langage de shader peuvent être dans un langage de shader de haut niveau, tel que le langage de shader de haut niveau (HLSL) ou le langage de shader OpenGL (GLSL). L'application comprend également des instructions exécutables 2514 dans un langage machine adapté à l'exécution par le cœur de processeur à usage général 2534. L'application comprend également des objets graphiques 2516 défini par les données de sommet.

Dans certains modes de réalisation, le système d'exploitation 2520 est un système d'exploitation Microsoft® Windows® de Microsoft Corporation, un système d'exploitation propriétaire de type UNIX ou un système d'exploitation open source de type UNIX utilisant une variante du noyau Linux. Lorsque l'API Direct3D est utilisée, le système d'exploitation 2520 utilise un compilateur de shader frontal 2524 pour compiler les instructions de shader 2512 en HLSL dans un langage de shader de niveau inférieur. La compilation peut être une compilation juste à temps (JIT) ou l'application peut effectuer une pré-compilation de shader. Dans certains modes de réalisation, des shaders de haut niveau sont compilés en shaders de bas niveau lors de la compilation de l'application graphique 3D 2510.

Dans certains modes de réalisation, le pilote graphique en mode utilisateur 2526 contient un compilateur de shader back-end 2527 pour convertir les instructions du shader 2512 dans une représentation spécifique au matériel. Lorsque l'API OpenGL est utilisée, les instructions du shader 2512 dans le langage de haut niveau GLSL sont passés à un pilote graphique en mode utilisateur 2526 pour compilation. Dans certains modes de réalisation, le pilote graphique en mode utilisateur 2526 utilise les fonctions du mode noyau du système d'exploitation 2528 pour communiquer avec un pilote graphique en mode noyau 2529. Dans certains modes de réalisation, le pilote graphique en mode noyau 2529 communique avec le processeur graphique 2532 envoyer des commandes et des instructions.

Un ou plusieurs aspects d'au moins un mode de réalisation peuvent être mis en œuvre par un code représentatif stocké sur un support lisible par machine qui représente et/ou définit une logique dans un circuit intégré tel qu'un processeur. Par exemple, le support lisible par machine peut inclure des instructions qui représentent diverses logiques au sein du processeur. Lorsqu'elles sont lues par une machine, les instructions peuvent amener la machine à fabriquer la logique pour exécuter les techniques décrites ici. De telles représentations, appelées « cœurs IP », sont des unités logiques réutilisables pour un circuit intégré qui peuvent être stockées sur un support tangible et lisible par machine en tant que modèle matériel décrivant la structure du circuit intégré. Le modèle matériel peut être fourni à divers clients ou installations de fabrication, qui chargent le modèle matériel sur des machines de fabrication qui fabriquent le circuit intégré. Le circuit intégré peut être fabriqué de telle sorte que le circuit exécute les opérations décrites en association avec l'un quelconque des modes de réalisation décrits ici.

FIGUE. 26 est un schéma fonctionnel illustrant un système de développement de base IP 2600 qui peut être utilisé pour fabriquer un circuit intégré pour effectuer des opérations selon un mode de réalisation. Le système de développement de base IP 2600 peut être utilisé pour générer des conceptions modulaires et réutilisables qui peuvent être incorporées dans une conception plus grande ou utilisées pour construire un circuit intégré complet (par exemple, un circuit intégré SOC). Une installation de conception 2630 peut générer une simulation logicielle 2610 d'une conception de noyau IP dans un langage de programmation de haut niveau (par exemple, C/C++). Le logiciel de simulation 2610 peut être utilisé pour concevoir, tester et vérifier le comportement du noyau IP. Une conception de niveau de transfert de registre (RTL) peut ensuite être créée ou synthétisée à partir du modèle de simulation 2600. La conception RTL 2615 est une abstraction du comportement du circuit intégré qui modélise le flux de signaux numériques entre les registres matériels, y compris la logique associée exécutée à l'aide des signaux numériques modélisés. En plus d'un design RTL 2615, des conceptions de niveau inférieur au niveau logique ou au niveau du transistor peuvent également être créées, conçues ou synthétisées. Ainsi, les détails particuliers de la conception initiale et de la simulation peuvent varier.

La conception RTL 2615 ou équivalent peut être encore synthétisé par l'installation de conception dans un modèle matériel 2620, qui peut être dans un langage de description de matériel (HDL), ou une autre représentation des données de conception physique. Le HDL peut être davantage simulé ou testé pour vérifier la conception du noyau IP. La conception du noyau IP peut être stockée pour être livrée à une installation de fabrication tierce 2665 utilisation de la mémoire non volatile 2640 (par exemple, disque dur, mémoire flash ou tout support de stockage non volatile). Alternativement, la conception du noyau IP peut être transmise (par exemple, via Internet) via une connexion filaire 2650 ou connexion sans fil 2660. L'usine de fabrication 2665 peut ensuite fabriquer un circuit intégré basé au moins en partie sur la conception du noyau IP. Le circuit intégré fabriqué peut être configuré pour effectuer des opérations conformément à au moins un mode de réalisation décrit ici.

FIGUE. 27 est un schéma fonctionnel illustrant un exemple de système sur un circuit intégré à puce 2700 qui peut être fabriqué à l'aide d'un ou plusieurs coeurs IP, selon un mode de réalisation. L'exemple de circuit intégré comprend un ou plusieurs processeurs d'application 2705 (par exemple, les processeurs), au moins un processeur graphique 2710, et peut en outre inclure un processeur d'image 2715 et/ou un processeur vidéo 2720, dont chacun peut être un noyau IP modulaire provenant de la même ou de plusieurs installations de conception différentes. Le circuit intégré comprend une logique périphérique ou de bus comprenant un contrôleur USB 2725, contrôleur UART 2730, un contrôleur SPI/SDIO 2735, et un contrôleur I 2 S/I 2 C 2740. De plus, le circuit intégré peut comprendre un dispositif d'affichage 2745 couplé à un ou plusieurs contrôleurs d'interface multimédia haute définition (HDMI) 2750 et une interface d'affichage d'interface de processeur d'industrie mobile (MIPI) 2755. Le stockage peut être assuré par un sous-système de mémoire flash 2760 y compris la mémoire flash et un contrôleur de mémoire flash. L'interface mémoire peut être fournie via un contrôleur de mémoire 2765 pour accéder aux dispositifs de mémoire SDRAM ou SRAM. Certains circuits intégrés incluent en plus un moteur de sécurité embarqué 2770.

De plus, d'autres logiques et circuits peuvent être inclus dans le processeur du circuit intégré 2700, y compris des processeurs/cœurs graphiques supplémentaires, des contrôleurs d'interface périphérique ou des cœurs de processeur à usage général.

Dans certains modes de réalisation, l'un des HMII 1100, GPC 1300, et/ou SM 1500 peut être avantageusement intégré ou configuré avec l'un quelconque des divers systèmes, procédés, appareils décrits ici (par exemple ou des parties de ceux-ci), y compris, par exemple, ceux décrits dans les exemples ci-dessous.

REMARQUES ET EXEMPLES SUPPLÉMENTAIRES

L'exemple 1 peut comprendre un système de tramage à géométrie différée comprenant un affichage pour présenter un contenu visuel, un processeur graphique couplé à l'affichage, et un appareil de tramage à géométrie différée couplé au processeur graphique, l'appareil de tramage à géométrie différée comprenant un contrôleur de décision pour déterminer, sur la base sur les ressources disponibles dans un processeur graphique et un tronc de vue, un sous-ensemble d'informations graphiques à sortir vers le processeur graphique, un dispositif de stockage couplé en communication au contrôleur de décision pour stocker une partie restante des informations graphiques pour une utilisation future, une sortie gestionnaire couplé en communication au dispositif de stockage pour sortir les informations graphiques vers le processeur graphique et échanger la partie restante contre une ou plusieurs des informations graphiques libérées ou des informations graphiques inutilisées sur le processeur graphique.

L'exemple 2 peut inclure le système de l'exemple 1, dans lequel les ressources disponibles dans le processeur graphique correspondent à une quantité de mémoire libre disponible dans le processeur graphique.

L'exemple 3 peut inclure le système de l'exemple 2, dans lequel le sous-ensemble doit être délivré au processeur graphique en réponse à une quantité d'informations graphiques dépassant la quantité de mémoire libre disponible dans le processeur graphique.

L'exemple 4 peut inclure le système de l'exemple 3, dans lequel le sous-ensemble doit être limité aux objets dans le tronc de cône qui sont en vue directe d'un utilisateur.

L'exemple 5 peut inclure le système de l'un quelconque des exemples 2 à 4, dans lequel la quantité de mémoire libre disponible dans le processeur graphique est déterminée sur la base d'un ou plusieurs d'une vitesse de bus de données, d'une fréquence d'images ou d'une fréquence de changement de vue. frustum, et dans lequel le sous-ensemble doit être déterminé sur la base d'un ou plusieurs attributs d'application, y compris le mouvement de la caméra.

L'exemple 6 peut inclure le système de l'exemple 1, dans lequel l'appareil de tramage à géométrie différée comprend un pilote.

L'exemple 7 peut comprendre un appareil de tramage à géométrie différée comprenant un contrôleur de décision pour déterminer, sur la base des ressources disponibles dans un processeur graphique et un tronc de vue, un sous-ensemble d'informations graphiques à sortir vers le processeur graphique, un dispositif de stockage couplé de manière communicative à la décision contrôleur pour stocker une partie restante des informations graphiques pour une utilisation future, un gestionnaire de sortie couplé en communication au dispositif de stockage pour sortir le sous-ensemble des informations graphiques vers le processeur graphique et échanger la partie restante contre une ou plusieurs informations graphiques libérées ou des informations graphiques inutilisées sur le processeur graphique.

L'exemple 8 peut inclure l'appareil de l'exemple 7, dans lequel les ressources disponibles dans le processeur graphique correspondent à une quantité de mémoire libre disponible dans le processeur graphique.

L'exemple 9 peut inclure l'appareil de l'exemple 8, dans lequel un état de mémoire réduit dans le processeur graphique correspond à moins qu'une disponibilité totale de mémoire libre dans le processeur graphique.

L'exemple 10 peut inclure l'appareil de l'exemple 9, dans lequel le sous-ensemble est limité aux objets dans le tronc de cône qui sont directement visibles par un utilisateur lorsque le processeur graphique est dans l'état de mémoire réduite.

L'exemple 11 peut inclure l'appareil de l'un quelconque des exemples 8 à 10, dans lequel la quantité de mémoire libre disponible dans le processeur graphique est déterminée sur la base d'un ou plusieurs d'une vitesse de bus de données, d'une fréquence d'images ou d'une fréquence de changement de vue. frustum, et dans lequel le sous-ensemble doit être déterminé sur la base d'un ou plusieurs attributs d'application, y compris le mouvement de la caméra.

L'exemple 12 peut inclure l'appareil de l'exemple 7, dans lequel l'appareil comprend un pilote.

L'exemple 13 peut inclure un procédé de réalisation d'une rastérisation de géométrie différée, comprenant la détermination, sur la base des ressources disponibles dans un processeur graphique et un tronc de vue, un sous-ensemble d'informations graphiques à sortir vers le processeur graphique, le stockage d'une partie restante des informations graphiques pour une utilisation future, sortie du sous-ensemble des informations graphiques vers le processeur graphique, et échange de la partie restante contre une ou plusieurs informations graphiques libérées ou informations graphiques inutilisées sur le processeur graphique.

L'exemple 14 peut inclure le procédé de l'exemple 13, dans lequel les ressources disponibles dans le processeur graphique correspondent à une quantité de mémoire libre disponible dans le processeur graphique.

L'exemple 15 peut inclure le procédé de l'exemple 14, dans lequel le sous-ensemble est délivré au processeur graphique en réponse à une quantité d'informations graphiques dépassant la quantité de mémoire libre disponible dans le processeur graphique.

L'exemple 16 peut inclure le procédé de l'exemple 15, dans lequel le sous-ensemble est limité aux objets dans le tronc qui sont directement visibles par un utilisateur.

L'exemple 17 peut inclure le procédé de l'un quelconque des exemples 14 à 16, dans lequel la quantité de mémoire libre disponible dans le processeur graphique est déterminée sur la base d'un ou plusieurs d'une vitesse de bus de données, d'une fréquence d'images ou d'une fréquence de changement de vue. frustum, et dans lequel le sous-ensemble est déterminé sur la base d'un ou plusieurs attributs d'application comprenant le mouvement de la caméra.

L'exemple 18 peut inclure le procédé de l'exemple 13, dans lequel le procédé est exécuté par un conducteur.

L'exemple 19 peut comprendre au moins un support de stockage lisible par ordinateur non transitoire comprenant un ensemble d'instructions qui, si elles sont exécutées par un dispositif informatique, amènent le dispositif informatique à déterminer, sur la base des ressources disponibles dans un processeur graphique et un tronc de vue, un sous-ensemble d'informations graphiques à sortir vers le processeur graphique, stocker une partie restante des informations graphiques pour une utilisation future, sortir le sous-ensemble des informations graphiques vers le processeur graphique, et échanger la partie restante contre une ou plusieurs informations graphiques libérées ou des informations graphiques inutilisées sur le processeur graphique.

L'exemple 20 peut inclure le au moins un support de stockage lisible par ordinateur non transitoire de l'exemple 19, dans lequel les ressources disponibles dans le processeur graphique correspondent à une quantité de mémoire libre disponible dans le processeur graphique.

L'exemple 21 peut inclure le au moins un support de stockage lisible par ordinateur non transitoire de l'exemple 20, dans lequel le sous-ensemble doit être transmis au processeur graphique en réponse à une quantité d'informations graphiques dépassant la quantité de mémoire libre disponible dans le processeur graphique. .

L'exemple 22 peut inclure le au moins un support de stockage lisible par ordinateur non transitoire de l'exemple 21, le sous-ensemble doit être limité aux objets dans le tronc qui sont en vue directe d'un utilisateur.

L'exemple 23 peut inclure le au moins un support de stockage lisible par ordinateur non transitoire de l'un quelconque des exemples 20 à 22, dans lequel la quantité de mémoire libre disponible dans le processeur graphique est déterminée sur la base d'un ou plusieurs d'une vitesse de bus de données, d'une trame taux ou une fréquence de changement du tronc de vue, et dans lequel le sous-ensemble doit être déterminé sur la base d'un ou plusieurs attributs d'application, y compris le mouvement de la caméra.

L'exemple 24 peut inclure le au moins un support de stockage lisible par ordinateur non transitoire de l'exemple 19, dans lequel les instructions, si elles sont exécutées, entraînent l'exécution d'un dispositif informatique par un pilote.

L'exemple 25 peut comprendre un appareil de tramage à géométrie différée comprenant des moyens pour déterminer, sur la base des ressources disponibles dans un processeur graphique et un tronc de vue, un sous-ensemble d'informations graphiques à sortir vers le processeur graphique, des moyens pour stocker une partie restante des informations graphiques pour une utilisation future, des moyens pour sortir le sous-ensemble des informations graphiques vers le processeur graphique, et des moyens pour échanger la partie restante contre une ou plusieurs des informations graphiques libérées ou des informations graphiques inutilisées sur le processeur graphique.

L'exemple 26 peut inclure l'appareil de l'exemple 25, dans lequel les ressources disponibles dans le processeur graphique correspondent à une quantité de mémoire libre disponible dans le processeur graphique.

L'exemple 27 peut inclure l'appareil de l'exemple 26, dans lequel le sous-ensemble doit être délivré au processeur graphique en réponse à une quantité d'informations graphiques dépassant la quantité de mémoire libre disponible dans le processeur graphique.

L'exemple 28 peut inclure l'appareil de l'exemple 27, dans lequel le sous-ensemble doit être limité aux objets dans le tronc qui sont en vue directe d'un utilisateur.

L'exemple 29 peut inclure l'appareil de l'un quelconque des exemples 26 à 28, dans lequel la quantité de mémoire libre disponible dans le processeur graphique est déterminée sur la base d'un ou plusieurs d'une vitesse de bus de données, d'une fréquence d'images ou d'une fréquence de changement de vue. frustum, et dans lequel le sous-ensemble doit être déterminé sur la base d'un ou plusieurs attributs d'application, y compris le mouvement de la caméra. L'exemple 30 peut inclure l'appareil de l'exemple 25, comprenant en outre un conducteur.

Le terme « couplé » peut être utilisé ici pour désigner tout type de relation, directe ou indirecte, entre les composants considérés, et peut s'appliquer à des connexions électriques, mécaniques, fluidiques, optiques, électromagnétiques, électromécaniques ou autres. De plus, les termes « premier », « deuxième », etc. peuvent être utilisés ici uniquement pour faciliter la discussion et n'ont aucune signification temporelle ou chronologique particulière, sauf indication contraire. En outre, il est entendu que les articles indéfinis « un » ou « un » portent le sens de « un ou plusieurs » ou « au moins un ».

Telle qu'utilisée dans cette demande et dans les revendications, une liste d'éléments réunis par le terme « un ou plusieurs de » peut signifier n'importe quelle combinaison des termes énumérés. Par exemple, les expressions « un ou plusieurs de A, B ou C » peuvent signifier A, B, C A et B A et C B et C ou A, B et C.

Les modes de réalisation ont été décrits ci-dessus en référence à des modes de réalisation spécifiques. L'homme du métier, cependant, comprendra que diverses modifications et changements peuvent y être apportés sans s'écarter de l'esprit et de la portée plus larges des modes de réalisation tels qu'énoncés dans les revendications annexées. La description et les dessins qui précèdent doivent donc être considérés dans un sens illustratif plutôt que restrictif.


Réclamations

1. Système d'affichage d'un système de couleurs primaires multiples, comprenant :

un ensemble de données d'image, dans lequel l'ensemble de données d'image comprend un premier ensemble de données de canal de couleur et un second ensemble de données de canal de couleur un convertisseur de données d'image un ensemble de données de saturation correspondant à l'ensemble de données d'image, dans lequel l'ensemble de saturation des données sont utilisées pour étendre un ensemble d'angles de teinte pour le premier ensemble de données de canal de couleur et le second ensemble de données de canal de couleur un ensemble de paramètres de protocole de description de session (SDP), dans lequel l'ensemble de paramètres SDP est modifiable et au moins un affichage dans lequel le au moins un dispositif d'affichage et le convertisseur de données d'image sont en communication réseau et dans lequel le convertisseur de données d'image est utilisable pour convertir l'ensemble de données d'image pour l'affichage sur le au moins un dispositif d'affichage.

2. Système selon la revendication 1, dans lequel le convertisseur de données d'image comprend en outre une position primaire cyan, et dans lequel la position primaire cyan est positionnée pour limiter la saturation.

3. Système selon la revendication 1, dans lequel le convertisseur de données d'image comprend en outre une position primaire cyan, et dans lequel la position primaire cyan est déterminée en agrandissant l'ensemble d'angles de teinte.

4. Système selon la revendication 1, dans lequel l'ensemble de données d'image comprend un niveau de bit, dans lequel le convertisseur de données d'image est utilisable pour convertir le niveau de bit de l'ensemble de données d'image, créant ainsi un niveau de bit mis à jour.

5. Système selon la revendication 1, dans lequel une fois que l'ensemble de données d'image a été converti par le convertisseur de données d'image pour le au moins un dispositif d'affichage, l'ensemble de paramètres SDP est modifié en fonction de la conversion.

6. Système selon la revendication 1, dans lequel le au moins un dispositif d'affichage est utilisable pour afficher le système de couleurs multi-primaires sur la base de l'ensemble de données d'image.

7. Système selon la revendication 1, comprenant en outre au moins un composant électronique de luminance, dans lequel le au moins un composant électronique de luminance n'est pas calculé au sein du au moins un affichage.

8. Système selon la revendication 1, dans lequel le premier ensemble de données de canal de couleur comprend une première valeur de bit définissant le noir et une deuxième valeur de bit définissant le blanc, dans lequel le deuxième ensemble de données de canal de couleur comprend une troisième valeur de bit définissant le noir et un quatrième bit valeur définissant le blanc.

9. Système selon la revendication 1, comprenant en outre au moins une fonction de transfert (TF) pour traiter l'ensemble de données d'image.

10. Système selon la revendication 1, comprenant en outre une valeur primaire magenta, dans lequel la valeur primaire magenta est dérivée de l'ensemble de données d'image, et dans lequel la valeur primaire magenta n'est pas définie comme une longueur d'onde.

11. Système d'affichage d'un système de couleurs multi-primaires, comprenant :

un ensemble de données d'image, dans lequel l'ensemble de données d'image comprend un premier ensemble de données de canal de couleur et un second ensemble de données de canal de couleur, dans lequel l'ensemble de données d'image comprend en outre un niveau de bit un convertisseur de données d'image au moins une fonction de transfert ( TF) pour traiter l'ensemble de données d'image un ensemble de données de saturation correspondant à l'ensemble de données d'image, dans lequel l'ensemble de données de saturation est utilisé pour étendre un ensemble d'angles de teinte pour le premier ensemble de données de canal de couleur et le deuxième ensemble de données de canal de couleur un ensemble de paramètres de protocole de description de session (SDP), dans lequel l'ensemble de paramètres SDP est modifiable et au moins un dispositif d'affichage dans lequel le au moins un dispositif d'affichage et le convertisseur de données d'image sont en communication réseau, le convertisseur de données d'image étant en outre comprend une position primaire cyan et dans lequel le convertisseur de données d'image est utilisable pour convertir l'ensemble de données d'image pour l'affichage sur le au moins un dispositif d'affichage.

12. Système selon la revendication 11, dans lequel la position primaire cyan est positionnée pour limiter la saturation.

13. Système selon la revendication 11, dans lequel la position principale du cyan est déterminée en agrandissant l'ensemble d'angles de teinte.

14. Système selon la revendication 11, dans lequel une fois que l'ensemble de données d'image a été converti par le convertisseur de données d'image pour le au moins un dispositif d'affichage, l'ensemble de paramètres SDP est modifié en fonction de la conversion.

15. Système selon la revendication 11, dans lequel le au moins un dispositif d'affichage est utilisable pour afficher le système de couleurs primaires multiples sur la base de l'ensemble de données d'image.

16. Système d'affichage d'un système de couleurs primaires multiples, comprenant :

un ensemble de données d'image, dans lequel l'ensemble de données d'image comprend un premier ensemble de données de canal de couleur et un second ensemble de données de canal de couleur, dans lequel l'ensemble de données d'image comprend en outre un convertisseur de données d'image au niveau binaire, le convertisseur de données d'image comprend une interface numérique, dans laquelle l'interface numérique est utilisable pour coder et décoder l'ensemble de données d'image un ensemble de données de saturation correspondant à l'ensemble de données d'image, dans lequel l'ensemble de données de saturation est utilisé pour étendre un ensemble d'angles de teinte pour le premier ensemble de données de canal de couleur et le deuxième ensemble de données de canal de couleur un ensemble de paramètres de protocole de description de session (SDP), dans lequel l'ensemble de paramètres SDP est modifiable et au moins un dispositif d'affichage dans lequel le au moins un dispositif d'affichage et les données d'image convertisseur sont en communication réseau, le convertisseur de données d'image pouvant fonctionner pour convertir l'ensemble de données d'image pour l'affichage sur le au moins un dispositif d'affichage.

17. Système selon la revendication 16, dans lequel le convertisseur de données d'image comprend en outre une position primaire cyan, et dans lequel la position primaire cyan est positionnée pour limiter la saturation.

18. Système selon la revendication 16, dans lequel le convertisseur de données d'image comprend en outre une position primaire cyan, et dans lequel la position primaire cyan est déterminée en agrandissant l'ensemble d'angles de teinte.

19. Système selon la revendication 16, dans lequel une fois que l'ensemble de données d'image a été converti par le convertisseur de données d'image pour le au moins un dispositif d'affichage, l'ensemble de paramètres SDP est modifié en fonction de la conversion.

20. Système selon la revendication 16, dans lequel le au moins un dispositif d'affichage est utilisable pour afficher le système de couleurs primaires multiples sur la base de l'ensemble de données d'image.