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

#### 产品支持情况

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


#### 功能说明

指定当前线程中用于运算的Device。在不同线程中支持调用aclrtSetDevice接口指定同一个Device用于运算。

调用本接口会隐式创建默认Context，该默认Context中包含一个默认Stream。在同一个进程的多个线程中，如果调用aclrtSetDevice接口并指定相同的Device用于计算，那么这些线程将共享同一个默认Context。

但 Atlas 推理系列产品 的EP标准形态除外，其隐式创建的默认Context中包含两个Stream：一个默认Stream和一个执行内部同步的Stream。


#### 函数原型

```
aclError aclrtSetDevice(int32_t deviceId)
```


#### 参数说明

| 参数名 | 输入/输出 | 说明 |
| --- | --- | --- |
| deviceId | 输入 | Device ID。 用户调用aclrtGetDeviceCount接口获取可用的Device数量后，这个Device ID的取值范围：[0, (可用的Device数量\-1)] |


#### 返回值说明

返回0表示成功，返回其他值表示失败，请参见aclError。


#### 约束说明

- 调用aclrtSetDevice接口指定运算的Device后，若不使用Device上的资源时，可调用aclrtResetDevice或aclrtResetDeviceForce接口及时释放本进程使用的Device资源（若不调用Reset接口，进程退出时也会释放本进程使用的Device资源）：

  - 若调用    aclrtResetDevice
接口释放Device资源：
    aclrtResetDevice接口内部涉及引用计数的实现，建议aclrtResetDevice接口与aclrtSetDevice接口配对使用，aclrtSetDevice接口每被调用一次，则引用计数加一，aclrtResetDevice接口每被调用一次，则该引用计数减一，当引用计数减到0时，才会真正释放Device上的资源。

  - 若调用    aclrtResetDeviceForce
接口释放Device资源：
    aclrtResetDeviceForce接口可与aclrtSetDevice接口配对使用，也可不与aclrtSetDevice接口配对使用，若不配对使用，一个进程中，针对同一个Device，调用一次或多次aclrtSetDevice接口后，仅需调用一次aclrtResetDeviceForce接口可释放Device上的资源。

- 多Device场景下，可在进程中通过aclrtSetDevice接口切换到其它Device。


#### 接口调用示例

接口调用示例，参见初始化(https://www.hiascend.comdocument/detail/zh/canncommercial/900/programug/acldevg/runtime_doc_dev_0002.html)。
