下载
中文
注册

使用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;
      }