下载
中文
注册

AllocMessage

功能说明

AIV申请消息队列的空间,用于存放消息结构体,返回当前申请的消息空间的地址。消息队列的深度固定为4,申请消息空间的顺序为自上而下,然后循环。当消息队列指针指向的消息空间为FREE状态,可以进行AllocMessage,否则不允许分配新的消息空间。

图1 AllocMessage示意图

函数原型

1
2
template <PipeMode pipeMode = PipeMode::SCALAR_MODE>             
__aicore__ inline __gm__ CubeMsgType *AllocMessage()

参数说明

表1 模板参数说明

参数名

描述

pipeMode

用于配置发送消息的执行单元。PipeMode类型,其定义如下:

1
2
3
4
5
enum class PipeMode : uint8_t { 
  SCALAR_MODE = 0, // Scalar执行单元往GM上写消息。
  MTE3_MODE = 1, // 使用MTE3单元往GM上写消息。
  MAX 
}

注意,pipeMode为MTE3_MODE时,后续只能使用PostMessage接口发送消息。同时两个接口AllocMessage与PostMessage的模板参数pipeMode需要相同。

返回值

当前申请的消息空间的地址。

支持的型号

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

约束说明

调用示例

1
2
3
auto queIdx = AscendC::GetBlockIdx();
qk.AssignQueue(queIdx);
auto msgPtr = qk.AllocMessage();        // 绑定队列后,可以申请到一个消息空间,消息空间地址为msgPtr。