SHMEM Python API Reference

shmem.core API

对外接口

  1. 获取当前库版本。返回 ACLSHMEM 库的版本信息。

    def get_version() -> str
    

    参数/返回值

    方向

    含义

    返回值

    [out]

    版本信息组成的字符串,格式为 "libaclshmem_version=X.Y"

  2. 生成用于 UID 初始化的唯一 ID。应由单个进程(如 rank 0)调用,并通过广播分发给其他进程。

    def get_unique_id(empty: bool=False) -> UniqueID
    

    参数/返回值

    方向

    含义

    empty

    [in]

    预留参数,无实际意义

    返回值

    [out]

    代表一个唯一 ID 的句柄。若生成失败则引发 AclshmemError

  3. 使用唯一 ID 初始化 ACLSHMEM 运行时。这是一个集合(collective)操作,所有 PE 必须调用。

    def init(device: int=None, uid: UniqueID=None, rank: int=None, nranks: int=None, mpi_comm=None, initializer_method: str="", mem_size: int=None) -> None
    

    参数/返回值

    方向

    含义

    device

    [in]

    预留参数,无实际意义

    uid

    [in]

    用于初始化的唯一标识符,必填

    rank

    [in]

    当前进程在 ACLSHMEM 作业中的排名(0-based),必填

    nranks

    [in]

    参与 ACLSHMEM 作业的总进程数,必填

    mpi_comm

    [in]

    预留参数,无实际意义

    initializer_method

    [in]

    指定初始化方法,必须为 "uid"

    mem_size

    [in]

    每个 PE 分配的对称内存大小(字节),必填

    返回值

    -

    无返回值。参数缺失引发 AclshmemInvalid,初始化失败引发 AclshmemError

  4. 销毁 ACLSHMEM 运行时,释放所有资源。每个进程在完成所有 ACLSHMEM 操作后应调用一次。

    def finalize() -> None
    

    参数/返回值

    方向

    含义

    返回值

    -

    无返回值。若销毁失败则引发 AclshmemError

  5. 分配一个由 ACLSHMEM 支持的 NPU 缓冲区。这是一个集合(collective)操作,所有 PE 必须同步调用。

    def buffer(size, release=False, except_on_del=True) -> Buffer
    

    参数/返回值

    方向

    含义

    size

    [in]

    要分配的缓冲区大小(字节)

    release

    [in]

    预留参数,无实际意义

    except_on_del

    [in]

    预留参数,无实际意义

    返回值

    [out]

    通过地址和字节长度表示的原始内存缓冲区。若分配失败则引发 AclshmemError

  6. 释放由 buffer() 分配的缓冲区。这是一个集合(collective)操作。

    def free(buf: Buffer) -> None
    

    参数/返回值

    方向

    含义

    buf

    [in]

    需要释放的缓冲区

    返回值

    -

    无返回值

  7. 获取指定 PE 上目标缓冲区的对称地址,可用于直接引用该 PE 上的数据。

    def get_peer_buffer(buf: Buffer, pe: int) -> Buffer
    

    参数/返回值

    方向

    含义

    buf

    [in]

    远程可访问数据的对称地址

    pe

    [in]

    PE 编号

    返回值

    [out]

    指定 PE 上的远程对称地址缓冲区。若获取失败则引发 AclshmemError

  8. 从本地 PE 复制连续数据到指定 PE 的对称内存地址,并在完成后更新远程信号变量。当前仅支持 MTE(Memory Transfer Engine)。同步(blocking)接口。

    def put_signal(dst: Buffer, src: Buffer, signal_var: Buffer, signal_val: int, signal_operation: SignalOp, remote_pe: int=-1, stream=None) -> None
    

    参数/返回值

    方向

    含义

    dst

    [in]

    远程 PE 上目标数据的对称地址

    src

    [in]

    本地内存中的源数据地址

    signal_var

    [in]

    远程 PE 上待更新信号字的对称地址

    signal_val

    [in]

    用于更新信号变量的值

    signal_operation

    [in]

    信号变量更新操作。支持:SignalOp.SIGNAL_SET / SignalOp.SIGNAL_ADD

    remote_pe

    [in]

    远程 PE 编号,默认 -1

    stream

    [in]

    预留参数,忽略。底层使用默认流

    返回值

    -

    无返回值

  9. 在指定流上将本地 PE 的连续数据复制到远程 PE 的对称内存地址。调用者需同步流以确保传输完成。当前仅支持 MTE(Memory Transfer Engine)。非阻塞(non-blocking)接口。

    def put(dst: Buffer, src: Buffer, remote_pe: int=-1, stream: int=None) -> None
    

    参数/返回值

    方向

    含义

    dst

    [in]

    远程 PE 上目标数据的对称地址

    src

    [in]

    本地内存中的源数据地址

    remote_pe

    [in]

    远程 PE 编号,默认 -1

    stream

    [in]

    ACL 流对象,用于执行排序。传入 0None 使用默认流

    返回值

    -

    无返回值

  10. 在指定流上将远程 PE 对称内存中的连续数据复制到本地缓冲区。调用者需同步流以确保传输完成。当前仅支持 MTE(Memory Transfer Engine)。非阻塞(non-blocking)接口。

    def get(dst: Buffer, src: Buffer, remote_pe: int=-1, stream: int=None) -> None
    

    参数/返回值

    方向

    含义

    dst

    [in]

    本地内存中的目标数据地址

    src

    [in]

    远程 PE 上源数据的对称地址

    remote_pe

    [in]

    远程 PE 编号,默认 -1

    stream

    [in]

    ACL 流对象,用于执行排序。传入 0None 使用默认流

    返回值

    -

    无返回值

  11. 在指定的 PE 上对远程信号变量执行原子操作,操作在给定流上执行。调用者需同步流以观察结果。当前仅支持 MTE(Memory Transfer Engine)。非阻塞(non-blocking)接口。

    def signal_op(signal_var: Buffer, signal_val: int, signal_operation: SignalOp, remote_pe: int=-1, stream: int=None) -> None
    

    参数/返回值

    方向

    含义

    signal_var

    [in]

    目标 PE 可访问的信号变量的本地地址

    signal_val

    [in]

    用于原子操作的值

    signal_operation

    [in]

    对远程信号执行的操作。支持:SignalOp.SIGNAL_SET / SignalOp.SIGNAL_ADD

    remote_pe

    [in]

    待更新远程信号变量所在的 PE 编号,默认 -1

    stream

    [in]

    ACL 流对象,用于执行排序。传入 None 将引发 AclshmemInvalid 异常

    返回值

    -

    无返回值。若 streamNone 则引发 AclshmemInvalid

  12. 等待对称信号变量满足指定比较条件。等待操作在给定流上执行,调用在 host 侧立即返回。同步流后,条件 signal_var cmp signal_val 保证为真。当前仅支持 MTE(Memory Transfer Engine)。

    def signal_wait(signal_var: Buffer, signal_val: int, signal_operation: ComparisonType, stream: int) -> None
    

    参数/返回值

    方向

    含义

    signal_var

    [in]

    源信号变量的本地地址

    signal_val

    [in]

    与 signal_var 所指向值进行比较的值

    signal_operation

    [in]

    比较操作符。支持:ComparisonType.CMP_EQ / CMP_NE / CMP_GT / CMP_GE / CMP_LT / CMP_LE

    stream

    [in]

    ACL 流对象,用于执行排序。传入 None 将引发 AclshmemInvalid 异常

    返回值

    -

    无返回值。若 streamNone 则引发 AclshmemInvalid

  13. 确保所有先前发出的对称数据操作在给定流上完成。quiet 操作排入指定流中,调用在 host 侧立即返回;调用者需同步流以观测完成。当前仅支持 MTE(Memory Transfer Engine)。

    def quiet(stream: int) -> None
    

    参数/返回值

    方向

    含义

    stream

    [in]

    执行 quiet 操作的 ACL 流。必须传入有效流,None 将引发 AclshmemInvalid

    返回值

    -

    无返回值。若 streamNone 则引发 AclshmemInvalid

  14. 获取本地 PE 编号。

    def my_pe() -> int
    

    参数/返回值

    方向

    含义

    返回值

    [out]

    本地 PE 编号

  15. 获取当前进程在指定 team 中的 PE 编号。

    def team_my_pe(team) -> int
    

    参数/返回值

    方向

    含义

    team

    [in]

    目标 team 的 ID

    返回值

    [out]

    指定 team 中的 PE 编号,若 team 无效则返回 -1

  16. 获取程序中运行的 PE 总数(world team 维度)。

    def n_pes() -> int
    

    参数/返回值

    方向

    含义

    返回值

    [out]

    PE 总数

  17. 获取指定 team 中的 PE 总数。

    def team_n_pes(team) -> int
    

    参数/返回值

    方向

    含义

    team

    [in]

    目标 team 的 ID

    返回值

    [out]

    指定 team 中的 PE 数目,若 team 无效则返回 -1

  18. 查询共享内存模块的当前初始化状态。

    def init_status() -> InitStatus
    

    参数/返回值

    方向

    含义

    返回值

    [out]

    返回初始化状态枚举值:NOT_INITIALIZED / SHM_CREATED / INITIALIZED / INVALID

  1. UniqueId 类 — 用于 UID 初始化的唯一标识符句柄。

    class UniqueId:
        def __init__(self):
    

    属性

    方向

    含义

    version

    [out]

    版本信息

    my_rank

    [out]

    当前进程的 PE 编号

    n_pes

    [out]

    所有进程的 PE 总数

    internal

    [out]

    UID 的内部信息(字节)

  2. InitStatus 枚举类 — 共享内存模块的初始化状态。

    class InitStatus(Enum):
        NOT_INITIALIZED
        SHM_CREATED
        INITIALIZED
        INVALID
    

    枚举值

    含义

    NOT_INITIALIZED

    未初始化

    SHM_CREATED

    共享内存已创建

    INITIALIZED

    初始化完成

    INVALID

    无效状态

  3. SignalOp 枚举类 — 信号变量原子操作类型。

    class SignalOp(Enum):
        SIGNAL_SET
        SIGNAL_ADD
    

    枚举值

    含义

    SIGNAL_SET

    原子设置:将给定值写入远程信号

    SIGNAL_ADD

    原子加:将给定值加到远程信号现有值上

  4. ComparisonType 枚举类 — 信号等待比较操作类型。

    class ComparisonType(Enum):
        CMP_EQ
        CMP_NE
        CMP_GT
        CMP_GE
        CMP_LT
        CMP_LE
    

    枚举值

    含义

    CMP_EQ

    等于(==)

    CMP_NE

    不等于(!=)

    CMP_GT

    大于(>)

    CMP_GE

    大于等于(>=)

    CMP_LT

    小于(<)

    CMP_LE

    小于等于(<=)

