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