Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Copie l’ensemble du tenseur d’entrée dans la sortie, puis remplace les index sélectionnés par les valeurs correspondantes du tenseur de mises à jour. Cet opérateur effectue le pseudocode suivant.
output = input
output[index[i, j, k, ...], j, k, ...] = updates[i, j, k, ...] // if axis == 0
output[i, index[i, j, k, ...], k, ...] = updates[i, j, k, ...] // if axis == 1
output[i, j, index[i, j, k, ...], ...] = updates[i, j, k, ...] // if axis == 2
...
Si deux index d’éléments de sortie se chevauchent (ce qui n’est pas valide), il n’y a aucune garantie quant à la dernière écriture qui gagne.
DML_SCATTER_OPERATOR_DESC est l’inverse de DML_GATHER_OPERATOR_DESC.
Syntaxe
struct DML_SCATTER_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *IndicesTensor;
const DML_TENSOR_DESC *UpdatesTensor;
const DML_TENSOR_DESC *OutputTensor;
UINT Axis;
};
Membres
InputTensor
Type : const DML_TENSOR_DESC*
Tenseur à partir duquel lire.
IndicesTensor
Type : const DML_TENSOR_DESC*
Tenseur contenant les index dans le tenseur de sortie. Les tailles doivent correspondre à InputTensor.Sizes pour chaque dimension à l’exception d’Axis.
DML_FEATURE_LEVEL_3_0À compter de , cet opérateur prend en charge les valeurs d’index négatives lors de l’utilisation d’un type intégral signé avec ce tenseur. Les index négatifs sont interprétés comme étant relatifs à la fin de la dimension d’axe. Par exemple, un index de -1 fait référence au dernier élément le long de cette dimension.
UpdatesTensor
Type : const DML_TENSOR_DESC*
Tenseur contenant les nouvelles valeurs pour remplacer les valeurs d’entrée existantes aux index correspondants. Les tailles de ce tenseur doivent correspondre à IndexTensor.Sizes. Le DataType doit correspondre à InputTensor.DataType.
OutputTensor
Type : const DML_TENSOR_DESC*
Tenseur dans lequel écrire les résultats. Les tailles et le type de données de ce tenseur doivent correspondre à InputTensor.
Axis
Type : UINT
Dimension d’axe à utiliser pour l’indexation dans OutputTensor, allant de [0, OutputTensor.DimensionCount).
Exemples
Exemple 1. Nuage de points 1D
Axis: 0
InputTensor: (Sizes:{5}, DataType:FLOAT32)
[0,1,2,3,4]
IndicesTensor: (Sizes:{4}, DataType:UINT32)
[3,1,3,0]
UpdatesTensor: (Sizes:{4}, DataType:FLOAT32)
[5,6,7,8]
// output = input
// output[indices[x]] = updates[x]
OutputTensor: (Sizes:{5}, DataType:FLOAT32)
[8,6,2,7,4]
Exemple 2. Nuage de points 2D
Axis: 0
InputTensor: (Sizes:{2,3}, DataType:FLOAT32)
[[0.0, 0.0, 0.0],
[0.0, 0.0, 0.0],
[0.0, 0.0, 0.0]]
IndicesTensor: (Sizes:{2,3}, DataType:UINT32)
[[1, 0, 2],
[0, 2, 1]]
UpdatesTensor: (Sizes:{2,3}, DataType:FLOAT32)
[[10, 11, 12],
[20, 21, 22]]
// output = input
// output[indices[y, x], x] = updates[y, x]
OutputTensor: (Sizes:{3,3}, DataType:FLOAT32)
[[20, 11, 0],
[10, 0, 22],
[ 0, 21, 12]]
Notes
DML_SCATTER_OPERATOR_DESC a été correctement associé au nom DML_SCATTER_ELEMENTS_OPERATOR_DESC comme équivalent approprié pour DML_GATHER_ELEMENTS_OPERATOR_DESC. En effet , DML_SCATTER_OPERATOR_DESC n’était pas vraiment symétrique à DML_GATHER_OPERATOR_DESC.
Disponibilité
Cet opérateur a été introduit dans DML_FEATURE_LEVEL_1_0.
Contraintes tensoriels
- IndexsTensor, InputTensor, OutputTensor et UpdatesTensor doivent avoir le même DimensionCount.
- InputTensor, OutputTensor et UpdatesTensor doivent avoir le même DataType.
Prise en charge de Tensor
DML_FEATURE_LEVEL_4_1 et versions ultérieures
| Tenseur | Type | Nombre de dimensions pris en charge | Types de données pris en charge |
|---|---|---|---|
| InputTensor | Entrée | 1 à 8 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
| IndexTensor | Entrée | 1 à 8 | INT64, INT32, UINT64, UINT32 |
| UpdatesTensor | Entrée | 1 à 8 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
| OutputTensor | Output | 1 à 8 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_3_0 et versions ultérieures
| Tenseur | Type | Nombre de dimensions pris en charge | Types de données pris en charge |
|---|---|---|---|
| InputTensor | Entrée | 1 à 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
| IndexTensor | Entrée | 1 à 8 | INT64, INT32, UINT64, UINT32 |
| UpdatesTensor | Entrée | 1 à 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
| OutputTensor | Output | 1 à 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_2_1 et versions ultérieures
| Tenseur | Type | Nombre de dimensions pris en charge | Types de données pris en charge |
|---|---|---|---|
| InputTensor | Entrée | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
| IndexTensor | Entrée | 4 | UINT32 |
| UpdatesTensor | Entrée | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
| OutputTensor | Output | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_1_0 et versions ultérieures
| Tenseur | Type | Nombre de dimensions pris en charge | Types de données pris en charge |
|---|---|---|---|
| InputTensor | Entrée | 4 | FLOAT32, FLOAT16 |
| IndexTensor | Entrée | 4 | UINT32 |
| UpdatesTensor | Entrée | 4 | FLOAT32, FLOAT16 |
| OutputTensor | Output | 4 | FLOAT32, FLOAT16 |
Spécifications
| Client minimal pris en charge | Windows 10, version 2004 (10.0; Build 19041) |
| Serveur minimal pris en charge | Windows Server, version 2004 (10.0 ; Build 19041) |
| En-tête | directml.h |