| 790 | } |
| 791 | |
| 792 | void test_serializer_log_exp(GraphDumpFormat format) { |
| 793 | auto fname = GET_OUTPUT_FILE(format); |
| 794 | TensorShape shape{2, 3}; |
| 795 | using Mode = opr::Elemwise::Mode; |
| 796 | bool inplace_opt = true; |
| 797 | auto dump = [&]() { |
| 798 | auto cn = CompNode::load("xpu0"); |
| 799 | auto host_x = std::make_shared<HostTensorND>(cn, shape); |
| 800 | for (size_t i = 0, it = shape.total_nr_elems(); i < it; ++i) |
| 801 | host_x->ptr<float>()[i] = 0.0; // To avoid NAN |
| 802 | auto graph = ComputingGraph::make(); |
| 803 | if (!inplace_opt) |
| 804 | graph->options().graph_opt_level = 0; |
| 805 | auto x = opr::Host2DeviceCopy::make(*graph, host_x, {"x"}); |
| 806 | auto y = opr::Elemwise::make({x}, Mode::EXP); |
| 807 | auto z = opr::Elemwise::make({y}, Mode::LOG); |
| 808 | |
| 809 | auto dumper = GraphDumper::make(OutputFile::make_fs(fname.c_str()), format); |
| 810 | auto rst = dumper->dump({z.rename("z"), z}); |
| 811 | size_t expected_nr_opr = inplace_opt ? 1 : 3; |
| 812 | ASSERT_EQ(expected_nr_opr, rst.nr_opr); |
| 813 | }; |
| 814 | |
| 815 | auto load = [&]() { |
| 816 | auto loader = GraphLoader::make(InputFile::make_fs(fname.c_str()), format); |
| 817 | auto rst = loader->load(); |
| 818 | }; |
| 819 | |
| 820 | dump(); |
| 821 | load(); |
| 822 | |
| 823 | inplace_opt = !inplace_opt; |
| 824 | dump(); |
| 825 | load(); |
| 826 | } |
| 827 | |
| 828 | void test_serializer_memshare(GraphDumpFormat format) { |
| 829 | std::vector<uint8_t> buf; |