다음을 통해 공유


DML_BUFFER_TENSOR_DESC 구조체(directml.h)

Direct3D 12 버퍼 리소스에 저장될 텐서에 대해 설명합니다. 해당 텐서 형식은 DML_TENSOR_TYPE_BUFFER 해당 바인딩 형식은 DML_BINDING_TYPE_BUFFER.

구문

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

멤버

DataType

형식: DML_TENSOR_DATA_TYPE

텐서의 값 형식입니다.

Flags

형식: DML_TENSOR_FLAGS

텐서에 대한 추가 옵션을 지정합니다.

DimensionCount

형식: UINT

텐서의 차원 수입니다. 이 멤버는 크기 및 Strides 배열의 크기를 결정 합니다(제공된 경우). DirectML에서 차원 수는 연산자에 따라 1에서 8까지의 범위일 수 있습니다. 대부분의 연산자는 4개 이상의 차원을 지원합니다.

Sizes

형식: const UINT*

텐서의 각 차원의 크기(요소)입니다. 모든 차원에 0의 크기를 지정하는 것은 유효하지 않으며 오류가 발생합니다. 축에 의미 체계가 있는 연산자(예: 일괄 처리, 채널, 깊이, 높이, 너비)의 경우 DimensionCount 가 4이면 항상 크기 멤버가 {N, C, H, W} 순서로 지정되고 DimensionCount 가 5인 경우 {N, C, D, H, W} 순서로 Sizes 멤버가 지정됩니다. 그렇지 않으면 차원은 일반적으로 특별한 의미가 없습니다.

Strides

형식: const UINT*

선택 사항입니다. 해당 차원의 다음 요소에 도달하기 위해 선형으로 트래버스할 요소 수(바이트가 아님)를 결정합니다. 예를 들어 1차원에서 5의 보폭은 버퍼를 선형으로 트래버스할 때 해당 차원의 요소(n)와 (n+1) 사이의 거리가 5개 요소임을 의미합니다. 축에 의미 체계적 의미가 있는 연산자(예: 일괄 처리, 채널, 깊이, 높이, 너비)의 경우 DimensionCount가 4이면 Strides 멤버가 항상 {N, C, H, W} 순서로 지정되고 DimensionCount가 5이면 {N, C, D, H, W} 순서로 지정됩니다.

Strides는 브로드캐스트(0의 보폭 지정)와 패딩(예: 행의 실제 크기보다 큰 보폭을 사용하여 행의 끝을 패딩하는 경우)을 표현하는 데 사용할 수 있습니다.

Strides를 지정하지 않으면 텐서의 각 차원은 추가 패딩 없이 연속적으로 압축된 것으로 간주됩니다.

TotalTensorSizeInBytes

형식: UINT64

이 텐서를 포함할 버퍼의 최소 크기(바이트)를 정의합니다. TotalTensorSizeInBytes 는 텐서의 크기, 보폭 및 데이터 형식을 고려할 때 최소 암시적 크기만큼 커야 합니다. DMLCalcBufferTensorSize 유틸리티 무료 함수를 호출하여 최소 암시적 크기를 계산할 수 있습니다.

최소 내재 크기보다 큰 TotalTensorSizeInBytes 를 제공하면 DirectML이 TotalTensorSizeInBytes 가 텐서 데이터의 끝 이상으로 충분한 패딩을 정의하는 경우 경우에 따라 경계를 해제할 수 있도록 하여 추가 최적화를 수행할 수 있습니다.

이 텐서를 바인딩할 때 버퍼 범위의 크기는 TotalTensorSizeInBytes만큼 커야 합니다. 출력 텐서의 경우 DirectML이 TotalTensorSizeInBytes 내의 모든 메모리에 쓸 수 있도록 허용하는 추가 효과가 있습니다. 즉, 애플리케이션에서 DirectML이 TotalTensorSizeInBytes 내에 있는 출력 텐서 내의 패딩 바이트를 유지한다고 가정해서는 안 됩니다.

버퍼 텐서의 총 크기는 (2^32 - 1) 요소를 초과할 수 없습니다(예: FLOAT32 텐서의 경우 16GB).

GuaranteedBaseOffsetAlignment

형식: UINT

선택 사항입니다. 이 텐서를 포함할 버퍼 범위의 기본 오프셋에 대해 최소 보장 맞춤을 바이트 단위로 정의하거나 최소 보장 맞춤을 제공하지 않는 0을 정의합니다. 지정한 경우 이 값은 요소 크기만큼 큰 2의 힘이어야 합니다.

이 텐서를 바인딩할 때 버퍼 시작부터 버퍼 범위의 오프셋(바이트)은 제공된 경우 GuaranteedBaseOffsetAlignment의 배수여야 합니다.

버퍼 텐서의 최소 맞춤은 항상 16바이트입니다. 그러나 GuaranteedBaseOffsetAlignment 에 더 큰 값을 제공하면 더 큰 맞춤을 사용하면 벡터화된 부하/저장소 지침을 사용할 수 있으므로 DirectML이 더 나은 성능을 얻을 수 있습니다.

이 멤버는 선택 사항이지만 최상의 성능을 위해 가능한 경우 32바이트 이상의 경계에 텐서를 맞추는 것이 좋습니다.

요구 사항

   
머리글 directml.h

참고 항목

DirectML의 바인딩