Vue d’ensemble du nuanceur de calcul
Un nuanceur de calcul est une étape de nuanceur programmable qui étend Microsoft Direct3D 11 au-delà de la programmation graphique. La technologie de nuanceur de calcul est également appelée technologie DirectCompute.
Comme d’autres nuanceurs programmables (nuanceurs de vertex et de géométrie par exemple), un nuanceur de calcul est conçu et implémenté avec HLSL , mais c’est à peu près là que se termine la similarité. Un nuanceur de calcul fournit un calcul à usage général à grande vitesse et tire parti du grand nombre de processeurs parallèles sur l’unité de traitement graphique (GPU). Le nuanceur de calcul fournit des fonctionnalités de partage de mémoire et de synchronisation de threads pour permettre des méthodes de programmation parallèles plus efficaces. Vous appelez la méthode ID3D11DeviceContext::D ispatch ou ID3D11DeviceContext::D ispatchIndirect pour exécuter des commandes dans un nuanceur de calcul. Un nuanceur de calcul peut s’exécuter sur de nombreux threads en parallèle.
Utilisation du nuanceur de calcul sur le matériel Direct3D 10.x
Un nuanceur de calcul sur Microsoft Direct3D 10 est également appelé DirectCompute 4.x.
Si vous utilisez l’API Direct3D 11 et les pilotes mis à jour, le matériel Direct3D de niveau de fonctionnalité 10 et 10.1 peut éventuellement prendre en charge une forme limitée de DirectCompute qui utilise les profils cs_4_0 et cs_4_1. Lorsque vous utilisez DirectCompute sur ce matériel, gardez à l’esprit les limitations suivantes :
- Le nombre maximal de threads est limité à D3D11_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP (768) par groupe.
- La dimension X et Y des numthreads est limitée à D3D11_CS_4_X_THREAD_GROUP_MAX_X (768) et D3D11_CS_4_X_THREAD_GROUP_MAX_Y (768).
- La dimension Z de numthreads est limitée à 1.
- La dimension Z de dispatch est limitée à D3D11_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION (1).
- Une seule vue d’accès non ordonné peut être liée au nuanceur (D3D11_CS_4_X_UAV_REGISTER_COUNT est 1).
- Seuls RWStructuredBufferet RWByteAddressBuffersont disponibles en tant que vues d’accès non ordonné.
- Un thread peut uniquement accéder à sa propre région dans la mémoire groupshared pour l’écriture, même s’il peut lire à partir de n’importe quel emplacement.
- SV_GroupIndex ou SV_GroupThreadID doivent être utilisés lors de l’accès à la mémoire partagée en groupe pour l’écriture.
- La mémoire partagée en groupe est limitée à 16 Ko par groupe.
- Un thread unique est limité à une région de 256 octets de mémoire groupshared pour l’écriture.
- Aucune instruction atomique n’est disponible.
- Aucune valeur de double précision n’est disponible.
Utilisation du nuanceur de calcul sur le matériel Direct3D 11.x
Un nuanceur de calcul sur Direct3D 11 est également appelé DirectCompute 5.0.
Lorsque vous utilisez DirectCompute avec des profils cs_5_0, gardez à l’esprit les éléments suivants :
- Le nombre maximal de threads est limité à D3D11_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP (1024) par groupe.
- La dimension X et Y des numthreads est limitée à D3D11_CS_THREAD_GROUP_MAX_X (1024) et D3D11_CS_THREAD_GROUP_MAX_Y (1024).
- La dimension Z de numthreads est limitée à D3D11_CS_THREAD_GROUP_MAX_Z (64).
- La dimension maximale de la répartition est limitée à D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION (65535).
- Le nombre maximal d’affichages d’accès non ordonnés pouvant être liés à un nuanceur est D3D11_PS_CS_UAV_REGISTER_COUNT (8).
- Prend en charge RWStructuredBuffers, RWByteAddressBufferet les vues d’accès non triées typées (RWTexture1D, RWTexture2D, RWTexture3D, etc.).
- Des instructions atomic sont disponibles.
- La prise en charge de la double précision peut être disponible. Pour plus d’informations sur la façon de déterminer si la double précision est disponible, consultez D3D11_FEATURE_DOUBLES.
Contenu de cette section
Rubrique | Description |
---|---|
Nouveaux types de ressources |
Plusieurs nouveaux types de ressources ont été ajoutés dans Direct3D 11. |
Accès aux ressources |
Il existe plusieurs façons d’accéder aux ressources. |
Fonctions atomiques |
Pour accéder à un nouveau type de ressource ou à une mémoire partagée, utilisez une fonction intrinsèque verrouillée. Les fonctions verrouillées sont garanties pour fonctionner de manière atomique. Autrement dit, ils sont garantis pour se produire dans l’ordre programmé. Cette section répertorie les fonctions atomiques. |