structure DML_SCATTER_OPERATOR_DESC (directml.h)
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 |