estructura DML_BUFFER_TENSOR_DESC (directml.h)

Describe un tensor que se almacenará en un recurso de búfer de Direct3D 12. El tipo de tensor correspondiente es DML_TENSOR_TYPE_BUFFER y el tipo de enlace correspondiente es DML_BINDING_TYPE_BUFFER.

Sintaxis

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;
};

Miembros

DataType

Tipo: DML_TENSOR_DATA_TYPE

Tipo de los valores del tensor.

Flags

Tipo: DML_TENSOR_FLAGS

Especifica opciones adicionales para el tensor.

DimensionCount

Tipo: UINT

Número de dimensiones del tensor. Este miembro determina el tamaño de las matrices Sizes y Strides (si se proporciona). En DirectML, el recuento de dimensiones puede oscilar entre 1 y 8, dependiendo del operador. La mayoría de los operadores admiten al menos 4 dimensiones.

Sizes

Tipo: const UINT*

Tamaño, en elementos, de cada dimensión del tensor. Especificar un tamaño de cero en cualquier dimensión no es válido y producirá un error. Para los operadores en los que los ejes tienen significado semántico (por ejemplo, batch, channel, depth, height, width), el miembro Sizes siempre se especifica en el orden {N, C, H, W} si DimensionCount es 4 y {N, C, D, H, W} si DimensionCount es 5. De lo contrario, las dimensiones generalmente no tienen ningún significado concreto.

Strides

Tipo: const UINT*

Opcional. Determina el número de elementos (no bytes) que se recorrerán linealmente para alcanzar el siguiente elemento de esa dimensión. Por ejemplo, un paso de 5 en la dimensión 1 significa que la distancia entre los elementos (n) y (n+1) de esa dimensión es de 5 elementos al atravesar el búfer linealmente. Para los operadores en los que los ejes tienen significado semántico (por ejemplo, lote, canal, profundidad, alto, ancho), el miembro Strides siempre se especifica en el orden {N, C, H, W} si DimensionCount es 4 y {N, C, D, H, W} si DimensionCount es 5.

Los pasos se pueden usar para expresar la difusión (especificando un paso de 0) así como el relleno (por ejemplo, mediante un paso mayor que el tamaño físico de una fila, para rellenar el final de una fila).

Si no se especifica Strides , cada dimensión del tensor se considera contiguamente empaquetada, sin relleno adicional.

TotalTensorSizeInBytes

Tipo: UINT64

Define un tamaño mínimo en bytes para el búfer que contendrá este tensor. TotalTensorSizeInBytes debe ser al menos tan grande como el tamaño implícito mínimo dados los tamaños, los pasos y el tipo de datos del tensor. Puede calcular el tamaño mínimo implícito llamando a la función gratuita de utilidad DMLCalcBufferTensorSize .

Proporcionar un TotalTensorSizeInBytes mayor que el tamaño implícito mínimo puede habilitar optimizaciones adicionales al permitir que DirectML realice la comprobación de límites en algunos casos si TotalTensorSizeInBytes define suficiente relleno más allá del final de los datos de tensor.

Al enlazar este tensor, el tamaño del intervalo de búfer debe ser al menos tan grande como TotalTensorSizeInBytes. En el caso de los tensores de salida, esto tiene el efecto adicional de permitir que DirectML escriba en cualquier memoria dentro de TotalTensorSizeInBytes. Es decir, la aplicación no debe suponer que DirectML conservará los bytes de relleno dentro de los tensores de salida que están dentro de TotalTensorSizeInBytes.

El tamaño total de un tensor de búfer puede no superar (2^32 - 1), por ejemplo, 16 GB para un tensor de FLOAT32 .

GuaranteedBaseOffsetAlignment

Tipo: UINT

Opcional. Define una alineación mínima garantizada en bytes para el desplazamiento base del intervalo de búfer que contendrá este tensor o 0 para proporcionar ninguna alineación mínima garantizada. Si se especifica, este valor debe ser una potencia de dos que sea al menos tan grande como el tamaño del elemento.

Al enlazar este tensor, el desplazamiento en bytes del intervalo de búfer desde el inicio del búfer debe ser un múltiplo de GuaranteedBaseOffsetAlignment, si se proporciona.

Los tensores de búfer siempre tienen una alineación mínima de 16 bytes. Sin embargo, proporcionar un valor mayor para GuaranteedBaseOffsetAlignment puede permitir que DirectML obtenga un mejor rendimiento, ya que una alineación mayor permite el uso de instrucciones de carga y almacén vectorizadas.

Aunque este miembro es opcional, para obtener el mejor rendimiento, se recomienda alinear tensores con límites de 32 bytes o más, siempre que sea posible.

Requisitos

   
Encabezado directml.h

Consulte también

Enlaces en DirectML