如何用好Context
推荐做法:
- 优先使用显式Context:对于多线程或复杂应用,显式创建Context,代码意图更清晰。
- Context与线程绑定:推荐在创建Context的线程中使用该Context,避免跨线程使用带来的复杂性。
- 及时销毁资源:Context不再使用时及时销毁,避免资源泄漏。
- 使用aclrtResetDeviceForce:Device使用完毕后,使用aclrtResetDeviceForce一次性释放Device上所有资源。
- 明确Context切换时机:在多Context场景下,显式调用aclrtSetCurrentContext切换,增加代码可读性。
避免做法:
- 不要销毁默认Context:默认Context由Runtime管理,不能调用aclrtDestroyContext销毁。
- 避免Context状态不确定:多线程共享Context时,避免依赖Context的隐式状态切换。
- 不要跨线程随意操作同一Stream:如果必须在多线程间共享Context,每个线程应使用独立的Stream。
- 不要在已复位的Device上使用Context:Device被复位后,相关Context不可用。
父主题: Context管理