Share via


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_0Ab 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_0eingefü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