структура DML_SCATTER_OPERATOR_DESC (directml.h)
Копирует весь входной тензор в выходные данные, а затем перезаписывает выбранные индексы соответствующими значениями из тензора обновлений. Этот оператор выполняет следующий псевдокод.
output = input
output[index[i, j, k, ...], j, k, ...] = updates[i, j, k, ...] // if axis == 0
output[i, index[i, j, k, ...], k, ...] = updates[i, j, k, ...] // if axis == 1
output[i, j, index[i, j, k, ...], ...] = updates[i, j, k, ...] // if axis == 2
...
Если два индекса выходных элементов перекрываются (что недопустимо), то нет никакой гарантии, какая последняя запись победит.
DML_SCATTER_OPERATOR_DESC является обратным DML_GATHER_OPERATOR_DESC.
Синтаксис
struct DML_SCATTER_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *IndicesTensor;
const DML_TENSOR_DESC *UpdatesTensor;
const DML_TENSOR_DESC *OutputTensor;
UINT Axis;
};
Члены
InputTensor
Тип: const DML_TENSOR_DESC*
Тензор для чтения.
IndicesTensor
Тип: const DML_TENSOR_DESC*
Тензор, содержащий индексы в выходном тензоре. Размеры должны соответствовать InputTensor.Sizes для каждого измерения, кроме оси.
Начиная с DML_FEATURE_LEVEL_3_0
, этот оператор поддерживает отрицательные значения индекса при использовании целочисленного типа со знаком с этим тензором. Отрицательные индексы интерпретируются как относительные к концу измерения оси. Например, индекс -1 относится к последнему элементу в этом измерении.
UpdatesTensor
Тип: const DML_TENSOR_DESC*
Тензор, содержащий новые значения для замены существующих входных значений в соответствующих индексах. Размеры этого тензора должны совпадать с ИндексамиTensor.Sizes. DataType должен соответствовать InputTensor.DataType.
OutputTensor
Тип: const DML_TENSOR_DESC*
Тензор для записи результатов. Значения Sizes и DataType этого тензора должны совпадать с InputTensor.
Axis
Тип: UINT
Измерение оси, используемое для индексирования в OutputTensor в диапазоне [0, OutputTensor.DimensionCount)
.
Примеры
Пример 1. 1D-точечная диаграмма
Axis: 0
InputTensor: (Sizes:{5}, DataType:FLOAT32)
[0,1,2,3,4]
IndicesTensor: (Sizes:{4}, DataType:UINT32)
[3,1,3,0]
UpdatesTensor: (Sizes:{4}, DataType:FLOAT32)
[5,6,7,8]
// output = input
// output[indices[x]] = updates[x]
OutputTensor: (Sizes:{5}, DataType:FLOAT32)
[8,6,2,7,4]
Пример 2. 2D-точечная диаграмма
Axis: 0
InputTensor: (Sizes:{2,3}, DataType:FLOAT32)
[[0.0, 0.0, 0.0],
[0.0, 0.0, 0.0],
[0.0, 0.0, 0.0]]
IndicesTensor: (Sizes:{2,3}, DataType:UINT32)
[[1, 0, 2],
[0, 2, 1]]
UpdatesTensor: (Sizes:{2,3}, DataType:FLOAT32)
[[10, 11, 12],
[20, 21, 22]]
// output = input
// output[indices[y, x], x] = updates[y, x]
OutputTensor: (Sizes:{3,3}, DataType:FLOAT32)
[[20, 11, 0],
[10, 0, 22],
[ 0, 21, 12]]
Комментарии
DML_SCATTER_OPERATOR_DESC более правильно под псевдонимом имени DML_SCATTER_ELEMENTS_OPERATOR_DESC в качестве правильного аналога DML_GATHER_ELEMENTS_OPERATOR_DESC. Это связано с тем, что DML_SCATTER_OPERATOR_DESC не был симметричным для DML_GATHER_OPERATOR_DESC.
Доступность
Этот оператор появился в DML_FEATURE_LEVEL_1_0
.
Ограничения тензоров
- ИндексыTensor, InputTensor, OutputTensor и UpdatesTensor должны иметь один и тот же DimensionCount.
- InputTensor, OutputTensor и UpdatesTensor должны иметь один и тот же тип DataType.
Поддержка тензоров
DML_FEATURE_LEVEL_4_1 и выше
Тензор | Kind | Поддерживаемые счетчики измерений | Поддерживаемые типы данных |
---|---|---|---|
InputTensor | Входные данные | От 1 до 8 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
IndicesTensor | Входные данные | От 1 до 8 | INT64, INT32, UINT64, UINT32 |
UpdatesTensor | Входные данные | От 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 и выше
Тензор | Kind | Поддерживаемые счетчики измерений | Поддерживаемые типы данных |
---|---|---|---|
InputTensor | Входные данные | От 1 до 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
IndicesTensor | Входные данные | От 1 до 8 | INT64, INT32, UINT64, UINT32 |
UpdatesTensor | Входные данные | От 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 и выше
Тензор | Kind | Поддерживаемые счетчики измерений | Поддерживаемые типы данных |
---|---|---|---|
InputTensor | Входные данные | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
IndicesTensor | Входные данные | 4 | UINT32 |
UpdatesTensor | Входные данные | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputTensor | Выходные данные | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_1_0 и выше
Тензор | Kind | Поддерживаемые счетчики измерений | Поддерживаемые типы данных |
---|---|---|---|
InputTensor | Входные данные | 4 | FLOAT32, FLOAT16 |
IndicesTensor | Входные данные | 4 | UINT32 |
UpdatesTensor | Входные данные | 4 | FLOAT32, FLOAT16 |
OutputTensor | Выходные данные | 4 | FLOAT32, FLOAT16 |
Требования
Минимальная версия клиента | Windows 10 версии 2004 (10.0; Сборка 19041) |
Минимальная версия сервера | Windows Server версии 2004 (10.0; Сборка 19041) |
Верхняя часть | directml.h |