---
title: 使用DataFlow API构建graph
description: "1. 构建FlowGraph。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/others/dataflowdevg/dfdevc_23_0020.html
sourcePath: /source/zh/canncommercial/900/others/dataflowdevg/dfdevc_23_0020.html
indexId: 77b848e33b956c41abeb3b821e3e2745f55a99b13e6186977454fba7a680520b69
---
# 使用DataFlow API构建graph

1. 构建FlowGraph。
  通过FlowNode和FunctionPp构建graph。示例如下： 1 2 3 4 5 6 7 8 9 10 11 12 13 // 构造DataFlow的FlowGraph图 dflow::FlowGraph flow_graph("flow_graph"); // 构造输入节点 auto data0 = dflow::FlowData("Data0", 0); auto data1 = dflow::FlowData("Data1", 1); auto node0 = dflow::FlowNode("node0", 2, 1).SetInput(0, data0).SetInput(1, data1); // function_pp auto pp0 = dflow::FunctionPp("func_pp0") .SetCompileConfig("./add_func.json") .SetInitParam("out_type", ge::DT_UINT32); node0.AddPp(&pp0);

2. 运行graph。
  有如下两种方式。
  - Session run方式，示例如下：
    1 2 3 4 5 6 7 8 9 10 // 创建session ge::Session* session1 = new Session(options); assert(session1 != NULL); ret = session1->AddGraph(graphId, graph); if (!ret) { return; } // 运行graph ret = session1->RunGraph(graphId, input, output); if (!ret) { return; } GEFinalize(); return;


  - DataFlow方式，示例如下：
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 // DataFlow异步接口执行graph： ge::DataFlowInfo dataFlowInfo; dataFlowInfo.SetStartTime(0); dataFlowInfo.SetEndTime(5); std::vector<ge::Tensor> inputsData = {inputTensor, inputTensor}; geRet = session->FeedDataFlowGraph(0, inputsData, dataFlowInfo, 3000); if (geRet != ge::SUCCESS) { std::cout << "TEST====Feed input data failed============." << std::endl; ge::GEFinalize(); return -1; } // 获取输出 std::vector<ge::Tensor> outputsData; geRet = session->FetchDataFlowGraph(0, outputsData, dataFlowInfo, 3000); if (geRet != ge::SUCCESS) { std::cout << "TEST====Fetch output data failed." << std::endl; ge::GEFinalize(); return -1; }
