Skip to content
版 本

SetSysWorkSpace

产 品 支 持 情 况

产 品

是 否 支 持

Ascend 950PR/Ascend 950DT

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

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

Atlas 200I/500 A2 推 理 产 品

x

Atlas 推 理 系 列 产 品AI Core

Atlas 推 理 系 列 产 品Vector Core

x

Atlas 训 练 系 列 产 品

Kirin X90

Kirin 9030

功 能 说 明

框 架 需 要 使 用 的workspace称 之 为 系 统workspace。Matmul Kernel侧 接 口等 高 阶API需 要 系 统workspace,所 以 在 使 用 该 类API时,需 要 调 用 该 接 口,设 置 系 统workspace的 指 针。采 用 工 程 化 算 子 开 发 方 式 或 者kernel直 调 方 式(开 启HAVE_WORKSPACE编 译 选 项)时,不 需 要 开 发 者 手 动 设 置,框 架 会 自 动 设 置。其 他 场 景 下,需 要 开 发 者 调 用SetSysWorkSpace进 行 设 置。

在kernel侧 调 用 该 接 口 前,需 要 在host侧 调 用GetLibApiWorkSpaceSize获 取 系 统workspace的 大 小,并 在host侧 设 置workspacesize大 小。样 例 如 下:

Text
// 用 户 自 定 义 的tiling函 数
static ge::graphStatus TilingFunc(gert::TilingContext* context)
{
    AddApiTiling tiling;
    ...
    size_t usrSize = 256; // 设 置 用 户 需 要 使 用 的workspace大 小。
    // 如 需 要 使 用 系 统workspace需 要 调 用GetLibApiWorkSpaceSize获 取 系 统workspace的 大 小。
    auto ascendcPlatform = platform_ascendc:: PlatformAscendC(context->GetPlatformInfo());
    uint32_t sysWorkspaceSize = ascendcPlatform.GetLibApiWorkSpaceSize();
    size_t *currentWorkspace = context->GetWorkspaceSizes(1); // 通 过 框 架 获 取workspace的 指 针,GetWorkspaceSizes入 参 为 所 需workspace的 块 数。当 前 限 制 使 用 一 块。
    currentWorkspace[0] = usrSize + sysWorkspaceSize; // 设 置 总 的workspace的 数 值 大 小,总 的workspace空 间 由 框 架 来 申 请 并 管 理。
    ...
}

函 数 原 型

Text
__aicore__ inline void SetSysWorkspace(GM_ADDR workspace)

参 数 说 明

表 1 接 口 参 数 说 明

参 数 名 称

输 入/输 出

描 述

workspace

输 入

核 函 数 传 入 的workspace的 指 针,包 括 系 统workspace和 用 户 使 用 的workspace。

约 束 说 明

返 回 值 说 明

调 用 示 例

Text
template<typename aType, typename bType, typename cType, typename biasType>
__aicore__ inline void MatmulLeakyKernel<aType, bType, cType, biasType>::Init(
    GM_ADDR a, GM_ADDR b, GM_ADDR bias, GM_ADDR c, GM_ADDR workspace, const TCubeTiling& tiling, float alpha)
{
    // 融 合 算 子 的 初 始 化 操 作
    // ...
    // workspace为 核 函 数 传 入 的GM指 针,用 于 设 置 系 统workspace
    AscendC::SetSysWorkspace(workspace);
    if (GetSysWorkSpacePtr() == nullptr) {
        return;
    }
    // 后 续Matmul指 令
    ...
}

免 责 声 明:本 站 内 容 由 asc-devkit 仓 master 分 支 自 动 编 译 生 成,属 于 持 续 开 发 版 本,可 能 存 在 缺 陷,仅 供 预 览 与 参 考。如 需 稳 定 及 商 用 资 料,请 查 阅 官 方 昇 腾 社 区