Condividi tramite


struttura DML_BUFFER_TENSOR_DESC (directml.h)

Descrive un tensore che verrà archiviato in una risorsa buffer Direct3D 12. Il tipo tensore corrispondente è DML_TENSOR_TYPE_BUFFER e il tipo di associazione corrispondente è DML_BINDING_TYPE_BUFFER.

Sintassi

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

Members

DataType

Tipo: DML_TENSOR_DATA_TYPE

Tipo dei valori nel tensore.

Flags

Tipo: DML_TENSOR_FLAGS

Specifica opzioni aggiuntive per il tensore.

DimensionCount

Tipo: UINT

Numero di dimensioni del tensore. Questo membro determina le dimensioni delle matrici Sizes e Strides (se specificato). In DirectML il conteggio delle dimensioni può variare da 1 a 8, a seconda dell'operatore. La maggior parte degli operatori supporta almeno 4 dimensioni.

Sizes

Tipo: const UINT*

Dimensione, in elementi, di ogni dimensione nel tensore. La specifica di una dimensione pari a zero in qualsiasi dimensione non è valida e genererà un errore. Per gli operatori in cui gli assi hanno un significato semantico (ad esempio batch, canale, profondità, altezza, larghezza), il membro Sizes viene sempre specificato nell'ordine {N, C, H, W} se DimensionCount è 4 e {N, C, D, H, W} se DimensionCount è 5. In caso contrario, le dimensioni in genere non hanno alcun significato particolare.

Strides

Tipo: const UINT*

facoltativo. Determina il numero di elementi (non byte) da attraversare in modo lineare per raggiungere l'elemento successivo in tale dimensione. Ad esempio, uno stride di 5 nella dimensione 1 indica che la distanza tra gli elementi (n) e (n+1) in tale dimensione è di 5 elementi durante l'attraversamento lineare del buffer. Per gli operatori in cui gli assi hanno un significato semantico (ad esempio batch, canale, profondità, altezza, larghezza), il membro Strides viene sempre specificato nell'ordine {N, C, H, W} se DimensionCount è 4 e {N, C, D, H, W} se DimensionCount è 5.

Strides può essere usato per esprimere la trasmissione (specificando uno stride pari a 0) e la spaziatura interna (ad esempio, utilizzando uno stride maggiore delle dimensioni fisiche di una riga, per riempire la fine di una riga).

Se Strides non viene specificato, ogni dimensione nel tensore viene considerata contigua, senza spaziatura interna aggiuntiva.

TotalTensorSizeInBytes

Tipo: UINT64

Definisce una dimensione minima in byte per il buffer che conterrà questo tensore. TotalTensorSizeInBytes deve essere pari almeno alla dimensione minima implicita in base alle dimensioni, ai passi e al tipo di dati del tensore. È possibile calcolare le dimensioni minime implicite chiamando la funzione libera dell'utilità DMLCalcBufferTensorSize .

Se si specifica un valore TotalTensorSizeInBytes maggiore della dimensione minima implicita, è possibile abilitare ottimizzazioni aggiuntive consentendo a DirectML di elidere i limiti di controllo in alcuni casi se TotalTensorSizeInBytes definisce una spaziatura interna sufficiente oltre la fine dei dati del tensore.

Quando si associa questo tensore, le dimensioni dell'intervallo di buffer devono essere almeno pari a TotalTensorSizeInBytes. Per i tensori di output, questo ha l'effetto aggiuntivo di consentire a DirectML di scrivere in qualsiasi memoria all'interno di TotalTensorSizeInBytes. Ovvero, l'applicazione non deve presupporre che DirectML manterrà tutti i byte di riempimento all'interno dei tensori di output all'interno di TotalTensorSizeInBytes.

Le dimensioni totali di un tensore di buffer potrebbero non superare (2^32 - 1), ad esempio 16 GB per un tensore FLOAT32 .

GuaranteedBaseOffsetAlignment

Tipo: UINT

facoltativo. Definisce un allineamento minimo garantito in byte per l'offset di base dell'intervallo di buffer che conterrà questo tensore o 0 per non fornire un allineamento minimo garantito. Se specificato, questo valore deve essere una potenza di due dimensioni pari almeno a quella dell'elemento.

Quando si associa questo tensore, l'offset in byte dell'intervallo di buffer dall'inizio del buffer deve essere un multiplo di GuaranteedBaseOffsetAlignment, se specificato.

I tensori del buffer hanno sempre un allineamento minimo di 16 byte. Tuttavia, fornire un valore maggiore per GuaranteedBaseOffsetAlignment può consentire a DirectML di ottenere prestazioni migliori, perché un allineamento più ampio consente l'uso di istruzioni di caricamento/archiviazione vettorializzate.

Anche se questo membro è facoltativo, per ottenere prestazioni ottimali, è consigliabile allineare i tensori ai limiti di 32 byte o più, se possibile.

Requisiti

   
Intestazione directml.h

Vedi anche

Binding in DirectML