---
title: 函数：set_device
description: "| 产品 | 是否支持 |"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/runtimeapi/aclpythondevg_01_0062.html
sourcePath: /source/zh/canncommercial/900/API/runtimeapi/aclpythondevg_01_0062.html
indexId: a7f17aeae8fe681d29c8e6712a884bdf35da2bd7f30dc369432672808fd26ac971
---
# 函数：set_device

#### 产品支持情况

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


#### 功能说明

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

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


#### 函数原型

- C函数原型
  1 aclErroraclrtSetDevice(int32_tdeviceId)

- python函数
  1 ret = acl.rt.set_device(device_id)


#### 参数说明

| 参数名 | 说明 |
| --- | --- |
| device\_id | int，Device设备号。 用户调用acl.rt.get\_device\_count接口获取可用的Device数量后，取值范围：[0, (可用的Device数量 \- 1)]。 |


#### 返回值说明

| 返回值 | 说明 |
| --- | --- |
| ret | int，错误码，返回0表示成功，返回其它值表示失败。 |


#### 约束说明

如果多次调用acl.rt.set_device接口而不调用acl.rt.reset_device接口释放本进程使用的Device资源，功能上不会有问题，因为在进程退出时也会释放本进程使用的Device资源。建议acl.rt.set_device接口和acl.rt.reset_device接口配对使用，在不使用Device上资源时，通过调用acl.rt.reset_device接口及时释放本进程使用的Device资源。

在不同进程或线程中支持调用acl.rt.set_device接口指定同一个Device用于运算。在同一个进程中的多个线程中，如果调用acl.rt.set_device接口指定同一个Device用于运算，这时隐式创建的默认Context是同一个。


#### 资源参考

接口调用流程与示例，请参见运行时资源申请与释放(https://www.hiascend.comdocument/detail/zh/canncommercial/900/programug/acldevg/aclpythondevg_0009.html)、同步等待(https://www.hiascend.comdocument/detail/zh/canncommercial/900/programug/acldevg/aclpythondevg_0022.html)。
