当前位置: 首页 > news >正文

CANN/metadef算子平铺构建

Build

【免费下载链接】metadefAscend Metadata Definition项目地址: https://gitcode.com/cann/metadef

函数功能

根据之前的设置,构建TilingContext,返回一个ContextHolder<TilingContext>对象。

函数原型

ContextHolder<TilingContext> Build()

参数说明

返回值说明

返回一个 ContextHolder<TilingContext>对象。通过调用GetContext()方法可获取TilingContext指针。

约束说明

  • 所有通过指针传入的参数,其内存所有权归调用者所有;调用者必须确保这些指针在ContextHolder对象的整个生命周期内有效。
  • ContextHolder析构时会自动释放内部上下文资源。请勿手动释放GetContext()返回的指针。

调用示例

#include "base/context_builder/op_tiling_context_builder.h" auto workspace_size_holer = gert::ContinuousVector::Create<size_t>(4096); auto ws_ptr = reinterpret_cast<gert::ContinuousVector *>(workspace_size_holer.get()); gert::Shape shape_0{1, 1, 1, 1, 1}; gert::Shape shape_1{10, 10, 10, 10, 20}; gert::Shape shape_2{1, 1, 1, 1, 1}; gert::Shape shape_3{10, 10, 10, 10, 20}; gert::Shape resultShape{10, 10, 10, 10, 20}; gert::StorageShape x({1, 1, 1, 1, 1}, {1, 1, 1, 1, 1}); gert::StorageShape resultIn({10, 10, 10, 10, 20}, {10, 10, 10, 10, 20}); gert::StorageShape gamma({1, 1, 1, 1, 1}, {1, 1, 1, 1, 1}); gert::StorageShape beta({10, 10, 10, 10, 20}, {10, 10, 10, 10, 20}); gert::StorageShape result({10, 10, 10, 10, 20}, {10, 10, 10, 10, 20}); uint8_t data_x[1] = {9}; gert::Tensor x_tensor(x, {ge::FORMAT_NCDHW, ge::FORMAT_RESERVED, ExpandDimsType()}, TensorPlacement::kOnHost, ge::DT_FLOAT, (void *) data_x); gert::Tensor resultIn_tensor(resultIn, {ge::FORMAT_NCDHW, ge::FORMAT_RESERVED, ExpandDimsType()}, TensorPlacement::kOnHost, ge::DT_FLOAT, nullptr); gert::Tensor gammax_tensor(gamma, {ge::FORMAT_NCDHW, ge::FORMAT_RESERVED, ExpandDimsType()}, TensorPlacement::kOnHost, ge::DT_FLOAT, nullptr); gert::Tensor beta_tensor(beta, {ge::FORMAT_NCDHW, ge::FORMAT_RESERVED, ExpandDimsType()}, TensorPlacement::kOnHost, ge::DT_FLOAT, nullptr); gert::Tensor result_tensor(result, {ge::FORMAT_NCDHW, ge::FORMAT_RESERVED, ExpandDimsType()}, TensorPlacement::kOnHost, ge::DT_FLOAT, nullptr); uint8_t tmp_compile_info[] = XX; // XX代表Fake数据 uint8_t tmp_platform_info[] = XX;// XX代表Fake数据 int32_t deterministic = 1; OpTilingContextBuilder ctx_builder; auto holder = ctx_builder.OpName("tmp") .OpType("DIY") .IONum(4, 1) .AppendAttr(int64_t(1)) .AppendAttr(bool(true)) .AppendAttr(float(0.3)) .AppendAttr(AscendString("my_info")) .AppendAttr(std::vector<bool>({true, false, true})) .AppendAttr(std::vector<int64_t>({1, 2, 3})) .AppendAttr(std::vector<float>({0.1, 0.2, 0.3})) .AppendAttr(std::vector<AscendString>({"123", "234"})) .AppendAttr(std::vector<std::vector<int64_t>>({{1, 2, 3}, {4, 5, 6}})) .TilingDataSize(100) .Workspace(ws_ptr) .CompileInfo(tmp_compile_info) .Deterministic(deterministic) .PlatformInfo(tmp_platform_info) .InputTensors({&x_tensor, &resultIn_tensor, &gammax_tensor, &beta_tensor}) .OutputTensors({&result_tensor}) .Build(); auto ctx = holder.GetContext(); EXPECT_NE(ctx, nullptr); auto ctx_compute_node_info = ctx->GetComputeNodeInfo(); EXPECT_NE(ctx_compute_node_info, nullptr); EXPECT_EQ(ctx->GetCompileInfo(), tmp_compile_info); EXPECT_EQ(ctx->GetInputShape(0)->GetOriginShape(), shape_0); EXPECT_EQ(ctx->GetInputShape(0)->GetStorageShape(), shape_0); EXPECT_EQ(ctx->GetInputTensor(0)->GetAddr(), data_x); EXPECT_EQ(ctx->GetInputTensor(0), &x_tensor); EXPECT_EQ(ctx->GetInputTensor(0)->GetStorageShape(), x_tensor.GetStorageShape()); EXPECT_EQ(ctx->GetInputTensor(0)->GetOriginShape(), x_tensor.GetOriginShape()); EXPECT_EQ(ctx->GetInputTensor(0)->GetSize(), x_tensor.GetSize()); EXPECT_EQ(ctx->GetOutputShape(0)->GetOriginShape(), resultShape); EXPECT_EQ(ctx->GetOutputShape(0)->GetStorageShape(), resultShape); EXPECT_EQ(static_cast<void *>(ctx->GetWorkspaceSizes(4096)), static_cast<const void *>(ws_ptr->GetData())); EXPECT_EQ(static_cast<void *>(ctx->GetPlatformInfo()), static_cast<void *>(tmp_platform_info)); EXPECT_EQ(ctx->GetDeterministic(), deterministic); EXPECT_EQ(static_cast<void *>(ctx->GetRawTilingData()), static_cast<void *>(tmp_tiling_data.get())); EXPECT_EQ(*(ctx->GetAttrs()->GetInt(0)), 1); EXPECT_EQ(*(ctx->GetAttrs()->GetBool(1)), true); EXPECT_FLOAT_EQ(*(ctx->GetAttrs()->GetFloat(2)), 0.3); auto str_ptr = ctx->GetAttrs()->GetStr(3); EXPECT_EQ(strcmp(str_ptr, "my_info"), 0); auto bool_vec = ctx->GetAttrs()->GetAttrPointer<TypedContinuousVector<bool>>(4); EXPECT_EQ(bool_vec->GetData()[0], true); EXPECT_EQ(bool_vec->GetData()[1], false); EXPECT_EQ(bool_vec->GetData()[2], true); EXPECT_EQ(ctx->GetAttrs()->GetListInt(5)->GetData()[0], 1); EXPECT_EQ(ctx->GetAttrs()->GetListInt(5)->GetData()[1], 2); EXPECT_EQ(ctx->GetAttrs()->GetListInt(5)->GetData()[2], 3); EXPECT_FLOAT_EQ(ctx->GetAttrs()->GetListFloat(6)->GetData()[0], 0.1); EXPECT_FLOAT_EQ(ctx->GetAttrs()->GetListFloat(6)->GetData()[1], 0.2); EXPECT_FLOAT_EQ(ctx->GetAttrs()->GetListFloat(6)->GetData()[2], 0.3); auto int_vec_vec = ctx->GetAttrs()->GetListListInt(8); EXPECT_EQ(((int64_t *) (int_vec_vec->Get(0)->GetData()))[0], 1); EXPECT_EQ(((int64_t *) (int_vec_vec->Get(0)->GetData()))[1], 2); EXPECT_EQ(((int64_t *) (int_vec_vec->Get(0)->GetData()))[2], 3); EXPECT_EQ(((int64_t *) (int_vec_vec->Get(1)->GetData()))[0], 4); EXPECT_EQ(((int64_t *) (int_vec_vec->Get(1)->GetData()))[1], 5); EXPECT_EQ(((int64_t *) (int_vec_vec->Get(1)->GetData()))[2], 6);

