aclrtCreateContext
产品支持情况
产品 |
是否支持 |
|---|---|
√ |
|
√ |
|
√ |
|
√ |
|
√ |
功能说明
在当前线程中显式创建Context。
若不调用aclrtCreateContext接口显式创建Context,那系统会使用默认Context,该默认Context是在调用aclrtSetDevice接口时隐式创建的。默认Context适合简单、无复杂交互逻辑的应用,但缺点在于,在多线程编程中,执行结果取决于线程调度的顺序。显式创建的Context适合大型、复杂交互逻辑的应用,且便于提高程序的可读性、可维护性。
函数原型
aclError aclrtCreateContext(aclrtContext *context, int32_t deviceId)
参数说明
参数名 |
输入/输出 |
说明 |
|---|---|---|
context |
输出 |
Context的指针。 |
deviceId |
输入 |
在指定的Device下创建Context。 用户调用aclrtGetDeviceCount接口获取可用的Device数量后,这个Device ID的取值范围:[0, (可用的Device数量-1)] |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
- 在某一进程中指定Device,该进程内的多个线程可共用在此Device上显式创建的Context。
- 若在某一进程内创建多个Context,Context的数量与Stream相关,Stream数量有限制,请参见显式创建Stream的接口。当前线程在同一时刻内只能使用其中一个Context,建议通过aclrtSetCurrentContext接口明确指定当前线程的Context,增加程序的可维护性。
- 调用本接口创建的Context中包含一个默认Stream。
但
Atlas 推理系列产品 的EP标准形态除外,其Context中包含两个Stream:一个默认Stream和一个执行内部同步的Stream。 - 如果在应用程序中没有调用aclrtSetDevice接口,那么在首次调用aclrtCreateContext接口时,系统内部会根据该接口传入的Device ID,为该Device绑定一个默认Stream(一个Device仅绑定一个默认Stream),因此在首次调用aclrtCreateContext接口时,占用的Stream数量 = Device上绑定的默认Stream + Context中包含的Stream。
父主题: Context管理