Share via


DML_BUFFER_TENSOR_DESC-Struktur (directml.h)

Beschreibt einen Tensor, der in einer Direct3D 12-Pufferressource gespeichert wird. Der entsprechende Tensortyp ist DML_TENSOR_TYPE_BUFFER, und der entsprechende Bindungstyp ist DML_BINDING_TYPE_BUFFER.

Syntax

struct DML_BUFFER_TENSOR_DESC {
  DML_TENSOR_DATA_TYPE DataType;
  DML_TENSOR_FLAGS     Flags;
  UINT                 DimensionCount;
  const UINT           *Sizes;
  const UINT           *Strides;
  UINT64               TotalTensorSizeInBytes;
  UINT                 GuaranteedBaseOffsetAlignment;
};

Member

DataType

Typ: DML_TENSOR_DATA_TYPE

Der Typ der Werte im Tensor.

Flags

Typ: DML_TENSOR_FLAGS

Gibt zusätzliche Optionen für den Tensor an.

DimensionCount

Typ: UINT

Die Anzahl der Dimensionen des Tensors. Dieser Member bestimmt die Größe der Arrays Sizes und Strides (sofern angegeben). In DirectML kann die Dimensionsanzahl je nach Operator zwischen 1 und 8 liegen. Die meisten Operatoren unterstützen mindestens vier Dimensionen.

Sizes

Typ: const UINT*

Die Größe der einzelnen Dimensionen im Tensor in Elementen. Die Angabe einer Größe von 0 (null) in einer beliebigen Dimension ist ungültig und führt zu einem Fehler. Für Operatoren, bei denen die Achsen semantische Bedeutung haben (z. B. Batch, Kanal, Tiefe, Höhe, Breite), wird der Dimensionsmember immer in der Reihenfolge {N, C, H, W} angegeben, wenn DimensionCount den Wert 4 aufweist, und {N, C, D, H, W}, wenn DimensionCount den Wert 5 aufweist. Andernfalls haben die Dimensionen in der Regel keine besondere Bedeutung.

Strides

Typ: const UINT*

Optional. Bestimmt die Anzahl der Elemente (nicht Bytes), die linear durchlaufen werden sollen, um das nächste Element in dieser Dimension zu erreichen. Beispielsweise bedeutet ein Schritt von 5 in Dimension 1, dass der Abstand zwischen Elementen (n) und (n+1) in dieser Dimension 5 Elemente beträgt, wenn der Puffer linear durchlaufen wird. Für Operatoren, bei denen die Achsen semantische Bedeutung haben (z. B. Batch, Kanal, Tiefe, Höhe, Breite), wird der Strides-Member immer in der Reihenfolge {N, C, H, W} angegeben, wenn DimensionCount den Wert 4 aufweist, und {N, C, D, H, W}, wenn DimensionCount den Wert 5 aufweist.

Strides kann verwendet werden, um die Übertragung (durch Angabe eines Schritts von 0) sowie die Auffüllung auszudrücken (z. B. durch Verwendung eines Schritts, der größer als die physische Größe einer Zeile ist, um das Ende einer Zeile zu polstern).

Wenn Strides nicht angegeben ist, gilt jede Dimension im Tensor als zusammenhängend gepackt, ohne zusätzliche Auffüllung.

TotalTensorSizeInBytes

Typ: UINT64

Definiert eine Mindestgröße in Bytes für den Puffer, der diesen Tensor enthalten soll. TotalTensorSizeInBytes muss unter Berücksichtigung der Größen, Schritte und des Datentyps des Tensors mindestens so groß sein wie die implizierte Mindestgröße. Sie können die minimale implizite Größe berechnen, indem Sie die freie Funktion des Hilfsprogramms DMLCalcBufferTensorSize aufrufen.

Die Bereitstellung eines TotalTensorSizeInBytes-Werts , der größer als die implizierte Mindestgröße ist, kann zusätzliche Optimierungen ermöglichen, indem DirectML in einigen Fällen die Überprüfung von Begrenzungen ermöglicht, wenn totalTensorSizeInBytes eine ausreichende Auffüllung über das Ende der Tensordaten hinaus definiert.

Beim Binden dieses Tensors muss die Größe des Pufferbereichs mindestens so groß sein wie totalTensorSizeInBytes. Bei Ausgabe tensoren hat dies den zusätzlichen Effekt, dass DirectML in jeden Speicher innerhalb von TotalTensorSizeInBytes schreiben kann. Das heißt, Ihre Anwendung darf nicht davon ausgehen, dass DirectML alle Auffüllungsbytes innerhalb von Ausgabe tensors innerhalb von TotalTensorSizeInBytes beibewahrt.

Die Gesamtgröße eines Puffer tensors darf (2^32 - 1) Elemente nicht überschreiten, z. B. 16 GB für einen FLOAT32 Tensor.

GuaranteedBaseOffsetAlignment

Typ: UINT

Optional. Definiert eine garantierte Mindestausrichtung in Bytes für den Basisoffset des Pufferbereichs, der diesen Tensor enthält, oder 0, um keine garantierte Mindestausrichtung bereitzustellen. Wenn angegeben, muss dieser Wert eine Leistung von zwei sein, die mindestens so groß wie die Elementgröße ist.

Beim Binden dieses Tensors muss der Offset des Pufferbereichs vom Anfang des Puffers in Byte ein Vielfaches des GuaranteedBaseOffsetAlignment-Werts sein, sofern angegeben.

Puffer tensors haben immer eine Mindestausrichtung von 16 Bytes. Wenn Sie jedoch einen größeren Wert für GuaranteedBaseOffsetAlignment bereitstellen, kann DirectML eine bessere Leistung erzielen, da eine größere Ausrichtung die Verwendung von vektorisierten Lade-/Speicheranweisungen ermöglicht.

Obwohl dieser Member optional ist, wird empfohlen, Tensoren nach Möglichkeit an Grenzen von 32 Bytes oder mehr auszurichten, um eine optimale Leistung zu erzielen.

Anforderungen

   
Kopfzeile directml.h

Weitere Informationen

Bindung in DirectML