4. Device管理

本章节描述 CANN Runtime 的设备管理接口,用于设备的设置、重置、查询、同步及 P2P 访问等操作。

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上的资源时,可调用aclrtResetDeviceaclrtResetDeviceForce接口及时释放本进程使用的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状态发生变化时(例如调用aclrtSetDeviceaclrtResetDevice等接口),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。
  • 多次aclrtSetDeviceaclrtResetDevice:物理内存只分配一次,修改值后不会重新分配。
  • 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_SIZEACL_RT_DEV_LIMIT_SIMT_DVG_WARP_STACK_SIZEACL_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_INVALIDACL_RT_DEV_LIMIT_SIMT_STACK_SIZEACL_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_SIZEACL_RT_DEV_LIMIT_SIMT_DVG_WARP_STACK_SIZEACL_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。