| 19 | using namespace mgb; |
| 20 | |
| 21 | struct TestGraph { |
| 22 | CompNode m_cn; |
| 23 | HostTensorGenerator<> m_gen; |
| 24 | HostTensorGenerator<dtype::Int32> m_gen_int; |
| 25 | std::unique_ptr<Network> m_network; |
| 26 | SymbolVar m_out_var; |
| 27 | std::shared_ptr<HostTensorND> input_tensor; |
| 28 | std::shared_ptr<HostTensorND> input_tensor2; |
| 29 | |
| 30 | TestGraph() { |
| 31 | m_cn = CompNode::load("cpu0"); |
| 32 | m_network = std::make_unique<Network>(m_cn); |
| 33 | } |
| 34 | |
| 35 | void create_graph() { |
| 36 | input_tensor = m_gen({1, 3, 32, 32}, m_cn); |
| 37 | auto input = opr::Host2DeviceCopy::make(*m_network->graph, input_tensor, m_cn) |
| 38 | .rename("input"); |
| 39 | auto f = m_network->add_conv( |
| 40 | input, 4, {3, 3}, dtype::Float32(), true, {2, 2}, {0, 0}); |
| 41 | f = m_network->add_elemwise( |
| 42 | {f}, dtype::Float32(), opr::Elemwise::Param::Mode::EXP); |
| 43 | f = m_network->add_conv(f, 8, {3, 3}, dtype::Float32(), true, {1, 1}, {1, 1}); |
| 44 | f = m_network->add_pooling(f, {2, 2}, {2, 2}); |
| 45 | m_out_var = m_network->add_concat(f, -f); |
| 46 | } |
| 47 | |
| 48 | void create_relayout_out_graph(int mem_forward_opr_type) { |
| 49 | input_tensor = m_gen({1, 3, 32, 32}, m_cn); |
| 50 | auto input = opr::Host2DeviceCopy::make(*m_network->graph, input_tensor, m_cn) |
| 51 | .rename("input"); |
| 52 | auto f = m_network->add_conv( |
| 53 | input, 4, {3, 3}, dtype::Float32(), true, {2, 2}, {0, 0}); |
| 54 | f = m_network->add_elemwise( |
| 55 | {f}, dtype::Float32(), opr::Elemwise::Param::Mode::EXP); |
| 56 | f = m_network->add_conv(f, 8, {3, 3}, dtype::Float32(), true, {1, 1}, {1, 1}); |
| 57 | f = m_network->add_pooling(f, {2, 2}, {2, 2}); |
| 58 | //! dimshuffle |
| 59 | if (mem_forward_opr_type == 0) { |
| 60 | f = m_network->add_dimshuffle(f, {0, 2, 3, 1}); |
| 61 | //! BroadCast |
| 62 | } else if (mem_forward_opr_type == 1) { |
| 63 | f = m_network->add_broadcast(f); |
| 64 | //! Subtensor |
| 65 | } else if (mem_forward_opr_type == 2) { |
| 66 | f = m_network->add_subtensor(f); |
| 67 | //! AxisAddRemove |
| 68 | } else if (mem_forward_opr_type == 3) { |
| 69 | f = m_network->add_axisaddremove(f); |
| 70 | //! Reshape |
| 71 | } else if (mem_forward_opr_type == 4) { |
| 72 | f = m_network->add_reshape(f); |
| 73 | } |
| 74 | m_out_var = m_network->add_copy(f); |
| 75 | } |
| 76 | |
| 77 | void create_graph_with_subtensor_forward() { |
| 78 | input_tensor = m_gen({2, 3, 32, 32}, m_cn); |
no outgoing calls