/**
* Copyright (c) 2026 Huawei Technologies Co., Ltd.
* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
* CANN Open Software License Agreement Version 2.0 (the "License").
* Please refer to the License for details. You may not use this file except in compliance with the License.
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
* See LICENSE in the root of the software repository for the full text of the License.
*/
/* Generated By CANNBot */
// ============================================================================
// AdaCast GE-IR 构图调用骨架
//
// **注意:本算子已注册 GE 图模式(GEIR 通路可用);ACLNN 通路未提供。**
// - OpDef(op_host/ada_cast_def.cpp)与 InferShape/InferDataType(op_host、op_graph)
// 已注册,GE 图模式可直接构图并执行。
// - ACLNN 通路按 CMakeLists 的 `ACLNNTYPE aclnn_exclude` 明确排除,不产出 aclnn 接口。
// - 本文件仅作为 GE 构图调用的标准骨架代码;本仓 CMake **未定义** `ENABLE_GEIR_EXAMPLE`
// 宏,默认**不参与本仓构建**(下方调用代码整体被注释,可执行分支仅打印提示文本)。
// - 真正的 GE 入图调用需要:
// 1. OpDef/InferShape 注册(见上,已具备);
// 2. 在客户端工程中链接 libgraph / libge_runner;
// 3. 通过 `ge::Session` 完成图构建、加载、执行。
//
// 编译开关(本仓不定义,仅供参考):
// 在客户端工程自行定义 -DENABLE_GEIR_EXAMPLE 并链接 libgraph / libge_runner;
// 本仓 CMake 未定义该宏,按本仓构建不会编译下方示例代码。
// ============================================================================
#include <cstdint>
#include <iostream>
#include <memory>
#include <string>
#include <vector>
#ifdef ENABLE_GEIR_EXAMPLE
// 注:以下 GE 头文件需在编译时通过 -I 指定 CANN 安装目录下的 graph 头文件路径。
// 例如:${ASCEND_HOME_PATH}/include/graph/ ${ASCEND_HOME_PATH}/include/ge/
// #include "graph/graph.h"
// #include "graph/operator.h"
// #include "graph/operator_reg.h"
// #include "graph/tensor.h"
// #include "ge/ge_api.h"
// #include "ge/ge_ir_build.h"
// #include "all_ops.h" // 包含 REG_OP(AdaCast)
int main()
{
std::cout << "===== AdaCast GE-IR 构图调用骨架 =====" << std::endl;
std::cout << "[INFO] GE-IR(Ops) 通路已注册可用;本示例仅展示构图骨架。ACLNN 通路未提供。" << std::endl;
// ------------------------------------------------------------------------
// 步骤 1. 初始化 GE Session
// ------------------------------------------------------------------------
// std::map<ge::AscendString, ge::AscendString> options = {
// {"ge.exec.deviceId", "0"},
// {"ge.graphRunMode", "1"},
// };
// ge::Status ret = ge::GEInitialize(options);
// if (ret != ge::SUCCESS) {
// std::cerr << "[FATAL] GEInitialize failed" << std::endl;
// return 1;
// }
// ------------------------------------------------------------------------
// 步骤 2. 构造输入算子 Data
// ------------------------------------------------------------------------
// auto x = op::Data("x");
// ge::TensorDesc xDesc(ge::Shape({4, 8}), ge::FORMAT_ND, ge::DT_UINT16);
// x.update_input_desc_x(xDesc);
// x.update_output_desc_y(xDesc);
// ------------------------------------------------------------------------
// 步骤 3. 构造 AdaCast 算子节点(依赖 op_proto 中的 REG_OP(AdaCast))
// ------------------------------------------------------------------------
// auto adaCast = op::AdaCast("ada_cast_0")
// .set_input_x(x)
// .set_attr_pixel(65535);
// ------------------------------------------------------------------------
// 步骤 4. 构造输出 NetOutput
// ------------------------------------------------------------------------
// ge::TensorDesc yDesc(ge::Shape({4, 8}), ge::FORMAT_ND, ge::DT_FLOAT16);
// adaCast.update_output_desc_y(yDesc);
// std::vector<ge::Operator> inputs{x};
// std::vector<ge::Operator> outputs{adaCast};
// ge::Graph graph("ada_cast_graph");
// graph.SetInputs(inputs).SetOutputs(outputs);
// ------------------------------------------------------------------------
// 步骤 5. 构图 / 加载 / 执行
// ------------------------------------------------------------------------
// ge::Session session(options);
// session.AddGraph(0, graph);
//
// std::vector<ge::Tensor> inputTensors;
// // ... 填充输入 tensor 数据 ...
// std::vector<ge::Tensor> outputTensors;
// session.RunGraph(0, inputTensors, outputTensors);
// ------------------------------------------------------------------------
// 步骤 6. 清理
// ------------------------------------------------------------------------
// ge::GEFinalize();
std::cout << "[INFO] 骨架代码运行结束(未执行真实 GE 调用)。" << std::endl;
return 0;
}
#else // !ENABLE_GEIR_EXAMPLE
int main()
{
std::cout << "===== AdaCast GE-IR 构图调用骨架 =====" << std::endl;
std::cout << "[INFO] GEIR(Ops) 通路已注册可用;ACLNN 通路未提供。本例仅展示构图骨架。" << std::endl;
std::cout << "[INFO] 如需查看 GE 构图骨架代码,请用 -DENABLE_GEIR_EXAMPLE=ON 编译," << std::endl;
std::cout << " 并确保已安装 libgraph 与 op_proto 依赖。" << std::endl;
return 0;
}
#endif // ENABLE_GEIR_EXAMPLE