---
title: aclrtCreateContext
description: "| 产品 | 是否支持 |"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/runtimeapi/aclcppdevg_03_0059.html
sourcePath: /source/zh/canncommercial/900/API/runtimeapi/aclcppdevg_03_0059.html
indexId: 54002c8be582be54f051d7e0ef16256b2a4ec7bdb2fe8317ad7c61f191a8f73968
---
# aclrtCreateContext

#### 产品支持情况

| 产品 | 是否支持 |
| --- | --- |
| Atlas 350 加速卡 | √ |
| Atlas A3 训练系列产品 / Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品 / Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | √ |
| Atlas 推理系列产品 | √ |
| Atlas 训练系列产品 | √ |


#### 功能说明

在当前线程中显式创建Context，并将当前线程与新创建的Context相关联。

若不调用aclrtCreateContext接口显式创建Context，那系统会使用默认Context，该默认Context是在调用aclrtSetDevice接口时隐式创建的。默认Context适合简单、无复杂交互逻辑的应用，但缺点在于，在多线程编程中，执行结果取决于线程调度的顺序。显式创建的Context适合大型、复杂交互逻辑的应用，且便于提高程序的可读性、可维护性。


#### 函数原型

```
aclError aclrtCreateContext(aclrtContext *context, int32_t deviceId)
```


#### 参数说明

| 参数名 | 输入/输出 | 说明 |
| --- | --- | --- |
| context | 输出 | Context的指针。类型定义请参见aclrtContext。 |
| 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。
