昇腾社区首页
中文
注册
开发者
下载

函数:create_stream

产品支持情况

产品

是否支持

Atlas A3 训练系列产品 / Atlas A3 推理系列产品

Atlas A2 训练系列产品 / Atlas A2 推理系列产品

Atlas 训练系列产品

Atlas 推理系列产品

Atlas 200I/500 A2 推理产品

功能说明

在当前进程或线程中创建一个Stream。

该接口不支持设置Stream的优先级;若不设置,Stream的优先级默认为最高。如需在创建Stream时设置优先级,请参见acl.rt.create_stream_with_config接口。

若不显式调用Stream创建接口,那么每个Context对应一个默认Stream,该默认Stream是调用acl.rt.set_device接口或acl.rt.create_context接口隐式创建的,默认Stream的优先级不支持设置,为最高优先级。默认Stream适合简单、无复杂交互逻辑的应用,但缺点在于,在多线程编程中,执行结果取决于线程调度的顺序。显式创建的Stream适合大型、复杂交互逻辑的应用,且便于提高程序的可读性、可维护性,推荐显式

函数原型

  • C函数原型
    1
    aclError aclrtCreateStream(aclrtStream *stream)
    
  • python函数
    1
    stream, ret = acl.rt.create_stream()
    

参数说明

返回值说明

返回值

说明

stream

int,返回创建的Stream的指针地址。

ret

int,错误码,返回0表示成功,返回其它值表示失败。

约束说明

  • 每个Context对应一个默认Stream,该默认Stream是调用acl.rt.set_device接口或acl.rt.create_context接口隐式创建的,默认Stream的优先级不支持设置,为最高优先级。推荐调用aclrtCreateStream接口显式创建Stream。
    • 隐式创建Stream:适合简单、无复杂交互逻辑的应用,但缺点在于,在多线程编程中,执行结果取决于线程调度的顺序。
    • 显式创建Stream:推荐显式,适合大型、复杂交互逻辑的应用,且便于提高程序的可读性、可维护性。
  • 不同型号的硬件支持的Stream最大数不同,如果已存在多个Stream(包含默认Stream、执行内部同步的Stream),则只能显式创建N个Stream,N = Stream最大数 - 已存在的Stream数。例如,Stream最大数为1024,已存在2个Stream,则只能调用本接口显式创建1022个Stream。

型号

Stream最大数

Atlas A3 训练系列产品 / Atlas A3 推理系列产品

1984

Atlas A2 训练系列产品 / Atlas A2 推理系列产品

1984

Atlas 200I/500 A2 推理产品

512

Atlas 200/300/500 推理产品

1024

Atlas 推理系列产品

1024

Ascend EP 形态下,存在执行内部同步的Stream。

Atlas 训练系列产品

2048

多进程场景下,若一次性创建的Stream数量总和接近2048,可能会出现创建Stream失败的情况,此时,建议进行以下操作:
  1. 清理冗余Stream,减少不必要的Stream。
  2. 调整代码逻辑,分批创建Stream。

    例如,第一批创建部分Stream,然后第二批再创建部分Stream,以此类推,直到Stream总数接近2048。

资源参考

接口调用流程与示例,请参见运行时资源申请与释放