shmem._pyshmem API

对外接口

  1. 初始化共享内存模块。这是一个集合(collective)操作。

    def aclshmem_init(mype, npes, mem_size) -> int
    

    参数/返回值

    方向

    含义

    mype

    [in]

    本地 PE 索引,范围 0 ~ npes-1

    npes

    [in]

    PE 总数

    mem_size

    [in]

    每个 PE 分配的内存大小(字节)

    返回值

    [out]

    成功返回 0,失败返回非零错误码

  2. 销毁共享内存模块,释放所有资源。

    def aclshmem_finalize(instance_id=0) -> None
    

    参数/返回值

    方向

    含义

    instance_id

    [in]

    实例 ID,默认 0

    返回值

    -

    无返回值

  3. 查询共享内存模块的当前初始化状态。

    def aclshmemx_init_status() -> InitStatus
    

    参数/返回值

    方向

    含义

    返回值

    [out]

    返回初始化状态枚举值。返回 INITIALIZED 表示初始化已完成

  4. 设置 TLS 私钥与密码,并注册解密回调函数。

    def set_conf_store_tls_key(tls_pk, tls_pk_pw, py_decrypt_func:Callable[[str], str]) -> int
    

    参数/返回值

    方向

    含义

    tls_pk

    [in]

    TLS 私钥内容

    tls_pk_pw

    [in]

    TLS 私钥密码内容

    py_decrypt_func

    [in]

    解密回调函数,接受 (str cipher_text) 返回 (str plain_text)

    返回值

    [out]

    成功返回 0,失败返回非零错误码

  5. 分配对称内存。这是一个集合(collective)操作,内嵌隐式 barrier。

    def aclshmem_malloc(size) -> int
    

    参数/返回值

    方向

    含义

    size

    [in]

    分配内存大小(字节)

    返回值

    [out]

    成功返回指向已分配内存的指针(int),若 size 为 0 或分配失败返回 0 并引发异常

  6. 分配零初始化的对称内存。集合操作,内嵌隐式 barrier。

    def aclshmem_calloc(nmemb, size) -> int
    

    参数/返回值

    方向

    含义

    nmemb

    [in]

    元素数量

    size

    [in]

    每个元素的大小(字节)

    返回值

    [out]

    成功返回指向已分配内存的指针(int),若 nmemb 或 size 为 0 返回 0 并引发异常

  7. 分配指定对齐方式的对称内存。集合操作,内嵌隐式 barrier。

    def aclshmem_align(alignment, size) -> int
    

    参数/返回值

    方向

    含义

    alignment

    [in]

    内存对齐要求(必须是 2 的幂)

    size

    [in]

    要分配的字节数

    返回值

    [out]

    成功返回指向已分配内存的指针(int),若分配失败则引发异常

  8. 释放由对称内存分配函数分配的内存空间。集合操作,内嵌隐式 barrier。

    def aclshmem_free(ptr) -> None
    

    参数/返回值

    方向

    含义

    ptr

    [in]

    要释放的内存指针

    返回值

    -

    无返回值

  9. 获取指定 PE 上对称地址的远程引用地址,可用于直接访问该 PE 上的数据。

    def aclshmem_ptr(ptr, peer) -> int
    

    参数/返回值

    方向

    含义

    ptr

    [in]

    远程可访问数据的对称地址

    peer

    [in]

    PE 编号

    返回值

    [out]

    成功返回远程对称地址(int),若输入地址非法则返回 0

  10. 获取 PE 编号(world team 维度)。

    def my_pe() -> int
    

    参数/返回值

    方向

    含义

    返回值

    [out]

    本地 PE 编号

  11. 获取指定 team 中的 PE 编号。

    def team_my_pe(team_id) -> int
    

    参数/返回值

    方向

    含义

    team_id

    [in]

    team 的句柄

    返回值

    [out]

    指定 team 中 PE 的编号,出错返回 -1

  12. 获取 PE 总数(world team 维度)。

    def pe_count() -> int
    

    参数/返回值

    方向

    含义

    返回值

    [out]

    PE 总数

  13. 获取指定 team 中的 PE 数量。

    def team_n_pes(team_id) -> int
    

    参数/返回值

    方向

    含义

    team_id

    [in]

    team 的句柄

    返回值

    [out]

    指定 team 中 PE 的数量,出错返回 -1

  14. 从现有父 team 中按步长拆分子 team。这是一个集合(collective)操作。

    def team_split_strided(parent, start, stride, size) -> int
    

    参数/返回值

    方向

    含义

    parent

    [in]

    父 team ID

    start

    [in]

    子 team 的起始 PE 编号

    stride

    [in]

    PE 编号之间的步长

    size

    [in]

    子 team 包含的 PE 数量

    返回值

    [out]

    成功返回新 team ID,出错返回 -1

  15. 基于二维笛卡尔空间从父 team 中拆分 team。集合操作。

    def team_split_2d(parent, x_range) -> tuple
    

    参数/返回值

    方向

    含义

    parent

    [in]

    父 team 句柄

    x_range

    [in]

    第一维度的元素数量

    返回值

    [out]

    成功返回 (x_team_id, y_team_id) 元组,失败引发异常

  16. 获取创建 team 时传入的 team 配置。

    def aclshmem_team_get_config(team) -> TeamConfig
    

    参数/返回值

    方向

    含义

    team

    [in]

    team ID

    返回值

    [out]

    成功返回 TeamConfig 对象,失败引发异常

  17. 将连续数据从本地 PE 复制到指定 PE 的对称地址。同步(blocking)接口。

    def aclshmem_putmem(dst, src, elem_size, pe) -> None
    

    参数/返回值

    方向

    含义

    dst

    [in]

    远程 PE 对称地址的指针

    src

    [in]

    本地源数据内存的指针

    elem_size

    [in]

    目标地址和源地址中元素的总字节数

    pe

    [in]

    远程 PE 编号

    返回值

    -

    无返回值

  18. 将对称内存中指定 PE 上的连续数据复制到本地 PE。同步(blocking)接口。

    def aclshmem_getmem(dst, src, elem_size, pe) -> None
    

    参数/返回值

    方向

    含义

    dst

    [in]

    本地目标内存的指针

    src

    [in]

    远程 PE 对称地址的指针

    elem_size

    [in]

    目标地址和源地址中元素的总字节数

    pe

    [in]

    远程 PE 编号

    返回值

    -

    无返回值

  19. 将本地内存中按 sst 步距排列的数据复制到指定 PE 对称内存的 dst 步距位置。同步(blocking)接口。

    def aclshmem_{TYPE}_iput(dest, source, dst, sst, nelems, pe)
    

    参数/返回值

    方向

    含义

    TYPE

    -

    数据类型:float / double / int8 / int16 / int32 / int64 / uint8 / uint16 / uint32 / uint64 / char

    dest

    [in]

    远程目标数据的对称内存指针

    source

    [in]

    本地源数据的指针

    dst

    [in]

    目标地址中连续元素之间的步长

    sst

    [in]

    源地址中连续元素之间的步长

    nelems

    [in]

    连续元素块的个数

    pe

    [in]

    远程 PE 编号

    返回值

    -

    无返回值

  20. 将远程 PE 对称内存中按 sst 步距排列的数据复制到本地 dst 步距位置。同步(blocking)接口。

    def aclshmem_{TYPE}_iget(dest, source, dst, sst, nelems, pe)
    

    参数/返回值

    方向

    含义

    TYPE

    -

    数据类型:float / double / int8 / int16 / int32 / int64 / uint8 / uint16 / uint32 / uint64 / char

    dest

    [in]

    本地目标数据的指针

    source

    [in]

    远程源数据的对称内存指针

    dst

    [in]

    目标地址中连续元素之间的步长

    sst

    [in]

    源地址中连续元素之间的步长

    nelems

    [in]

    连续元素块的个数

    pe

    [in]

    远程 PE 编号

    返回值

    -

    无返回值

  21. 将连续数据从本地 PE 复制到指定 PE 的对称内存地址。同步(blocking)接口。

    def aclshmem_put{BITS}(dst, src, elem_size, pe)
    

    参数/返回值

    方向

    含义

    BITS

    -

    数据位宽:8 / 16 / 32 / 64 / 128

    dst

    [in]

    远程 PE 对称地址的指针

    src

    [in]

    本地源数据内存的指针

    elem_size

    [in]

    目标地址和源地址中元素的总字节数

    pe

    [in]

    远程 PE 编号

    返回值

    -

    无返回值

  22. 将对称内存中指定 PE 上的连续数据复制到本地 PE。同步(blocking)接口。

    def aclshmem_get{BITS}(dst, src, elem_size, pe)
    

    参数/返回值

    方向

    含义

    BITS

    -

    数据位宽:8 / 16 / 32 / 64 / 128

    dst

    [in]

    本地目标内存的指针

    src

    [in]

    远程 PE 对称地址的指针

    elem_size

    [in]

    目标地址和源地址中元素的总字节数

    pe

    [in]

    远程 PE 编号

    返回值

    -

    无返回值

  23. 将本地内存中按 sst 步距排列的数据复制到指定 PE 的 dst 步距位置(位宽版本)。同步(blocking)接口。

    def aclshmem_iput{BITS}(dest, source, dst, sst, nelems, pe)
    

    参数/返回值

    方向

    含义

    BITS

    -

    数据位宽:8 / 16 / 32 / 64 / 128

    dest

    [in]

    远程目标数据的对称内存指针

    source

    [in]

    本地源数据的指针

    dst

    [in]

    目标地址中连续元素之间的步长

    sst

    [in]

    源地址中连续元素之间的步长

    nelems

    [in]

    连续元素块的个数

    pe

    [in]

    远程 PE 编号

    返回值

    -

    无返回值

  24. 将远程 PE 对称内存中按 sst 步距排列的数据复制到本地 dst 步距位置(位宽版本)。同步(blocking)接口。

    def aclshmem_iget{BITS}(dest, source, dst, sst, nelems, pe)
    

    参数/返回值

    方向

    含义

    BITS

    -

    数据位宽:8 / 16 / 32 / 64 / 128

    dest

    [in]

    本地目标数据的指针

    source

    [in]

    远程源数据的对称内存指针

    dst

    [in]

    目标地址中连续元素之间的步长

    sst

    [in]

    源地址中连续元素之间的步长

    nelems

    [in]

    连续元素块的个数

    pe

    [in]

    远程 PE 编号

    返回值

    -

    无返回值

  25. 返回库的主版本号和次版本号。

    def aclshmem_info_get_version() -> tuple
    

    参数/返回值

    方向

    含义

    返回值

    [out]

    返回 (major, minor) 元组

  26. 返回供应商定义的名称字符串。

    def aclshmem_info_get_name() -> str
    

    参数/返回值

    方向

    含义

    返回值

    [out]

    供应商定义的名称字符串

  27. 将一个 team 中的给定 PE 编号转换为另一个 team 中的对应 PE 编号。

    def team_translate_pe(src_team, src_pe, dest_team) -> int
    

    参数/返回值

    方向

    含义

    src_team

    [in]

    源 team ID

    src_pe

    [in]

    源 PE 编号

    dest_team

    [in]

    目标 team ID

    返回值

    [out]

    成功返回目标 team 中对应的 PE 编号,出错返回 -1

  28. 销毁一个 team。

    def team_destroy(team) -> None
    

    参数/返回值

    方向

    含义

    team

    [in]

    要销毁的 team ID

    返回值

    -

    无返回值

  29. 获取运行时 FFTS 配置。

    def get_ffts_config() -> str
    

    参数/返回值

    方向

    含义

    返回值

    [out]

    FFTS 配置字符串

  30. 将本地 PE 上的连续数据复制到指定 PE 的对称地址。异步(non-blocking)接口。

    def aclshmem_putmem_nbi(dst, src, elem_size, pe) -> None
    

    参数/返回值

    方向

    含义

    dst

    [in]

    远程 PE 对称地址的指针

    src

    [in]

    本地源数据内存的指针

    elem_size

    [in]

    目标地址和源地址中元素的总字节数

    pe

    [in]

    远程 PE 编号

    返回值

    -

    无返回值

  31. 将对称内存中指定 PE 上的连续数据复制到本地 PE。异步(non-blocking)接口。

    def aclshmem_getmem_nbi(dst, src, elem_size, pe) -> None
    

    参数/返回值

    方向

    含义

    dst

    [in]

    本地目标内存的指针

    src

    [in]

    远程 PE 对称地址的指针

    elem_size

    [in]

    目标地址和源地址中元素的总字节数

    pe

    [in]

    远程 PE 编号

    返回值

    -

    无返回值

  32. 将连续数据从本地 PE 复制到指定 PE 的对称内存地址(位宽版本)。异步(non-blocking)接口。

    def aclshmem_put{BITS}_nbi(dst, src, elem_size, pe)
    

    参数/返回值

    方向

    含义

    BITS

    -

    数据位宽:8 / 16 / 32 / 64 / 128

    dst

    [in]

    远程 PE 对称地址的指针

    src

    [in]

    本地源数据内存的指针

    elem_size

    [in]

    目标地址和源地址中元素的总字节数

    pe

    [in]

    远程 PE 编号

    返回值

    -

    无返回值

  33. 将对称内存中指定 PE 上的连续数据复制到本地 PE(位宽版本)。异步(non-blocking)接口。

    def aclshmem_get{BITS}_nbi(dst, src, elem_size, pe)
    

    参数/返回值

    方向

    含义

    BITS

    -

    数据位宽:8 / 16 / 32 / 64 / 128

    dst

    [in]

    本地目标内存的指针

    src

    [in]

    远程 PE 对称地址的指针

    elem_size

    [in]

    目标地址和源地址中元素的总字节数

    pe

    [in]

    远程 PE 编号

    返回值

    -

    无返回值

  34. 从本地 PE 复制连续数据到指定 PE 的对称地址,并在完成后更新远程信号变量。异步(non-blocking)接口。

    def aclshmemx_putmem_signal_nbi(dst, src, elem_size, sig, signal, sig_op, pe) -> None
    

    参数/返回值

    方向

    含义

    dst

    [in]

    远程 PE 对称地址的指针

    src

    [in]

    本地源数据内存的指针

    elem_size

    [in]

    目标地址和源地址中元素的总字节数

    sig

    [in]

    待更新信号字的对称地址

    signal

    [in]

    用于更新信号的值

    sig_op

    [in]

    信号更新操作。支持:ACLSHMEM_SIGNAL_SET / ACLSHMEM_SIGNAL_ADD

    pe

    [in]

    远程 PE 编号

    返回值

    -

    无返回值

  35. 从本地 PE 复制连续数据到指定 PE 的对称地址,并更新远程信号变量。同步(blocking)接口。

    def aclshmemx_putmem_signal(dst, src, elem_size, sig, signal, sig_op, pe) -> None
    

    参数/返回值

    方向

    含义

    dst

    [in]

    远程 PE 对称地址的指针

    src

    [in]

    本地源数据内存的指针

    elem_size

    [in]

    目标地址和源地址中元素的总字节数

    sig

    [in]

    待更新信号字的对称地址

    signal

    [in]

    用于更新信号的值

    sig_op

    [in]

    信号更新操作。支持:ACLSHMEM_SIGNAL_SET / ACLSHMEM_SIGNAL_ADD

    pe

    [in]

    远程 PE 编号

    返回值

    -

    无返回值

  36. 从本地 PE 复制连续数据到指定 PE 对称地址并更新远程信号(位宽版本)。异步(non-blocking)接口。

    def aclshmemx_put{BITS}_signal_nbi(dst, src, elem_size, sig, signal, sig_op, pe)
    

    参数/返回值

    方向

    含义

    BITS

    -

    数据位宽:8 / 16 / 32 / 64 / 128

    dst

    [in]

    远程 PE 对称地址的指针

    src

    [in]

    本地源数据内存的指针

    elem_size

    [in]

    目标地址和源地址中元素的总字节数

    sig

    [in]

    待更新信号字的对称地址

    signal

    [in]

    用于更新信号的值

    sig_op

    [in]

    信号更新操作。支持:ACLSHMEM_SIGNAL_SET / ACLSHMEM_SIGNAL_ADD

    pe

    [in]

    远程 PE 编号

    返回值

    -

    无返回值

  37. 从本地 PE 复制连续数据到指定 PE 对称地址并更新远程信号(位宽版本)。同步(blocking)接口。

    def aclshmemx_put{BITS}_signal(dst, src, elem_size, sig, signal, sig_op, pe)
    

    参数/返回值

    方向

    含义

    BITS

    -

    数据位宽:8 / 16 / 32 / 64 / 128

    dst

    [in]

    远程 PE 对称地址的指针

    src

    [in]

    本地源数据内存的指针

    elem_size

    [in]

    目标地址和源地址中元素的总字节数

    sig

    [in]

    待更新信号字的对称地址

    signal

    [in]

    用于更新信号的值

    sig_op

    [in]

    信号更新操作。支持:ACLSHMEM_SIGNAL_SET / ACLSHMEM_SIGNAL_ADD

    pe

    [in]

    远程 PE 编号

    返回值

    -

    无返回值

  38. 所有 PE 通过广播调用 exit() 退出进程。

    def aclshmem_global_exit(status) -> None
    

    参数/返回值

    方向

    含义

    status

    [in]

    传递给 exit() 的状态值

    返回值

    -

    无返回值

  39. 确保所有先前发出的对称数据操作在默认流上完成。quiet 操作排入默认流中,调用在 host 侧立即返回;调用者需同步默认流以观测完成。

    def aclshmem_quiet() -> None
    

    参数/返回值

    方向

    含义

    返回值

    -

    无返回值

  40. 获取指定 team 中的 PE 编号。

    def my_pe(team) -> int
    

    参数/返回值

    方向

    含义

    team

    [in]

    team ID

    返回值

    [out]

    指定 team 中 PE 的编号,出错返回 -1

  41. 获取指定 team 中的 PE 数量。

    def pe_count(team) -> int
    

    参数/返回值

    方向

    含义

    team

    [in]

    team ID

    返回值

    [out]

    指定 team 中 PE 的数目,出错返回 -1

  42. 等待信号变量满足比较条件(*sig_addr cmp cmp_val)时返回。阻塞(blocking)接口。

    def aclshmem_signal_wait_until(sig_addr, cmp, cmp_val) -> int
    

    参数/返回值

    方向

    含义

    sig_addr

    [in]

    源信号变量的本地地址

    cmp

    [in]

    比较操作符。支持:CMP_EQ / CMP_NE / CMP_GT / CMP_GE / CMP_LT / CMP_LE

    cmp_val

    [in]

    比较值

    返回值

    [out]

    满足条件时 sig_addr 的值

  43. 等待单个元素满足比较条件 ivar cmp cmp_val 后返回(类型化版本)。阻塞(blocking)接口。

    def aclshmem_{TYPE}_wait_until(ivar, cmp, cmp_val) -> None
    

    参数/返回值

    方向

    含义

    TYPE

    -

    数据类型:float / int8 / int16 / int32 / int64 / uint8 / uint16 / uint32 / uint64 / char

    ivar

    [in]

    对称内存中信号变量的指针

    cmp

    [in]

    比较操作符

    cmp_val

    [in]

    比较值

    返回值

    -

    无返回值

  44. 等待信号变量不等于给定值时返回。阻塞(blocking)接口。

    def aclshmem_{TYPE}_wait(ivar, cmp_val) -> None
    

    参数/返回值

    方向

    含义

    TYPE

    -

    数据类型:float / int8 / int16 / int32 / int64 / uint8 / uint16 / uint32 / uint64 / char

    ivar

    [in]

    对称内存中信号变量的指针

    cmp_val

    [in]

    比较值

    返回值

    -

    无返回值

  45. 等待数组中所有元素均满足比较条件 ivars[i] cmp cmp_val 后返回。阻塞(blocking)接口。

    def aclshmem_{TYPE}_wait_until_all(ivars_ptr, nelems, status_ptr, cmp, cmp_val) -> None
    

    参数/返回值

    方向

    含义

    TYPE

    -

    数据类型:float / int8 / int16 / int32 / int64 / uint8 / uint16 / uint32 / uint64 / char

    ivars_ptr

    [in]

    对称内存中长度为 nelems 的数组

    nelems

    [in]

    数组元素个数

    status_ptr

    [in]

    可选本地掩码数组,传入 0 表示不使用

    cmp

    [in]

    比较操作符

    cmp_val

    [in]

    比较值

    返回值

    -

    无返回值

  46. 等待数组中至少有一个元素满足比较条件 ivars[i] cmp cmp_val 后返回。阻塞(blocking)接口。

    def aclshmem_{TYPE}_wait_until_any(ivars_ptr, nelems, status_ptr, cmp, cmp_val, res_out_ptr) -> None
    

    参数/返回值

    方向

    含义

    TYPE

    -

    数据类型:float / int8 / int16 / int32 / int64 / uint8 / uint16 / uint32 / uint64 / char

    ivars_ptr

    [in]

    对称内存中长度为 nelems 的数组

    nelems

    [in]

    数组元素个数

    status_ptr

    [in]

    可选本地掩码数组,传入 0 表示不使用

    cmp

    [in]

    比较操作符

    cmp_val

    [in]

    比较值

    res_out_ptr

    [out]

    接收满足比较条件的元素索引值

    返回值

    -

    无返回值

  47. 等待数组中至少有一个元素满足比较条件,并返回所有满足条件的元素索引。阻塞(blocking)接口。

    def aclshmem_{TYPE}_wait_until_some(ivars_ptr, nelems, indices_ptr, status_ptr, cmp, cmp_val, res_out_ptr) -> None
    

    参数/返回值

    方向

    含义

    TYPE

    -

    数据类型:float / int8 / int16 / int32 / int64 / uint8 / uint16 / uint32 / uint64 / char

    ivars_ptr

    [in]

    对称内存中长度为 nelems 的数组

    nelems

    [in]

    数组元素个数

    indices_ptr

    [out]

    接收满足条件元素的索引值数组

    status_ptr

    [in]

    可选本地掩码数组,传入 0 表示不使用

    cmp

    [in]

    比较操作符

    cmp_val

    [in]

    比较值

    res_out_ptr

    [out]

    接收满足比较条件的元素个数

    返回值

    -

    无返回值

  48. 等待数组中所有元素均满足向量比较条件 ivars[i] cmp cmp_values[i] 后返回。阻塞(blocking)接口。

    def aclshmem_{TYPE}_wait_until_all_vector(ivars_ptr, nelems, status_ptr, cmp, cmp_values_ptr) -> None
    

    参数/返回值

    方向

    含义

    TYPE

    -

    数据类型:float / int8 / int16 / int32 / int64 / uint8 / uint16 / uint32 / uint64 / char

    ivars_ptr

    [in]

    对称内存中长度为 nelems 的数组

    nelems

    [in]

    数组元素个数

    status_ptr

    [in]

    可选本地掩码数组,传入 0 表示不使用

    cmp

    [in]

    比较操作符

    cmp_values_ptr

    [in]

    比较值数组

    返回值

    -

    无返回值

  49. 等待数组中至少有一个元素满足向量比较条件 ivars[i] cmp cmp_values[i] 后返回。阻塞(blocking)接口。

    def aclshmem_{TYPE}_wait_until_any_vector(ivars_ptr, nelems, status_ptr, cmp, cmp_values_ptr, res_out_ptr) -> None
    

    参数/返回值

    方向

    含义

    TYPE

    -

    数据类型:float / int8 / int16 / int32 / int64 / uint8 / uint16 / uint32 / uint64 / char

    ivars_ptr

    [in]

    对称内存中长度为 nelems 的数组

    nelems

    [in]

    数组元素个数

    status_ptr

    [in]

    可选本地掩码数组,传入 0 表示不使用

    cmp

    [in]

    比较操作符

    cmp_values_ptr

    [in]

    比较值数组

    res_out_ptr

    [out]

    接收满足比较条件的元素索引值

    返回值

    -

    无返回值

  50. 等待数组中至少有一个元素满足向量比较条件,并返回所有满足条件的元素索引。阻塞(blocking)接口。

    def aclshmem_{TYPE}_wait_until_some_vector(ivars_ptr, nelems, indices_ptr, status_ptr, cmp, cmp_values_ptr, res_out_ptr) -> None
    

    参数/返回值

    方向

    含义

    TYPE

    -

    数据类型:float / int8 / int16 / int32 / int64 / uint8 / uint16 / uint32 / uint64 / char

    ivars_ptr

    [in]

    对称内存中长度为 nelems 的数组

    nelems

    [in]

    数组元素个数

    indices_ptr

    [out]

    接收满足条件元素的索引值数组

    status_ptr

    [in]

    可选本地掩码数组,传入 0 表示不使用

    cmp

    [in]

    比较操作符

    cmp_values_ptr

    [in]

    比较值数组

    res_out_ptr

    [out]

    接收满足比较条件的元素个数

    返回值

    -

    无返回值

  51. 检查单个元素是否满足比较条件 ivar cmp cmp_value。非阻塞(non-blocking)查询接口。

    def aclshmem_{TYPE}_test(ivar, cmp, cmp_value, res_out_ptr) -> None
    

    参数/返回值

    方向

    含义

    TYPE

    -

    数据类型:float / int8 / int16 / int32 / int64 / uint8 / uint16 / uint32 / uint64 / char

    ivar

    [in]

    对称内存中信号变量的指针

    cmp

    [in]

    比较操作符

    cmp_value

    [in]

    比较值

    res_out_ptr

    [out]

    满足条件返回 1,否则返回 0

    返回值

    -

    无返回值,结果通过 res_out_ptr 返回

  52. 检查数组中是否至少有一个元素满足比较条件 ivars[i] cmp cmp_value。非阻塞(non-blocking)查询接口。

    def aclshmem_{TYPE}_test_any(ivars_ptr, nelems, status_ptr, cmp, cmp_value, res_out_ptr) -> None
    

    参数/返回值

    方向

    含义

    TYPE

    -

    数据类型:float / int8 / int16 / int32 / int64 / uint8 / uint16 / uint32 / uint64 / char

    ivars_ptr

    [in]

    对称内存中长度为 nelems 的数组

    nelems

    [in]

    数组元素个数

    status_ptr

    [in]

    可选本地掩码数组,传入 0 表示不使用

    cmp

    [in]

    比较操作符

    cmp_value

    [in]

    比较值

    res_out_ptr

    [out]

    满足条件的元素索引值;若无元素满足或测试集为空则返回 SIZE_MAX

    返回值

    -

    无返回值,结果通过 res_out_ptr 返回

  53. 检查数组中是否至少有一个元素满足比较条件,并返回所有满足条件的元素索引。非阻塞(non-blocking)查询接口。

    def aclshmem_{TYPE}_test_some(ivars_ptr, nelems, indices_ptr, status_ptr, cmp, cmp_value, res_out_ptr) -> None
    

    参数/返回值

    方向

    含义

    TYPE

    -

    数据类型:float / int8 / int16 / int32 / int64 / uint8 / uint16 / uint32 / uint64 / char

    ivars_ptr

    [in]

    对称内存中长度为 nelems 的数组

    nelems

    [in]

    数组元素个数

    indices_ptr

    [out]

    接收满足条件元素的索引值数组

    status_ptr

    [in]

    可选本地掩码数组,传入 0 表示不使用

    cmp

    [in]

    比较操作符

    cmp_value

    [in]

    比较值

    res_out_ptr

    [out]

    满足条件的元素个数;若测试集为空则返回 0

    返回值

    -

    无返回值,结果通过 res_out_ptrindices_ptr 返回

  54. 检查数组中所有元素是否均满足向量比较条件 ivars[i] cmp cmp_values[i]。非阻塞(non-blocking)查询接口。

    def aclshmem_{TYPE}_test_all_vector(ivars_ptr, nelems, status_ptr, cmp, cmp_values_ptr, res_out_ptr) -> None
    

    参数/返回值

    方向

    含义

    TYPE

    -

    数据类型:float / int8 / int16 / int32 / int64 / uint8 / uint16 / uint32 / uint64 / char

    ivars_ptr

    [in]

    对称内存中长度为 nelems 的数组

    nelems

    [in]

    数组元素个数

    status_ptr

    [in]

    可选本地掩码数组,传入 0 表示不使用

    cmp

    [in]

    比较操作符

    cmp_values_ptr

    [in]

    比较值数组

    res_out_ptr

    [out]

    全部满足或 nelems 为 0 返回 1,否则返回 0

    返回值

    -

    无返回值,结果通过 res_out_ptr 返回

  55. 检查数组中是否至少有一个元素满足向量比较条件 ivars[i] cmp cmp_values[i]。非阻塞(non-blocking)查询接口。

    def aclshmem_{TYPE}_test_any_vector(ivars_ptr, nelems, status_ptr, cmp, cmp_values_ptr, res_out_ptr) -> None
    

    参数/返回值

    方向

    含义

    TYPE

    -

    数据类型:float / int8 / int16 / int32 / int64 / uint8 / uint16 / uint32 / uint64 / char

    ivars_ptr

    [in]

    对称内存中长度为 nelems 的数组

    nelems

    [in]

    数组元素个数

    status_ptr

    [in]

    可选本地掩码数组,传入 0 表示不使用

    cmp

    [in]

    比较操作符

    cmp_values_ptr

    [in]

    比较值数组

    res_out_ptr

    [out]

    满足条件的第一个元素索引值;若无元素满足或测试集为空则返回 SIZE_MAX

    返回值

    -

    无返回值,结果通过 res_out_ptr 返回

  56. 检查数组中是否至少有一个元素满足向量比较条件,并返回所有满足条件的元素索引。非阻塞(non-blocking)查询接口。

    def aclshmem_{TYPE}_test_some_vector(ivars_ptr, nelems, indices_ptr, status_ptr, cmp, cmp_values_ptr, res_out_ptr) -> None
    

    参数/返回值

    方向

    含义

    TYPE

    -

    数据类型:float / int8 / int16 / int32 / int64 / uint8 / uint16 / uint32 / uint64 / char

    ivars_ptr

    [in]

    对称内存中长度为 nelems 的数组

    nelems

    [in]

    数组元素个数

    indices_ptr

    [out]

    接收满足条件元素的索引值数组

    status_ptr

    [in]

    可选本地掩码数组,传入 0 表示不使用

    cmp

    [in]

    比较操作符

    cmp_values_ptr

    [in]

    比较值数组

    res_out_ptr

    [out]

    满足条件的元素个数;若测试集为空则返回 0

    返回值

    -

    无返回值,结果通过 res_out_ptrindices_ptr 返回

  57. 在指定流上将连续数据从本地 PE 复制到指定 PE 的对称地址。非阻塞(non-blocking)接口。

    def aclshmemx_putmem_on_stream(dst, src, elem_size, pe, stream) -> None
    

    参数/返回值

    方向

    含义

    dst

    [in]

    远程 PE 对称地址的指针

    src

    [in]

    本地源数据内存的指针

    elem_size

    [in]

    目标地址和源地址中元素的总字节数

    pe

    [in]

    远程 PE 编号

    stream

    [in]

    ACL 流对象。传入 0None 使用默认流

    返回值

    -

    无返回值

  58. 在指定流上将对称内存中指定 PE 上的连续数据复制到本地 PE。非阻塞(non-blocking)接口。

    def aclshmemx_getmem_on_stream(dst, src, elem_size, pe, stream) -> None
    

    参数/返回值

    方向

    含义

    dst

    [in]

    本地目标内存的指针

    src

    [in]

    远程 PE 对称地址的指针

    elem_size

    [in]

    目标地址和源地址中元素的总字节数

    pe

    [in]

    远程 PE 编号

    stream

    [in]

    ACL 流对象。传入 0None 使用默认流

    返回值

    -

    无返回值

  59. 在指定流上对远程信号变量执行原子操作。当前仅支持 MTE。非阻塞(non-blocking)接口。

    def aclshmemx_signal_op_on_stream(sig, signal, sig_op, pe, stream) -> None
    

    参数/返回值

    方向

    含义

    sig

    [in]

    目标 PE 上可访问的信号变量的本地地址

    signal

    [in]

    用于原子操作的值

    sig_op

    [in]

    对远程信号执行的操作。支持:ACLSHMEM_SIGNAL_SET / ACLSHMEM_SIGNAL_ADD

    pe

    [in]

    远程 PE 编号

    stream

    [in]

    ACL 流对象。传入 0None 使用默认流

    返回值

    -

    无返回值

  60. 非阻塞(non-blocking)接口。在指定流上等待信号变量满足比较条件。调用在 host 侧立即返回,等待在流上执行。调用者需同步流以确保等待完成。当前仅支持 MTE。

    def aclshmemx_signal_wait_until_on_stream(sig, cmp, cmp_val, stream) -> None
    

    参数/返回值

    方向

    含义

    sig

    [in]

    源信号变量的本地地址

    cmp

    [in]

    比较操作符。支持:ACLSHMEM_CMP_EQ / CMP_NE / CMP_GT / CMP_GE / CMP_LT / CMP_LE

    cmp_val

    [in]

    与 sig 所指向值进行比较的值

    stream

    [in]

    ACL 流对象,用于执行排序。必须传入有效流

    返回值

    -

    无返回值

  61. 确保所有先前发出的对称数据操作在给定流上完成。quiet 操作排入指定流中,调用在 host 侧立即返回;调用者需同步流以观测完成。当前仅支持 MTE。

    def aclshmemx_quiet_on_stream(stream) -> None
    

    参数/返回值

    方向

    含义

    stream

    [in]

    执行 quiet 操作的 ACL 流。传入 0None 使用默认流

    返回值

    -

    无返回值

  1. OpEngineType 枚举类 — 数据传输引擎类型。

    class OpEngineType(Enum):
        MTE
        SDMA
        ROCE
        UDMA
    

    枚举值

    含义

    MTE

    Memory Transfer Engine

    SDMA

    System DMA

    ROCE

    RDMA over Converged Ethernet

    UDMA

    Unified DMA

  2. OptionalAttr 类 — 初始化可选属性配置。

    class OptionalAttr:
        def __init__(self):
    

    属性

    方向

    含义

    version

    [in]

    配置版本号

    data_op_engine_type

    [in]

    数据传输引擎类型(OpEngineType 枚举值)

    shm_init_timeout

    [in]

    init 操作的超时时间

    shm_create_timeout

    [in]

    create 操作的超时时间

    control_operation_timeout

    [in]

    控制操作的超时时间

    sockFd

    [in]

    socket 文件描述符,默认 -1

  3. InitAttr 类 — 初始化属性配置。

    class InitAttr:
        def __init__(self):
    

    属性

    方向

    含义

    my_rank

    [in]

    当前进程的 PE 编号

    n_ranks

    [in]

    PE 总数

    ip_port

    [in]

    通信服务器的 IP 和端口

    local_mem_size

    [in]

    当前 PE 分配的对称内存大小(字节)

    option_attr

    [in]

    OptionalAttr 可选属性配置

  4. TeamConfig 类 — Team 配置。

    class TeamConfig:
    

    属性

    方向

    含义

    num_contexts

    [in]

    一个 team 中可以同时运行的上下文数量

  5. UniqueId 类 — UID 初始化的唯一标识符句柄。

    class UniqueId:
        def __init__(self):
    

    属性

    方向

    含义

    version

    [out]

    版本信息

    my_pe

    [out]

    当前进程的 PE 编号

    n_pes

    [out]

    所有进程的 PE 总数

    internal

    [out]

    UID 的内部信息(字节)

  6. InitStatus 枚举类 — 共享内存模块初始化状态。

    class InitStatus(Enum):
        NOT_INITIALIZED
        SHM_CREATED
        INITIALIZED
        INVALID
    

    枚举值

    含义

    NOT_INITIALIZED

    未初始化

    SHM_CREATED

    共享内存已创建

    INITIALIZED

    初始化完成

    INVALID

    无效状态

  7. SignalOp 枚举类 — 信号变量原子操作类型。

    class SignalOp(Enum):
        SIGNAL_SET
        SIGNAL_ADD
    

    枚举值

    含义

    SIGNAL_SET

    原子设置:将给定值写入远程信号

    SIGNAL_ADD

    原子加:将给定值加到远程信号现有值上

  8. CmpOp 枚举类 — 信号比较操作类型。

    class CmpOp(Enum):
        CMP_EQ
        CMP_NE
        CMP_GT
        CMP_GE
        CMP_LT
        CMP_LE
    

    枚举值

    含义

    CMP_EQ

    等于(==)

    CMP_NE

    不等于(!=)

    CMP_GT

    大于(>)

    CMP_GE

    大于等于(>=)

    CMP_LT

    小于(<)

    CMP_LE

    小于等于(<=)