DML_SLICE_OPERATOR_DESC结构 (directml.h)

(输入张量 ) 提取单个子区域。

使用每个维度的三个值确定在切片中复制的元素。

  • 偏移标记维度中要复制的第一个元素。
  • 大小标记维度中要复制的元素数。
  • 步幅指示维度中的元素增量或步长。

提供的 OffsetsSizesStrides 必须仅复制输入张量边界内的元素, (不允许) 边界外读取。 切片 的大小必须与 输出张量大小完全匹配。 通常,复制的元素的计算方式如下。

OutputTensor[OutputCoordinates] = InputTensor[Offsets + Strides * OutputCoordinates]

语法

struct DML_SLICE_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *OutputTensor;
  UINT                  DimensionCount;
  const UINT            *Offsets;
  const UINT            *Sizes;
  const UINT            *Strides;
};

成员

InputTensor

类型: const DML_TENSOR_DESC*

要从中提取切片的张量。

OutputTensor

类型: const DML_TENSOR_DESC*

要向其写入切片数据结果的张量。

DimensionCount

类型: UINT

维度数。 此字段确定 OffsetsSizeStrides 数组的大小。 此值必须与输入和输出张量的 DimensionCount 匹配。 此值必须介于 1 和 8 之间,从 开始 DML_FEATURE_LEVEL_3_0;早期功能级别需要值 4 或 5。

Offsets

类型:_Field_size_ (DimensionCount) const UINT*

一个数组,其中包含切片沿输入张量的每个维度(以元素为单位)的起始值。

Sizes

类型:_Field_size_ (DimensionCount) const UINT*

一个数组,包含每个维度(以元素为单位)的切片大小。 此数组中的值必须与输出张量中指定的大小匹配。

Strides

类型:_Field_size_ (DimensionCount) const UINT*

一个数组,包含切片沿输入张量的每个维度(以元素为单位)的步幅。 如果步幅大于 1,则表示可以跳过输入张量元素 (例如,步幅为 2 将沿维度) 选择第二个元素。

示例

以下示例使用相同的输入张量:

InputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[ 1,  2,  3,  4],
   [ 5,  6,  7,  8],
   [ 9, 10, 11, 12],
   [13, 14, 15, 16]]]]

示例 1。 连续切片

Offsets = {0, 0, 1, 2}
Sizes   = {1, 1, 3, 2}
Strides = {1, 1, 1, 1}

OutputTensor: (Sizes:{1, 1, 3, 2}, DataType:FLOAT32)
[[[[ 7,  8],
   [11, 12],
   [15, 16]]]]

示例 2。 跨距切片

Offsets = {0, 0, 1, 0}
Sizes   = {1, 1, 2, 2}
Strides = {1, 1, 2, 3}

OutputTensor: (Sizes:{1, 1, 2, 2}, DataType:FLOAT32)
[[[[ 5,  8],
   [13, 16]]]]

注解

在 中DML_FEATURE_LEVEL_2_1引入了此运算符的较新版本(DML_SLICE1_OPERATOR_DESC)。

可用性

此运算符是在 中引入的 DML_FEATURE_LEVEL_1_0

张量约束

InputTensorOutputTensor 必须具有相同的 DataTypeDimensionCount

Tensor 支持

DML_FEATURE_LEVEL_4_1 及更高版本

种类 支持的维度计数 支持的数据类型
InputTensor 输入 1 到 8 FLOAT64、FLOAT32、FLOAT16、INT64、INT32、INT16、INT8、UINT64、UINT32、UINT16、UINT8
OutputTensor 输出 1 到 8 FLOAT64、FLOAT32、FLOAT16、INT64、INT32、INT16、INT8、UINT64、UINT32、UINT16、UINT8

DML_FEATURE_LEVEL_3_0及更高版本

种类 支持的维度计数 支持的数据类型
InputTensor 输入 1 到 8 FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8
OutputTensor 输出 1 到 8 FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8

DML_FEATURE_LEVEL_2_1及更高版本

种类 支持的维度计数 支持的数据类型
InputTensor 输入 4 到 5 FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8
OutputTensor 输出 4 到 5 FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8

DML_FEATURE_LEVEL_1_0 及更高版本

种类 支持的维度计数 支持的数据类型
InputTensor 输入 4 到 5 FLOAT32、FLOAT16、INT32、INT16、UINT32、UINT16
OutputTensor 输出 4 到 5 FLOAT32、FLOAT16、INT32、INT16、UINT32、UINT16

要求

要求
Header directml.h