Created by: Shixiaowei02
本提交是预测多流的一部分,为兼容训练,部分修改以 #22853 为基础。 1、抽象 CUDAContext / CUDAStream 类,将其从 CUDADeviceContext 拆分。 2、创建 CUDA 流时可选择优先级。 3、增加 std::thread_local 属性的 CUDAContext,使运行时上下文可绑定线程。
还考虑过下列修改方式实现预测多流: 1、从 OperatorBase::Run() 入手重构,使上下文绑定执行器而非线程;#23068 为这种修改的一次尝试。这种方式全面彻底,但还涉及到底层 60+ 个模块,改动量较大,所以被延迟。 2、创建 CUDAStreamPool 统一管理 CUDA 流,但这样增加了一个全局变量、不易封装;并且目前的流与句柄绑定,提前初始化会分配多余资源,所以未采用。 3、仅改动 TensorRT 子图,实现部分多流。但这种方式仍无法避免考虑一些全局问题。
为向后兼容,当前修改在获取流时进行了一次 std::unordered_map::count() 检索。