4. Device管理
本章节描述 CANN Runtime 的设备管理接口,用于设备的设置、重置、查询、同步及 P2P 访问等操作。
aclError aclrtSetDevice(int32_t deviceId):指定当前线程中用于运算的Device。在不同线程中支持调用aclrtSetDevice接口指定同一个Device用于运算。aclError aclrtResetDevice(int32_t deviceId):复位当前运算的Device,释放Device上的资源。aclError aclrtResetDeviceForce(int32_t deviceId):复位当前运算的Device,释放Device上的资源。aclError aclrtGetDevice(int32_t *deviceId):获取当前正在使用的Device的ID。aclError aclrtGetRunMode(aclrtRunMode *runMode):获取当前AI软件栈的运行模式。aclError aclrtSetTsDevice(aclrtTsId tsId):设置本次计算需要使用的Task Schedule。aclError aclrtGetDeviceCount(uint32_t *count):获取可用Device的数量。aclError aclrtGetDeviceUtilizationRate(int32_t deviceId, aclrtUtilizationInfo *utilizationInfo):查询Device上Cube、Vector、AI CPU等的利用率。aclError aclrtQueryDeviceStatus(int32_t deviceId, aclrtDeviceStatus *deviceStatus):查询Device状态是正常可用、还是异常不可用。const char *aclrtGetSocName():查询当前运行环境的AI处理器版本。aclError aclrtSetDeviceSatMode(aclrtFloatOverflowMode mode):设置当前Device的浮点计算结果输出模式。aclError aclrtGetDeviceSatMode(aclrtFloatOverflowMode *mode):查询当前Device的浮点计算结果输出模式。aclError aclrtDeviceCanAccessPeer(int32_t *canAccessPeer, int32_t deviceId, int32_t peerDeviceId):查询Device之间是否支持数据交互。aclError aclrtDeviceEnablePeerAccess(int32_t peerDeviceId, uint32_t flags):开启当前Device与指定Device之间的数据交互。开启数据交互是Device级的。aclError aclrtDeviceDisablePeerAccess(int32_t peerDeviceId):关闭当前Device与指定Device之间的数据交互功能。关闭数据交互功能是Device级的。aclError aclrtDevicePeerAccessStatus(int32_t deviceId, int32_t peerDeviceId, int32_t *status):查询两个Device之间的数据交互状态。aclError aclrtGetOverflowStatus(void *outputAddr, size_t outputSize, aclrtStream stream):获取当前Device下所有Stream上任务的溢出状态,并将状态值拷贝到用户申请的Device内存中。异步接口。aclError aclrtResetOverflowStatus(aclrtStream stream):清除当前Device下所有Stream上任务的溢出状态。异步接口。aclError aclrtSynchronizeDevice(void):阻塞当前线程,直到与当前线程绑定的Context所对应的Device完成运算。aclError aclrtSynchronizeDeviceWithTimeout(int32_t timeout):阻塞当前线程,直到与当前线程绑定的Context所对应的Device完成运算。aclError aclrtGetDeviceInfo(uint32_t deviceId, aclrtDevAttr attr, int64_t *value):获取指定Device的信息。aclError aclrtDeviceGetStreamPriorityRange(int32_t *leastPriority, int32_t *greatestPriority):查询硬件支持的Stream最低、最高优先级。aclError aclrtGetDeviceCapability(int32_t deviceId, aclrtDevFeatureType devFeatureType, int32_t *value):查询支持的特性信息。aclError aclrtGetDevicesTopo(uint32_t deviceId, uint32_t otherDeviceId, uint64_t *value):获取两个Device之间的网络拓扑关系。aclError aclrtRegDeviceStateCallback(const char *regName, aclrtDeviceStateCallback callback, void *args):注册Device状态回调函数,不支持重复注册。aclError aclrtGetLogicDevIdByUserDevId(const int32_t userDevid, int32_t *const logicDevId):根据用户设备ID获取对应的逻辑设备ID。aclError aclrtGetUserDevIdByLogicDevId(const int32_t logicDevId, int32_t *const userDevid):根据逻辑设备ID获取对应的用户设备ID。aclError aclrtGetLogicDevIdByPhyDevId(const int32_t phyDevId, int32_t *const logicDevId):根据物理设备ID获取对应的逻辑设备ID。aclError aclrtGetPhyDevIdByLogicDevId(const int32_t logicDevId, int32_t *const phyDevId):根据逻辑设备ID获取对应的物理设备ID。aclError aclrtGetUserDevIdByPhyDevId(const int32_t phyDevId, int32_t *const userDevId):根据物理设备ID获取对应的用户设备ID。aclError aclrtGetPhyDevIdByUserDevId(const int32_t userDevId, int32_t *const phyDevId):根据用户设备ID获取对应的物理设备ID。aclError aclrtDeviceGetUuid(int32_t deviceId, aclrtUuid *uuid):获取Device的唯一标识UUID(Universally Unique Identifier)。aclError aclrtDeviceGetBareTgid(int32_t *pid):获取当前进程的进程ID。aclError aclrtDeviceGetHostAtomicCapabilities(uint32_t* capabilities, const aclrtAtomicOperation* operations, const uint32_t count, int32_t deviceId):查询指定Device与Host之间支持的原子操作详情。aclError aclrtDeviceGetP2PAtomicCapabilities(uint32_t* capabilities, const aclrtAtomicOperation* operations, const uint32_t count, int32_t srcDeviceId, int32_t dstDeviceId):查询一个AI Server内两个Device之间支持的原子操作详情。AI Server通常是多个Device组成的服务器形态的统称。aclError aclrtDeviceSetLimit(aclrtDeviceLimit limit, size_t value):设置当前Device的资源限制,如栈大小、printf FIFO大小等。aclError aclrtDeviceGetLimit(aclrtDeviceLimit limit, size_t *value):查询当前Device的资源限制值。
aclrtSetDevice
aclError aclrtSetDevice(int32_t deviceId)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:支持
功能说明
指定当前线程中用于运算的Device。在不同线程中支持调用aclrtSetDevice接口指定同一个Device用于运算。
多Device场景下,可在进程中通过aclrtSetDevice接口切换到其它Device。
调用本接口会隐式创建默认Context,该默认Context中包含一个默认Stream。在同一个进程的多个线程中,如果调用aclrtSetDevice接口并指定相同的Device用于计算,那么这些线程将共享同一个默认Context。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| deviceId | 输入 | Device ID。 用户调用aclrtGetDeviceCount接口获取可用的Device数量后,这个Device ID的取值范围:[0, (可用的Device数量-1)] |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
IPV350上不支持默认Context和默认Stream。
调用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上的资源。
aclrtResetDevice
aclError aclrtResetDevice(int32_t deviceId)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:支持
功能说明
复位当前运算的Device,释放Device上的资源。释放的资源包括默认Context、默认Stream以及默认Context下创建的所有Stream。若默认Context或默认Stream下的任务还未完成,系统会等待任务完成后再释放。
aclrtResetDevice接口内部涉及引用计数的实现,建议aclrtResetDevice接口与aclrtSetDevice接口配对使用,aclrtSetDevice接口每被调用一次,则引用计数加一,aclrtResetDevice接口每被调用一次,则该引用计数减一,当引用计数减到0时,才会真正释放Device上的资源。
如果多次调用aclrtSetDevice接口而不调用aclrtResetDevice接口释放本线程使用的Device资源,进程退出时也会释放本进程使用的Device资源。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| deviceId | 输入 | Device ID。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
IPV350上不支持默认Context和默认Stream。
若要复位的Device上存在显式创建的Context、Stream、Event,在复位前,建议遵循如下接口调用顺序,否则可能会导致业务异常。
接口调用顺序:调用aclrtDestroyEvent接口释放Event/调用aclrtDestroyStream接口释放显式创建的Stream**-->调用aclrtDestroyContext释放显式创建的Context-->**调用aclrtResetDevice接口
aclrtResetDeviceForce
aclError aclrtResetDeviceForce(int32_t deviceId)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:支持
功能说明
复位当前运算的Device,释放Device上的资源。释放的资源包括默认Context、默认Stream以及默认Context下创建的所有Stream。若默认Context或默认Stream下的任务还未完成,系统会等待任务完成后再释放。
aclrtResetDeviceForce接口可与aclrtSetDevice接口配对使用,也可不与aclrtSetDevice接口配对使用,若不配对使用,一个进程中,针对同一个Device,调用一次或多次aclrtSetDevice接口后,仅需调用一次aclrtResetDeviceForce接口可释放Device上的资源。
// 与aclrtSetDevice接口配对使用:
aclrtSetDevice(1) -> aclrtResetDeviceForce(1) -> aclrtSetDevice(1) -> aclrtResetDeviceForce(1)
// 与aclrtSetDevice接口不配对使用:
aclrtSetDevice(1) -> aclrtSetDevice(1) -> aclrtResetDeviceForce(1)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| deviceId | 输入 | Device ID。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
- IPV350上不支持默认Context和默认Stream。
-
多线程场景下,针对同一个Device,如果每个线程中都调用aclrtSetDevice接口、aclrtResetDeviceForce接口,如下所示,线程2中的aclrtResetDeviceForce接口会返回报错,因为线程1中aclrtResetDeviceForce接口已经释放了Device 1的资源:
时间线 -----------------------------------------------------------------------------> 线程1:aclrtSetDevice(1) aclrtResetDeviceForce(1) 线程2:aclrtSetDevice(1) aclrtResetDeviceForce(1)多线程场景下,正确方式是应在线程执行的最后,调用一次aclrtResetDeviceForce释放Device资源,如下所示:
时间线 -----------------------------------------------------------------------------> 线程1:aclrtSetDevice(1) 线程2:aclrtSetDevice(1) aclrtResetDeviceForce(1) -
aclrtResetDevice接口与aclrtResetDeviceForce接口可以混用,但混用时,若两个Reset接口的调用次数、调用顺序不对,接口会返回报错。
# 混用时的正确方式: # 两个Reset接口都分别与Set接口配对使用,且aclrtResetDeviceForce接口在aclrtResetDevice接口之后 aclrtSetDevice(1) -> aclrtResetDevice(1) -> aclrtSetDevice(1) -> aclrtResetDeviceForce(1) aclrtSetDevice(1) -> aclrtSetDevice(1) -> aclrtResetDevice(1) -> aclrtResetDeviceForce(1) # 混用时的错误方式: # aclrtResetDevice接口内部涉及引用计数的实现,当aclrtResetDevice接口每被调用一次,则该引用计数减1,当引用计数减到0时,会真正释放Device上的资源,此时再调用aclrtResetDevice或aclrtResetDeviceForce接口都会报错 aclrtSetDevice(1) -> aclrtSetDevice(1) -> aclrtResetDevice(1)-->aclrtResetDevice(1)-->aclrtResetDeviceForce(1) aclrtSetDevice(1) -> aclrtSetDevice(1) -> aclrtResetDevice(1)-->aclrtResetDeviceForce(1)-->aclrtResetDeviceForce(1) # aclrtResetDeviceForce接口在aclrtResetDevice接口之后,否则接口返回报错 aclrtSetDevice(1) -> aclrtSetDevice(1) -> aclrtResetDeviceForce(1)-->aclrtResetDevice(1)
aclrtGetDevice
aclError aclrtGetDevice(int32_t *deviceId)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:支持
功能说明
获取当前正在使用的Device的ID。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| deviceId | 输出 | Device ID的指针。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
如果没有提前指定计算设备(例如调用aclrtSetDevice接口),则调用aclrtGetDevice接口时,返回错误。
aclrtGetRunMode
aclError aclrtGetRunMode(aclrtRunMode *runMode)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:支持
功能说明
获取当前AI软件栈的运行模式。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| runMode | 输出 | 运行模式的指针。类型定义请参见aclrtRunMode。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtSetTsDevice
aclError aclrtSetTsDevice(aclrtTsId tsId)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
设置本次计算需要使用的Task Schedule。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| tsId | 输入 | 指定本次计算需要使用的Task Schedule。如果AI处理器中只有AI CORE Task Schedule,没有VECTOR Core Task Schedule,则设置该参数无效,默认使用AI CORE Task Schedule。 |
aclrtTsId的定义如下:
typedef enum aclrtTsId {
ACL_TS_ID_AICORE = 0, // 使用AI CORE Task Schedule
ACL_TS_ID_AIVECTOR = 1, // 使用VECTOR Core Task Schedule
ACL_TS_ID_RESERVED = 2,
} aclrtTsId;
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtGetDeviceCount
aclError aclrtGetDeviceCount(uint32_t *count)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:支持
功能说明
获取可用Device的数量。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| count | 输出 | Device数量的指针。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtGetDeviceUtilizationRate
aclError aclrtGetDeviceUtilizationRate(int32_t deviceId, aclrtUtilizationInfo *utilizationInfo)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
查询Device上Cube、Vector、AI CPU等的利用率。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| deviceId | 输入 | Device ID。 用户调用aclrtGetDeviceCount接口获取可用的Device数量后,这个Device ID的取值范围:[0, (可用的Device数量-1)] |
| utilizationInfo | 输出 | 利用率信息结构体指针。类型定义定参见aclrtUtilizationInfo。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
- 当使用本接口查询Vector利用率时,如果查询结果为-1,则表示Vector不存在。
- 当前版本不支持查询Device内存利用率,若通过本接口查询内存利用率,返回的利用率为-1。
- 开启Profiling功能时,不支持调用本接口查询利用率,接口返回值无实际意义。
- 昇腾虚拟化实例场景下,不支持调用本接口查询利用率,接口返回值无实际意义。
aclrtQueryDeviceStatus
aclError aclrtQueryDeviceStatus(int32_t deviceId, aclrtDeviceStatus *deviceStatus)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
查询Device状态是正常可用、还是异常不可用。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| deviceId | 输入 | Device ID。 用户调用aclrtGetDeviceCount接口获取可用的Device数量后,这个Device ID的取值范围:[0, (可用的Device数量-1)] |
| deviceStatus | 输出 | Device状态。类型定义请参见aclrtDeviceStatus。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtGetSocName
const char *aclrtGetSocName()
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
查询当前运行环境的AI处理器版本。
参数说明
无
返回值说明
返回AI处理器版本字符串的指针。
如果通过该接口获取芯片版本失败,则返回空指针;如果运行环境上Device数量大于1,则固定返回Device 0的AI处理器版本名称。
aclrtSetDeviceSatMode
aclError aclrtSetDeviceSatMode(aclrtFloatOverflowMode mode)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
设置当前Device的浮点计算结果输出模式。
调用该接口成功后,后续在该Device上新创建的Stream按设置的模式生效,对之前已创建的Stream不生效。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| mode | 输入 | 设置浮点计算结果输出模式。类型定义请参见aclrtFloatOverflowMode。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtGetDeviceSatMode
aclError aclrtGetDeviceSatMode(aclrtFloatOverflowMode *mode)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
查询当前Device的浮点计算结果输出模式。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| mode | 输出 | 获取浮点计算结果输出模式。类型定义请参见aclrtFloatOverflowMode。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtDeviceCanAccessPeer
aclError aclrtDeviceCanAccessPeer(int32_t *canAccessPeer, int32_t deviceId, int32_t peerDeviceId)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:不支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
查询Device之间是否支持数据交互。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| canAccessPeer | 输出 | 是否支持数据交互,1表示支持,0表示不支持。 |
| deviceId | 输入 | 指定Device的ID,不能与peerDeviceId参数值相同。 用户调用aclrtGetDeviceCount接口获取可用的Device数量后,这个Device ID的取值范围:[0, (可用的Device数量-1)] |
| peerDeviceId | 输入 | 指定Device的ID,不能与deviceId参数值相同。 用户调用aclrtGetDeviceCount接口获取可用的Device数量后,这个Device ID的取值范围:[0, (可用的Device数量-1)] |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
- 仅支持物理机和容器场景;
- 仅支持同一个PCIe Switch内Device之间的数据交互。AI Server场景下,虽然是跨PCIe Switch,但也支持Device之间的数据交互。
- 仅支持同一个物理机或容器内的Device之间的数据交互操作。
- 仅支持同一个进程内、线程间的Device之间的数据交互,不支持不同进程间Device之间的数据交互。
- Atlas 推理系列产品,Control CPU开放形态下,应用程序运行在Device的Control CPU上时,该接口不支持Device之间的数据交互。
aclrtDeviceEnablePeerAccess
aclError aclrtDeviceEnablePeerAccess(int32_t peerDeviceId, uint32_t flags)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:不支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
开启当前Device与指定Device之间的数据交互。开启数据交互是Device级的。
调用本接口开启Device之间的数据交互是单向的。例如,当前Device ID为0,调用aclrtDeviceEnablePeerAccess接口指定Device ID为1后,仅Device 0到Device 1方向的数据交互是可行的。若要启用Device 1到Device 0方向的数据交互,则需将当前Device切换至Device 1,并再次调用aclrtDeviceEnablePeerAccess接口指定Device ID 0,此时Device 1到Device 0方向的数据交互才能实现。
可提前调用aclrtDeviceCanAccessPeer接口查询当前Device与指定Device之间能否进行数据交互。开启Device间的数据交互功能后,若想关闭该功能,可调用aclrtDeviceDisablePeerAccess接口。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| peerDeviceId | 输入 | 指定Device ID,该ID不能与当前Device的ID相同。 用户调用aclrtGetDeviceCount接口获取可用的Device数量后,这个Device ID的取值范围:[0, (可用的Device数量-1)] |
| flags | 输入 | 保留参数,当前必须设置为0。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
Atlas 推理系列产品,Control CPU开放形态下,应用程序运行在Device的Control CPU上时,该接口不支持Device之间的数据交互。
aclrtDeviceDisablePeerAccess
aclError aclrtDeviceDisablePeerAccess(int32_t peerDeviceId)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:不支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
关闭当前Device与指定Device之间的数据交互功能。关闭数据交互功能是Device级的。
调用aclrtDeviceEnablePeerAccess接口开启当前Device与指定Device之间的数据交互后,可调用aclrtDeviceDisablePeerAccess接口关闭数据交互功能。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| peerDeviceId | 输入 | Device ID,该ID不能与当前Device的ID相同。 用户调用aclrtGetDeviceCount接口获取可用的Device数量后,这个Device ID的取值范围:[0, (可用的Device数量-1)] |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
Atlas 推理系列产品,Control CPU开放形态下,应用程序运行在Device的Control CPU上时,该接口不支持Device之间的数据交互。
aclrtDevicePeerAccessStatus
aclError aclrtDevicePeerAccessStatus(int32_t deviceId, int32_t peerDeviceId, int32_t *status)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
查询两个Device之间的数据交互状态。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| deviceId | 输入 | 指定Device的ID。 用户调用aclrtGetDeviceCount接口获取可用的Device数量后,这个Device ID的取值范围:[0, (可用的Device数量-1)] |
| peerDeviceId | 输入 | 指定Device的ID。 用户调用aclrtGetDeviceCount接口获取可用的Device数量后,这个Device ID的取值范围:[0, (可用的Device数量-1)] |
| status | 输出 | 设备状态。0表示未开启数据交互;1表示已开启数据交互。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
该接口仅可用于查询取值范围内两个Device ID对应设备的数据交互状态。若传入的Device ID超出[0, (可用的Device数量-1)]取值区间,接口查询结果为0或直接返回错误码ACL_ERROR_RT_PARAM_INVALID。
aclrtGetOverflowStatus
aclError aclrtGetOverflowStatus(void *outputAddr, size_t outputSize, aclrtStream stream)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
获取当前Device下所有Stream上任务的溢出状态,并将状态值拷贝到用户申请的Device内存中。异步接口。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| outputAddr | 输入&输出 | 用户申请的Device内存,例如通过aclrtMalloc接口申请。 |
| outputSize | 输入 | 需申请的Device内存大小,单位Byte,固定大小为64Byte。 |
| stream | 输入 | 指定Stream,用于下发溢出状态查询任务。类型定义请参见aclrtStream。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
对于Ascend 950PR/Ascend 950DT、Atlas A3 训练系列产品/Atlas A3 推理系列产品、Atlas A2 训练系列产品/Atlas A2 推理系列产品,调用本接口查询出来的溢出状态是进程级别的。
aclrtResetOverflowStatus
aclError aclrtResetOverflowStatus(aclrtStream stream)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
清除当前Device下所有Stream上任务的溢出状态。异步接口。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| stream | 输入 | 指定Stream,用于下发溢出状态复位任务。类型定义请参见aclrtStream。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
对于Ascend 950PR/Ascend 950DT、Atlas A3 训练系列产品/Atlas A3 推理系列产品、Atlas A2 训练系列产品/Atlas A2 推理系列产品,调用本接口清除的溢出状态是进程级别的。
aclrtSynchronizeDevice
aclError aclrtSynchronizeDevice(void)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
阻塞当前线程,直到与当前线程绑定的Context所对应的Device完成运算。
参数说明
无
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtSynchronizeDeviceWithTimeout
aclError aclrtSynchronizeDeviceWithTimeout(int32_t timeout)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
阻塞当前线程,直到与当前线程绑定的Context所对应的Device完成运算。该接口是在aclrtSynchronizeDevice接口基础上进行了增强,支持用户设置超时时间,当应用程序异常时可根据所设置的超时时间自行退出,超时退出时本接口返回ACL_ERROR_RT_STREAM_SYNC_TIMEOUT。
多Device场景下,调用该接口等待的是当前Context对应的Device。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| timeout | 输入 | 接口的超时时间。 取值说明如下: - -1:表示永久等待,和接口aclrtSynchronizeDevice功能一样; - >0:配置具体的超时时间,单位是毫秒。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtGetDeviceInfo
aclError aclrtGetDeviceInfo(uint32_t deviceId, aclrtDevAttr attr, int64_t *value)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
获取指定Device的信息。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| deviceId | 输入 | Device ID。 用户调用aclrtGetDeviceCount接口获取可用的Device数量后,这个Device ID的取值范围:[0, (可用的Device数量-1)]。 |
| attr | 输入 | 属性。类型定义请参见aclrtDevAttr。 |
| value | 输出 | 属性值。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtDeviceGetStreamPriorityRange
aclError aclrtDeviceGetStreamPriorityRange(int32_t *leastPriority, int32_t *greatestPriority)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
查询硬件支持的Stream最低、最高优先级。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| leastPriority | 输出 | 最低优先级。 |
| greatestPriority | 输出 | 最高优先级。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtGetDeviceCapability
aclError aclrtGetDeviceCapability(int32_t deviceId, aclrtDevFeatureType devFeatureType, int32_t *value)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
查询支持的特性信息。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| deviceId | 输入 | Device ID。 用户调用aclrtGetDeviceCount接口获取可用的Device数量后,这个Device ID的取值范围:[0, (可用的Device数量-1)]。 |
| devFeatureType | 输入 | 特性类型。类型定义请参见aclrtDevFeatureType。 |
| value | 输出 | 特性是否支持。 - ACL_DEV_FEATURE_NOT_SUPPORT(0):不支持 - ACL_DEV_FEATURE_SUPPORT(1):支持 相关宏定义如下: #define ACL_DEV_FEATURE_SUPPORT 0x00000001 #define ACL_DEV_FEATURE_NOT_SUPPORT 0x00000000 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtGetDevicesTopo
aclError aclrtGetDevicesTopo(uint32_t deviceId, uint32_t otherDeviceId, uint64_t *value)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
获取两个Device之间的网络拓扑关系。
本接口不支持在Atlas 200I/500 A2 推理产品的Ascend RC形态下调用。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| deviceId | 输入 | 指定Device的ID。 用户调用aclrtGetDeviceCount接口获取可用的Device数量后,这个Device ID的取值范围:[0, (可用的Device数量-1)] |
| otherDeviceId | 输入 | 指定Device的ID。 用户调用aclrtGetDeviceCount接口获取可用的Device数量后,这个Device ID的取值范围:[0, (可用的Device数量-1)] |
| value | 输出 | 两个Device之间互联的拓扑关系。 - ACL_RT_DEVS_TOPOLOGY_HCCS:通过HCCS连接。HCCS是Huawei Cache Coherence System(华为缓存一致性系统),用于CPU/NPU之间的高速互联。 - ACL_RT_DEVS_TOPOLOGY_PIX:通过同一个PCIe Switch连接。 - ACL_RT_DEVS_TOPOLOGY_PHB:通过PCIe Host Bridge连接。 - ACL_RT_DEVS_TOPOLOGY_SYS:通过SMP(Symmetric Multiprocessing)连接,NUMA节点之间通过SMP互连。 - ACL_RT_DEVS_TOPOLOGY_SIO:片内连接方式,两个DIE之间通过该方式连接。 - ACL_RT_DEVS_TOPOLOGY_HCCS_SW:通过HCCS Switch连接。 - ACL_RT_DEVS_TOPOLOGY_PIB:预留值,暂不支持。 宏定义如下: #define ACL_RT_DEVS_TOPOLOGY_HCCS 0x01ULL #define ACL_RT_DEVS_TOPOLOGY_PIX 0x02ULL #define ACL_RT_DEVS_TOPOLOGY_PHB 0x08ULL #define ACL_RT_DEVS_TOPOLOGY_SYS 0x10ULL #define ACL_RT_DEVS_TOPOLOGY_SIO 0x20ULL #define ACL_RT_DEVS_TOPOLOGY_HCCS_SW 0x40ULL #define ACL_RT_DEVS_TOPOLOGY_PIB 0x04ULL |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtRegDeviceStateCallback
aclError aclrtRegDeviceStateCallback(const char *regName, aclrtDeviceStateCallback callback, void *args)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
注册Device状态回调函数,不支持重复注册。
当Device状态发生变化时(例如调用aclrtSetDevice、aclrtResetDevice等接口),Runtime模块会触发该回调函数的调用。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| regName | 输入 | 注册名称,保持唯一,不能为空,输入保证字符串以\0结尾。 |
| callback | 输入 | 回调函数。若callback不为NULL,则表示注册回调函数;若为NULL,则表示取消注册回调函数。 回调函数的函数原型为: typedef enum { ACL_RT_DEVICE_STATE_SET_PRE = 0, // 调用set接口(例如aclrtSetDevice)之前 ACL_RT_DEVICE_STATE_SET_POST, // 调用set接口(例如aclrtSetDevice)之后 ACL_RT_DEVICE_STATE_RESET_PRE, // 调用reset接口(例如aclrtResetDevice)之前 ACL_RT_DEVICE_STATE_RESET_POST, // 调用reset接口(例如aclrtResetDevice)之后 } aclrtDeviceState; typedef void (aclrtDeviceStateCallback)(uint32_t devId, aclrtDeviceState state, voidargs); |
| args | 输入 | 待传递给回调函数的用户数据的指针。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtGetLogicDevIdByUserDevId
aclError aclrtGetLogicDevIdByUserDevId(const int32_t userDevid, int32_t *const logicDevId)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
根据用户设备ID获取对应的逻辑设备ID。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| userDevid | 输入 | 用户设备ID。 |
| logicDevId | 输出 | 逻辑设备ID。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
用户设备ID、逻辑设备ID、物理设备ID之间的关系
若未设置ASCEND_RT_VISIBLE_DEVICES环境变量,逻辑设备ID与用户设备ID相同;若在非容器场景下,物理设备ID与逻辑设备ID相同。
下图以容器场景且设置ASCEND_RT_VISIBLE_DEVICES环境变量为例说明三者之间的关系:通过ASCEND_RT_VISIBLE_DEVICES环境变量设置的Device ID依次为1、2,对应的Device索引值依次为0、1,通过aclrtSetDevice接口设置的用户设备ID为0,即对应的Device索引值为0,因此用户设备ID=0对应逻辑设备ID=1,容器中的逻辑设备ID=1又映射到物理设备ID=6,因此最终是使用ID为6的物理设备进行计算。

关于ASCEND_RT_VISIBLE_DEVICES环境的详细介绍请参见《环境变量参考》。
aclrtGetUserDevIdByLogicDevId
aclError aclrtGetUserDevIdByLogicDevId(const int32_t logicDevId, int32_t *const userDevid)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
根据逻辑设备ID获取对应的用户设备ID。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| logicDevId | 输入 | 逻辑设备ID。 |
| userDevid | 输出 | 用户设备ID。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
用户设备ID、逻辑设备ID、物理设备ID之间的关系
若未设置ASCEND_RT_VISIBLE_DEVICES环境变量,逻辑设备ID与用户设备ID相同;若在非容器场景下,物理设备ID与逻辑设备ID相同。
下图以容器场景且设置ASCEND_RT_VISIBLE_DEVICES环境变量为例说明三者之间的关系:通过ASCEND_RT_VISIBLE_DEVICES环境变量设置的Device ID依次为1、2,对应的Device索引值依次为0、1,通过aclrtSetDevice接口设置的用户设备ID为0,即对应的Device索引值为0,因此用户设备ID=0对应逻辑设备ID=1,容器中的逻辑设备ID=1又映射到物理设备ID=6,因此最终是使用ID为6的物理设备进行计算。

关于ASCEND_RT_VISIBLE_DEVICES环境的详细介绍请参见《环境变量参考》。
aclrtGetLogicDevIdByPhyDevId
aclError aclrtGetLogicDevIdByPhyDevId(const int32_t phyDevId, int32_t *const logicDevId)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
根据物理设备ID获取对应的逻辑设备ID。
注意:本接口中逻辑设备ID的语义描述不正确,实际对应用户设备ID。为修复此问题,Runtime提供了aclrtGetUserDevIdByPhyDevId接口作为替代。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| phyDevId | 输入 | 物理设备ID。 |
| logicDevId | 输出 | 逻辑设备ID(参数实际为userDevId)。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
用户设备ID、逻辑设备ID、物理设备ID之间的关系
若未设置ASCEND_RT_VISIBLE_DEVICES环境变量,逻辑设备ID与用户设备ID相同;若在非容器场景下,物理设备ID与逻辑设备ID相同。
下图以容器场景且设置ASCEND_RT_VISIBLE_DEVICES环境变量为例说明三者之间的关系:通过ASCEND_RT_VISIBLE_DEVICES环境变量设置的Device ID依次为1、2,对应的Device索引值依次为0、1,通过aclrtSetDevice接口设置的用户设备ID为0,即对应的Device索引值为0,因此用户设备ID=0对应逻辑设备ID=1,容器中的逻辑设备ID=1又映射到物理设备ID=6,因此最终是使用ID为6的物理设备进行计算。

关于ASCEND_RT_VISIBLE_DEVICES环境的详细介绍请参见《环境变量参考》。
aclrtGetPhyDevIdByLogicDevId
aclError aclrtGetPhyDevIdByLogicDevId(const int32_t logicDevId, int32_t *const phyDevId)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
根据逻辑设备ID获取对应的物理设备ID。
注意:本接口中逻辑设备ID的语义描述不正确,实际对应用户设备ID。为修复此问题,Runtime提供了aclrtGetPhyDevIdByUserDevId接口作为替代。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| logicDevId | 输入 | 逻辑设备ID(参数实际为userDevId)。 |
| phyDevId | 输出 | 物理设备ID。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
用户设备ID、逻辑设备ID、物理设备ID之间的关系
若未设置ASCEND_RT_VISIBLE_DEVICES环境变量,逻辑设备ID与用户设备ID相同;若在非容器场景下,物理设备ID与逻辑设备ID相同。
下图以容器场景且设置ASCEND_RT_VISIBLE_DEVICES环境变量为例说明三者之间的关系:通过ASCEND_RT_VISIBLE_DEVICES环境变量设置的Device ID依次为1、2,对应的Device索引值依次为0、1,通过aclrtSetDevice接口设置的用户设备ID为0,即对应的Device索引值为0,因此用户设备ID=0对应逻辑设备ID=1,容器中的逻辑设备ID=1又映射到物理设备ID=6,因此最终是使用ID为6的物理设备进行计算。

关于ASCEND_RT_VISIBLE_DEVICES环境的详细介绍请参见《环境变量参考》。
aclrtGetUserDevIdByPhyDevId
aclError aclrtGetUserDevIdByPhyDevId(const int32_t phyDevId, int32_t *const userDevId)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
根据物理设备ID获取对应的用户设备ID。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| phyDevId | 输入 | 物理设备ID。 |
| userDevId | 输出 | 用户设备ID。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
用户设备ID、逻辑设备ID、物理设备ID之间的关系
若未设置ASCEND_RT_VISIBLE_DEVICES环境变量,逻辑设备ID与用户设备ID相同;若在非容器场景下,物理设备ID与逻辑设备ID相同。
下图以容器场景且设置ASCEND_RT_VISIBLE_DEVICES环境变量为例说明三者之间的关系:通过ASCEND_RT_VISIBLE_DEVICES环境变量设置的Device ID依次为1、2,对应的Device索引值依次为0、1,通过aclrtSetDevice接口设置的用户设备ID为0,即对应的Device索引值为0,因此用户设备ID=0对应逻辑设备ID=1,容器中的逻辑设备ID=1又映射到物理设备ID=6,因此最终是使用ID为6的物理设备进行计算。

关于ASCEND_RT_VISIBLE_DEVICES环境的详细介绍请参见《环境变量参考》。
aclrtGetPhyDevIdByUserDevId
aclError aclrtGetPhyDevIdByUserDevId(const int32_t userDevId, int32_t *const phyDevId)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
根据用户设备ID获取对应的物理设备ID。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| userDevId | 输入 | 用户设备ID。 |
| phyDevId | 输出 | 物理设备ID。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
用户设备ID、逻辑设备ID、物理设备ID之间的关系
若未设置ASCEND_RT_VISIBLE_DEVICES环境变量,逻辑设备ID与用户设备ID相同;若在非容器场景下,物理设备ID与逻辑设备ID相同。
下图以容器场景且设置ASCEND_RT_VISIBLE_DEVICES环境变量为例说明三者之间的关系:通过ASCEND_RT_VISIBLE_DEVICES环境变量设置的Device ID依次为1、2,对应的Device索引值依次为0、1,通过aclrtSetDevice接口设置的用户设备ID为0,即对应的Device索引值为0,因此用户设备ID=0对应逻辑设备ID=1,容器中的逻辑设备ID=1又映射到物理设备ID=6,因此最终是使用ID为6的物理设备进行计算。

关于ASCEND_RT_VISIBLE_DEVICES环境的详细介绍请参见《环境变量参考》。
aclrtDeviceGetUuid
aclError aclrtDeviceGetUuid(int32_t deviceId, aclrtUuid *uuid)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:不支持
- Atlas 推理系列产品:不支持
- Atlas 训练系列产品:不支持
- IPV350:不支持
功能说明
获取Device的唯一标识UUID(Universally Unique Identifier)。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| deviceId | 输入 | Device ID,与aclrtSetDevice接口中的Device ID保持一致。 |
| uuid | 输出 | Device的唯一标识。类型定义请参见aclrtUuid。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtDeviceGetBareTgid
aclError aclrtDeviceGetBareTgid(int32_t *pid)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
获取当前进程的进程ID。
本接口内部在获取进程ID时已适配物理机、虚拟机场景,用户只需调用本接口获取进程ID,再配置其它接口使用(配合流程请参见aclrtMemExportToShareableHandle),达到物理内存共享的目的。若用户不调用本接口、自行获取进程ID,可能会导致后续使用进程ID异常。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| pid | 输出 | 进程ID。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtDeviceGetHostAtomicCapabilities
aclError aclrtDeviceGetHostAtomicCapabilities(uint32_t* capabilities, const aclrtAtomicOperation* operations, const uint32_t count, int32_t deviceId)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
查询指定Device与Host之间支持的原子操作详情。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| capabilities | 输出 | 原子操作支持能力数组,数组长度与count参数值一致。数组中的每个元素是一个位掩码,位掩码的每一位代表对不同数据类型原子操作的支持情况,1表示支持,0表示不支持。类型定义请参见aclrtAtomicOperationCapability。 |
| operations | 输入 | 待查询的原子操作数组,数组长度与count参数值一致。类型定义请参见aclrtAtomicOperation。 |
| count | 输入 | 待查询的原子操作数量,其大小必须与capabilities以及operations参数数组的长度一致,否则可能会导致未定义的行为。 |
| deviceId | 输入 | Device ID。 用户调用aclrtGetDeviceCount接口获取可用的Device数量后,这个Device ID的取值范围:[0, (可用的Device数量-1)] |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtDeviceGetP2PAtomicCapabilities
aclError aclrtDeviceGetP2PAtomicCapabilities(uint32_t* capabilities, const aclrtAtomicOperation* operations, const uint32_t count, int32_t srcDeviceId, int32_t dstDeviceId)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
查询一个AI Server内两个Device之间支持的原子操作详情。AI Server通常是多个Device组成的服务器形态的统称。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| capabilities | 输出 | 原子操作支持能力数组,数组长度与count参数值一致。数组中的每个元素是一个位掩码,位掩码的每一位代表对不同数据类型原子操作的支持情况,1表示支持,0表示不支持。类型定义请参见aclrtAtomicOperationCapability。 |
| operations | 输入 | 待查询的原子操作数组,数组长度与count参数值一致。类型定义请参见aclrtAtomicOperation。 |
| count | 输入 | 待查询的原子操作数量,其大小必须与capabilities以及operations参数数组的长度一致,否则可能会导致未定义的行为。 |
| srcDeviceId | 输入 | Device ID。 用户调用aclrtGetDeviceCount接口获取可用的Device数量后,这个Device ID的取值范围:[0, (可用的Device数量-1)] |
| dstDeviceId | 输入 | Device ID。 用户调用aclrtGetDeviceCount接口获取可用的Device数量后,这个Device ID的取值范围:[0, (可用的Device数量-1)] |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtDeviceSetLimit
aclError aclrtDeviceSetLimit(aclrtDeviceLimit limit, size_t value)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:不支持
- Atlas 推理系列产品:不支持
- Atlas 训练系列产品:不支持
- IPV350:不支持
功能说明
设置当前Device的资源限制(如栈大小、printf FIFO大小等),作用于当前进程。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| limit | 输入 | 资源限制类型,取值见aclrtDeviceLimit枚举。 |
| value | 输入 | 限制值,单位为字节。取值范围与limit类型相关,详见约束说明。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
- 必须在
aclInit之后、aclrtSetDevice之前调用。 - 资源限制值为进程级共享,所有Device共用同一套配置,无法为不同Device设置不同的值。本接口内部固定使用Device 0进行设置,若设置了
ASCEND_RT_VISIBLE_DEVICES环境变量且不包含Device 0,则本接口及aclInit中通过acl.json设置栈大小/FIFO大小均会失败。此时请确保ASCEND_RT_VISIBLE_DEVICES包含Device 0。 - 多次
aclrtSetDevice不aclrtResetDevice:物理内存只分配一次,修改值后不会重新分配。 aclrtResetDevice后值保持:再aclrtSetDevice时按当前值重新分配。- Set/Get返回的是当前的瞬时值,不保证多线程并发安全。
ACL_RT_DEV_LIMIT_SIMD_STACK_SIZE:值需大于32768(32K)才生效,≤32K时保持默认不生效;>32K时向上取整到16KB边界。
- 对于Atlas A3 训练系列产品/Atlas A3 推理系列产品、Atlas A2 训练系列产品/Atlas A2 推理系列产品,
ACL_RT_DEV_LIMIT_SIMD_STACK_SIZE上限为192KB,超出上限在调用aclrtSetDevice时报错。不支持ACL_RT_DEV_LIMIT_SIMT_STACK_SIZE、ACL_RT_DEV_LIMIT_SIMT_DVG_WARP_STACK_SIZE、ACL_RT_DEV_LIMIT_SIMT_PRINTF_FIFO_SIZE枚举选项,调用时返回ACL_ERROR_RT_FEATURE_NOT_SUPPORT。
ACL_RT_DEV_LIMIT_SIMD_PRINTF_FIFO_SIZE_PER_CORE:取值范围为[1024(1KB), 67108864(64MB)],8B向上对齐,超范围返回ACL_ERROR_RT_PARAM_INVALID。
- 对于Ascend 950PR/Ascend 950DT,
ACL_RT_DEV_LIMIT_SIMD_STACK_SIZE上限为128KB,超出上限在调用aclrtSetDevice时报错。ACL_RT_DEV_LIMIT_SIMT_STACK_SIZE无上限校验,128B向上对齐后×32(每warp线程数),超大值对齐溢出时调用aclrtSetDevice可能因物理内存不足失败。ACL_RT_DEV_LIMIT_SIMT_DVG_WARP_STACK_SIZE无上限校验,128B向上对齐,超大值对齐溢出时调用aclrtSetDevice可能因物理内存不足失败。ACL_RT_DEV_LIMIT_SIMT_PRINTF_FIFO_SIZE取值范围为[1048576(1MB), 67108864(64MB)],8B向上对齐,超范围返回ACL_ERROR_RT_PARAM_INVALID。ACL_RT_DEV_LIMIT_SIMT_STACK_SIZE和ACL_RT_DEV_LIMIT_SIMT_DVG_WARP_STACK_SIZE不能同时为0,否则返回ACL_ERROR_RT_PARAM_INVALID。
aclrtDeviceGetLimit
aclError aclrtDeviceGetLimit(aclrtDeviceLimit limit, size_t *value)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:不支持
- Atlas 推理系列产品:不支持
- Atlas 训练系列产品:不支持
- IPV350:不支持
功能说明
查询当前Device的资源限制值。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| limit | 输入 | 资源限制类型,取值见aclrtDeviceLimit枚举。 |
| value | 输出 | 查询到的限制值,单位为字节。不能为nullptr。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
- 资源限制值为进程级共享,所有Device共用同一套配置,任意Device上查询返回相同值。
- Set/Get返回的是当前的瞬时值,不保证多线程并发安全。
- 在
aclrtSetDevice之后查询栈大小可能得到与实际物理分配不一致的值。例如:先调用aclrtDeviceSetLimit设置栈大小为A,再调用aclrtSetDevice生效,物理内存按A分配;此后再调用aclrtDeviceSetLimit修改为B(不重新调用aclrtSetDevice),此时调用aclrtDeviceGetLimit查询返回B,但实际物理内存仍按A分配。
- 对于Atlas A3 训练系列产品/Atlas A3 推理系列产品、Atlas A2 训练系列产品/Atlas A2 推理系列产品,查询
ACL_RT_DEV_LIMIT_SIMT_STACK_SIZE、ACL_RT_DEV_LIMIT_SIMT_DVG_WARP_STACK_SIZE、ACL_RT_DEV_LIMIT_SIMT_PRINTF_FIFO_SIZE时返回ACL_ERROR_RT_FEATURE_NOT_SUPPORT。
- 对于Ascend 950PR/Ascend 950DT,查询
ACL_RT_DEV_LIMIT_SIMT_STACK_SIZE返回对齐后×32的值(每warp线程数),如设置256则查询返回8192;查询ACL_RT_DEV_LIMIT_SIMT_DVG_WARP_STACK_SIZE返回对齐后的值(不乘线程数),如设置512则查询返回512。