【免费下载链接】metadefAscend Metadata Definition项目地址: https://gitcode.com/cann/metadef

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/782733/

相关文章:

  • 如何用Sunshine搭建个人游戏串流服务器:跨设备畅玩3A大作的完整指南
  • 浅谈GaussDB (DWS)技术【玩转PB级数仓GaussDB(DWS)】
  • 2026年不干胶标签与办公用纸一站式采购完全指南 - 优质企业观察收录
  • PotPlayer字幕翻译插件深度解析:打破语言壁垒的专业解决方案
  • 根脉——溯源
  • B站视频转文字终极指南:如何用AI技术快速提取视频内容并生成文字稿
  • PotPlayer字幕翻译插件架构解析:百度翻译API集成与性能优化指南
  • InsMatrixAutomation 日志系统设计深度解析:从 Loguru 到企业级日志实践
  • CANN Alpamayo-R1智驾优化
  • 2026法治教育展厅怎么做?未成年法治教育展厅展馆设计 - 新闻快传
  • 微信立减金闲置率近五成,教你合规盘活你的支付权益 - 团团收购物卡回收
  • CANN算子库GeGluV3算子
  • Kubernetes存储深度解析与实践
  • nvm安装node的目录
  • 职场人的「深夜困境」:为什么我选择用AI社交平台倾诉
  • 湖州黄金回收怎么选?6 大品牌覆盖吴兴 / 南浔 / 德清 / 长兴 / 安吉,免费上门 + 实时金价 + 当场结款 - 金掌柜黄金回收
  • 江阴黄金回收认准这 6 家!7 街道 10 乡镇全覆盖,上门秒结无套路 - 金掌柜黄金回收
  • CANN多模态推理拉起架构设计
  • 五大数据采集服务平台深度测评:从全网公开数据到 AI 专用数据集
  • CANN/sip Strmm三角矩阵乘法
  • 20万奖金!昇腾 Model‑Agent 模型适配大赛邀你来战
  • 学生党 Obsidian 同步最省心方案:坚果云官方插件 Nutstore Sync 完整教程 - nut-king
  • 墨观|水性凹版油墨行业资讯:法规收紧与技术突破并行,规模化量产成竞争分水岭
  • 从视频中智能提取PPT:5分钟快速上手教程
  • 透明计费与用量预警,Taotoken如何帮助个人开发者控制预算
  • Kubernetes监控与可观测性深度解析与实践
  • Video DownloadHelper CoApp终极指南:从零开始轻松下载网络视频
  • 重庆桥梁加固行业深度测评:四大企业实力对比与选择指南 - 新闻快传
  • 亨得利高端腕表服务最新公告:2026年质保升级至24个月、官方辟谣汇总与全国直营服务体系权威解读 - 亨得利腕表维修中心
  • 生态与文明:无中心与有中心的辩证 ——论智能体如何在多样性中凝聚方向