Compartilhar via


estrutura DML_BUFFER_TENSOR_DESC (directml.h)

Descreve um tensor que será armazenado em um recurso de buffer do Direct3D 12. O tipo tensor correspondente é DML_TENSOR_TYPE_BUFFER e o tipo de associação correspondente é DML_BINDING_TYPE_BUFFER.

Sintaxe

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

Membros

DataType

Tipo: DML_TENSOR_DATA_TYPE

O tipo dos valores no tensor.

Flags

Tipo: DML_TENSOR_FLAGS

Especifica opções adicionais para o tensor.

DimensionCount

Tipo: UINT

O número de dimensões do tensor. Esse membro determina o tamanho das matrizes Sizes e Strides (se fornecido). No DirectML, a contagem de dimensões pode variar de 1 a 8, dependendo do operador. A maioria dos operadores dá suporte a pelo menos 4 dimensões.

Sizes

Tipo: const UINT*

O tamanho, em elementos, de cada dimensão no tensor. Especificar um tamanho igual a zero em qualquer dimensão é inválido e resultará em um erro. Para operadores em que os eixos têm significado semântico (por exemplo, lote, canal, profundidade, altura, largura), o membro Sizes sempre é especificado na ordem {N, C, H, W} se DimensionCount for 4 e {N, C, D, H, W} se DimensionCount for 5. Caso contrário, as dimensões geralmente não têm nenhum significado específico.

Strides

Tipo: const UINT*

Opcional. Determina o número de elementos (não bytes) a percorrer linearmente para alcançar o próximo elemento nessa dimensão. Por exemplo, um passo de 5 na dimensão 1 significa que a distância entre elementos (n) e (n+1) nessa dimensão é de 5 elementos ao atravessar o buffer linearmente. Para operadores em que os eixos têm significado semântico (por exemplo, lote, canal, profundidade, altura, largura), o membro Strides sempre é especificado na ordem {N, C, H, W} se DimensionCount for 4 e {N, C, D, H, W} se DimensionCount for 5.

Os passos podem ser usados para expressar a difusão (especificando um passo de 0), bem como o preenchimento (por exemplo, usando um passo maior que o tamanho físico de uma linha, para preencher o final de uma linha).

Se Strides não for especificado, cada dimensão no tensor será considerada contígua, sem preenchimento adicional.

TotalTensorSizeInBytes

Tipo: UINT64

Define um tamanho mínimo em bytes para o buffer que conterá esse tensor. TotalTensorSizeInBytes deve ser pelo menos tão grande quanto o tamanho implícito mínimo dado os tamanhos, os passos e o tipo de dados do tensor. Você pode calcular o tamanho mínimo implícito chamando a função gratuita do utilitário DMLCalcBufferTensorSize .

Fornecer um TotalTensorSizeInBytes maior que o tamanho implícito mínimo pode habilitar otimizações adicionais, permitindo que o DirectML elide bounds verifique em alguns casos se TotalTensorSizeInBytes definir preenchimento suficiente além do final dos dados tensores.

Ao associar esse tensor, o tamanho do intervalo de buffers deve ser pelo menos tão grande quanto o TotalTensorSizeInBytes. Para tensores de saída, isso tem o efeito adicional de permitir que o DirectML escreva em qualquer memória no TotalTensorSizeInBytes. Ou seja, seu aplicativo não deve assumir que o DirectML preservará todos os bytes de preenchimento dentro de tensores de saída que estejam dentro do TotalTensorSizeInBytes.

O tamanho total de um tensor de buffer pode não exceder (2^32 – 1) elementos — por exemplo, 16 GB para um tensor de FLOAT32 .

GuaranteedBaseOffsetAlignment

Tipo: UINT

Opcional. Define um alinhamento mínimo garantido em bytes para o deslocamento base do intervalo de buffers que conterá esse tensor ou 0 para não fornecer nenhum alinhamento mínimo garantido. Se especificado, esse valor deve ser uma potência de dois que é pelo menos tão grande quanto o tamanho do elemento.

Ao associar esse tensor, o deslocamento em bytes do intervalo de buffers desde o início do buffer deve ser um múltiplo do GuaranteedBaseOffsetAlignment, se fornecido.

Os tensores de buffer sempre têm um alinhamento mínimo de 16 bytes. No entanto, fornecer um valor maior para o GuaranteedBaseOffsetAlignment pode permitir que o DirectML obtenha um melhor desempenho, pois um alinhamento maior permite o uso de instruções vetorizadas de carregamento/repositório.

Embora esse membro seja opcional, para melhor desempenho, recomendamos alinhar tensores a limites de 32 bytes ou mais, sempre que possível.

Requisitos

   
Cabeçalho directml.h

Confira também

Associação no DirectML