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 |