Метод IDMLCommandRecorder::RecordDispatch (directml.h)
Записывает выполнение диспетчеризируемых объектов (инициализатора оператора или скомпилированного оператора) в список команд.
Этот метод не отправляет выполнение в GPU; он просто записывает его в список команд. Вы отвечаете за закрытие списка команд и его отправку в очередь команд Direct3D 12.
Перед выполнением этого вызова на GPU все связанные ресурсы должны находиться в состоянии D3D12_RESOURCE_STATE_UNORDERED_ACCESS или неявно повышаемом для D3D12_RESOURCE_STATE_UNORDERED_ACCESS, например D3D12_RESOURCE_STATE_COMMON. После завершения этого вызова ресурсы остаются в состоянии D3D12_RESOURCE_STATE_UNORDERED_ACCESS . Единственным исключением является отправка кучи, привязанная при выполнении инициализатора оператора и в то время как флаг DML_TENSOR_FLAG_OWNED_BY_DML установлен для одного или нескольких тензоров. В этом случае любая куча отправки, привязанная к входным данным, должна находиться в состоянии D3D12_RESOURCE_STATE_GENERIC_READ и останется в этом состоянии, как это требуется для всех куч отправки.
Этот метод сбрасывает следующее состояние в списке команд.
- Корневая сигнатура вычислений
- состояния конвейера;
Хотя этот метод принимает таблицу привязки, представляющую ресурсы для привязки к конвейеру, он не задает кучи дескриптора, содержащие сами дескрипторы. Поэтому приложение отвечает за вызов ID3D12GraphicsCommandList::SetDescriptorHeaps для привязки правильных куч дескрипторов к конвейеру.
Если DML_EXECUTION_FLAG_DESCRIPTORS_VOLATILE не задано при компиляции оператора, все привязки должны быть заданы в таблице привязки перед вызовом RecordDispatch , в противном случае поведение не определено. В противном случае, если установлен флаг _DESCRIPTORS_VOLATILE , привязка ресурсов может быть отложена до тех пор, пока список команд Direct3D 12 не будет отправлен в очередь команд для выполнения.
Этот метод логически действует как вызов ID3D12GraphicsCommandList::D ispatch. Таким образом, барьеры неупорядоченного представления доступа (UAV) необходимы для обеспечения правильного порядка при наличии зависимостей данных между диспетчерами. Этот метод не вставляет барьеры БПЛА на входные и выходные ресурсы. Приложение должно гарантировать, что правильные барьеры UAV выполняются на любых входных данных, если их содержимое зависит от вышестоящий диспетчеризации, и на любых выходных данных, если есть подчиненные диспетчеризации, которые зависят от этих выходных данных.
Этот метод не содержит ссылок ни на один из переданных интерфейсов. Вы несете ответственность за то, чтобы объект IDMLDispatchable не был освобожден до тех пор, пока все диспетчеры, использующие его, не завершат выполнение в GPU.
Синтаксис
void RecordDispatch(
ID3D12CommandList *commandList,
IDMLDispatchable *dispatchable,
IDMLBindingTable *bindings
);
Параметры
commandList
Тип: ID3D12CommandList*
Указатель на интерфейс ID3D12CommandList , представляющий список команд для записи выполнения. Список команд должен быть открытым и иметь тип D3D12_COMMAND_LIST_TYPE_DIRECT или D3D12_COMMAND_LIST_TYPE_COMPUTE.
dispatchable
Тип: IDMLDispatchable*
Указатель на интерфейс IDMLDispatchable , представляющий объект (инициализатор оператора или скомпилированный оператор), выполнение которого будет записано в список команд.
bindings
Тип: IDMLBindingTable.*
Указатель на интерфейс IDMLBindingTable , представляющий привязки, используемые для выполнения диспетчеризируемых объектов. Если флаг DML_EXECUTION_FLAG_DESCRIPTORS_VOLATILE не установлен, необходимо заполнить все необходимые привязки, в противном случае произойдет ошибка.
Возвращаемое значение
None
Требования
Требование | Значение |
---|---|
Целевая платформа | Windows |
Header | directml.h |
Библиотека | DirectML.lib |
DLL | DirectML.dll |