IDMLBindingTable 인터페이스(directml.h)
애플리케이션 관리 설명자 힙의 범위를 래핑하고 DirectML에서 리소스에 대한 바인딩을 만드는 데 사용됩니다. 이 개체를 만들려면 IDMLDevice::CreateBindingTable을 호출합니다. IDMLBindingTable 인터페이스는 IDMLDeviceChild에서 상속됩니다.
바인딩 테이블은 다양한 CPU 및 GPU 설명자 핸들에 대해 만들어집니다. IDMLBindingTable::Bind* 메서드가 호출되면 DirectML은 하나 이상의 설명자를 CPU 설명자 범위에 씁니다. IDMLCommandRecorder::RecordDispatch를 호출하는 동안 바인딩 테이블을 사용하는 경우 DirectML은 해당 GPU 설명자를 파이프라인에 바인딩합니다.
CPU 및 GPU 설명자 핸들이 설명자 힙에서 동일한 항목을 가리킬 필요는 없습니다. 단, 이 바인딩 테이블을 사용하여 실행하기 전에 CPU 설명자 핸들에 의해 참조된 전체 설명자 범위가 GPU 설명자 핸들에 의해 참조된 범위로 복사되었는지 확인하는 것은 사용자 애플리케이션의 책임입니다.
이 바인딩 테이블을 사용하는 CPU와 GPU 작업 간에 올바른 동기화를 수행하는 것은 애플리케이션의 책임입니다. 예를 들어 바인딩 테이블을 사용하는 모든 작업이 GPU에서 실행을 완료할 때까지 바인딩 테이블에서 만든 바인딩을 덮어쓰지 않도록 주의해야 합니다(예: 바인딩 테이블에서 Bind*를 다시 호출하거나 설명자 힙을 수동으로 덮어쓰기). 또한 바인딩 테이블은 쓰는 설명자 힙에 대한 참조를 유지 관리하지 않으므로 해당 바인딩 테이블을 사용하는 모든 작업이 GPU에서 실행을 완료할 때까지 백업 셰이더 표시 설명자 힙을 해제해서는 안 됩니다.
바인딩 테이블은 정확히 하나의 디스패치 가능한 개체(연산자 이니셜라이저 또는 컴파일된 연산자)와 연결되며 해당 특정 개체에 대한 바인딩을 나타냅니다. 그러나 IDMLBindingTable::Reset을 호출하여 바인딩 테이블을 다시 사용할 수 있습니다. 바인딩 테이블은 설명자 힙 자체를 소유하지 않으므로 GPU에서 미해결 실행이 완료되기 전에 다시 설정을 호출하고 다른 디스패치 가능한 개체에 바인딩 테이블을 다시 사용하는 것이 안전합니다.
바인딩 테이블은 바인딩된 리소스에 대한 강력한 참조를 유지하지 않습니다. 애플리케이션은 GPU에서 계속 사용하는 동안 리소스가 삭제되지 않도록 해야 합니다.
이 개체는 스레드로부터 안전하지 않습니다. 애플리케이션은 동기화 없이 다른 스레드에서 바인딩 테이블의 메서드를 동시에 호출해서는 안 됩니다.
상속
IDMLBindingTable 인터페이스는 IDMLDeviceChild 인터페이스에서 상속됩니다.
메서드
IDMLBindingTable 인터페이스에는 이러한 메서드가 있습니다.
IDMLBindingTable::BindInputs 리소스 집합을 입력 텐서로 바인딩합니다. |
IDMLBindingTable::BindOutputs 리소스 집합을 출력 텐서로 바인딩합니다. |
IDMLBindingTable::BindPersistentResource 버퍼를 영구 리소스로 바인딩합니다. IDMLDispatchable::GetBindingProperties를 호출하여 이 버퍼 범위의 필요한 크기를 확인할 수 있습니다. |
IDMLBindingTable::BindTemporaryResource 임시 스크래치 메모리로 사용할 버퍼를 바인딩합니다. IDMLDispatchable::GetBindingProperties를 호출하여 이 버퍼 범위의 필요한 크기를 확인할 수 있습니다. |
IDMLBindingTable::Reset 바인딩 테이블을 다시 설정하여 잠재적으로 다른 연산자 또는 이니셜라이저에 대한 새 설명자 범위를 래핑합니다. 이렇게 하면 바인딩 테이블을 동적으로 다시 사용할 수 있습니다. |
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | Windows |
헤더 | directml.h |