DML_SCATTER_OPERATOR_DESC-Struktur (directml.h)
Kopiert den gesamten Eingabe tensor in die Ausgabe und überschreibt dann ausgewählte Indizes mit den entsprechenden Werten aus dem Updates-Tensor. Dieser Operator führt den folgenden Pseudocode aus.
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
...
Wenn sich zwei Ausgabeelementindizes überschneiden (was ungültig ist), gibt es keine Garantie dafür, welcher letzte Schreibvorgang gewinnt.
DML_SCATTER_OPERATOR_DESC ist die Umkehrung der DML_GATHER_OPERATOR_DESC.
Syntax
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;
};
Member
InputTensor
Typ: const DML_TENSOR_DESC*
Der Tensor, aus dem gelesen werden soll.
IndicesTensor
Typ: const DML_TENSOR_DESC*
Ein Tensor, der die Indizes im Ausgabe tensor enthält. Die Größen müssen mit InputTensor.Sizes für jede Dimension mit Ausnahme der Achse übereinstimmen.
DML_FEATURE_LEVEL_3_0
Ab unterstützt dieser Operator negative Indexwerte, wenn ein integraler Vorzeichentyp mit diesem Tensor verwendet wird. Negative Indizes werden als relativ zum Ende der Achsendimension interpretiert. Beispielsweise bezieht sich ein Index von -1 auf das letzte Element entlang dieser Dimension.
UpdatesTensor
Typ: const DML_TENSOR_DESC*
Ein Tensor, der die neuen Werte enthält, um die vorhandenen Eingabewerte an den entsprechenden Indizes zu ersetzen. Die Größen dieses Tensors müssen mit IndicesTensor.Sizes übereinstimmen. Der DataType muss mit InputTensor.DataType übereinstimmen.
OutputTensor
Typ: const DML_TENSOR_DESC*
Der Tensor, in den die Ergebnisse geschrieben werden sollen. Die Größen und der Datentyp dieses Tensors müssen mit InputTensor übereinstimmen.
Axis
Typ: UINT
Die Achsendimension, die für die Indizierung in OutputTensor verwendet werden soll, und reicht von [0, OutputTensor.DimensionCount)
.
Beispiele
Beispiel 1: 1D-Punkt
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]
Beispiel 2: 2D-Punkt
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]]
Hinweise
DML_SCATTER_OPERATOR_DESC wurde besser als Alias für den Namen DML_SCATTER_ELEMENTS_OPERATOR_DESC als geeignete Entsprechung zu DML_GATHER_ELEMENTS_OPERATOR_DESC. Dies liegt daran , dass DML_SCATTER_OPERATOR_DESC nicht wirklich symmetrisch DML_GATHER_OPERATOR_DESC war.
Verfügbarkeit
Dieser Operator wurde in DML_FEATURE_LEVEL_1_0
eingeführt.
Tensoreinschränkungen
- IndicesTensor, InputTensor, OutputTensor und UpdatesTensor müssen über dieselbe DimensionCount verfügen.
- InputTensor, OutputTensor und UpdatesTensor müssen denselben Datentyp aufweisen.
Tensorunterstützung
DML_FEATURE_LEVEL_4_1 und höher
Tensor | Typ | Unterstützte Dimensionsanzahl | Unterstützte Datentypen |
---|---|---|---|
InputTensor | Eingabe | 1 bis 8 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
IndicesTensor | Eingabe | 1 bis 8 | INT64, INT32, UINT64, UINT32 |
UpdatesTensor | Eingabe | 1 bis 8 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
OutputTensor | Ausgabe | 1 bis 8 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_3_0 und höher
Tensor | Typ | Unterstützte Dimensionsanzahl | Unterstützte Datentypen |
---|---|---|---|
InputTensor | Eingabe | 1 bis 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
IndicesTensor | Eingabe | 1 bis 8 | INT64, INT32, UINT64, UINT32 |
UpdatesTensor | Eingabe | 1 bis 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputTensor | Ausgabe | 1 bis 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_2_1 und höher
Tensor | Typ | Unterstützte Dimensionsanzahl | Unterstützte Datentypen |
---|---|---|---|
InputTensor | Eingabe | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
IndicesTensor | Eingabe | 4 | UINT32 |
UpdatesTensor | Eingabe | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputTensor | Ausgabe | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_1_0 und höher
Tensor | Typ | Unterstützte Dimensionsanzahl | Unterstützte Datentypen |
---|---|---|---|
InputTensor | Eingabe | 4 | FLOAT32, FLOAT16 |
IndizesTensor | Eingabe | 4 | UINT32 |
UpdatesTensor | Eingabe | 4 | FLOAT32, FLOAT16 |
OutputTensor | Ausgabe | 4 | FLOAT32, FLOAT16 |
Anforderungen
Unterstützte Mindestversion (Client) | Windows 10, Version 2004 (10.0; Build 19041) |
Unterstützte Mindestversion (Server) | Windows Server, Version 2004 (10.0; Build 19041) |
Kopfzeile | directml.h |