产品 |
是否支持 |
|---|---|
Ascend 950PR/Ascend 950DT |
√ |
√ |
|
√ |
|
x |
|
√ |
|
x |
|
x |
初始化GM共享内存的值,完成初始化后才可以调用WaitPreBlock和NotifyNextBlock。
1 | __aicore__ inline void InitDetermineComputeWorkspace(GlobalTensor<int32_t>& gmWorkspace, LocalTensor<int32_t>& ubWorkspace) |
参数名称 |
输入/输出 |
含义 |
|---|---|---|
gmWorkspace |
输入 |
临时空间,初始化核间同步的共享内存,类型为GlobalTensor。 |
ubWorkspace |
输入 |
临时空间,用于操作gmWorkspace,类型为LocalTensor。 |
无
如下示例模拟8个核进行数据处理,使用确定性计算接口保证核间运行顺序,进行原子累加。
// m_gmWorkspace为初始化核间同步的共享内存,类型为GlobalTensor;ubWorkspace为操作m_gmWorkspace的临时空间,类型为LocalTensor int64_t m_tileCount = 256 * sizeof(int32_t); // 参与计算的元素总数所占的空间,单位为bytes // 初始化GM共享内存的值 AscendC::InitDetermineComputeWorkspace(m_gmWorkspace, ubWorkspace); // copy in // srcLocal为int32_t类型的LocalTensor,m_srcGlobal为int32_t的GlobalTensor AscendC::DataCopy(srcLocal, m_srcGlobal[m_tileCount], m_tileCount); // copy out // 调用WaitPreBlock读GM地址中的值,确认是否需要继续等待 AscendC::WaitPreBlock(m_gmWorkspace, ubWorkspace); // 开启原子累加 AscendC::SetAtomicAdd<int32_t>(); // m_dstGlobal为int32_t的GlobalTensor AscendC::DataCopy(m_dstGlobal[m_tileCount], srcLocal, m_tileCount); AscendC::DisableDmaAtomic(); // 调用NotifyNextBlock写GM地址,通知下一个核当前核的操作已完成,下一个核可以进行操作 AscendC::NotifyNextBlock(m_gmWorkspace, ubWorkspace);
//每个核的输入数据为: [1,1,1,1,1,...,1] // 256个1 //最终输出数据: [8,8,8,8,8,...,8] // 256个8