MCPcopy Create free account
hub / github.com/MegEngine/MegEngine / run_noncontig_test

Function run_noncontig_test

src/core/test/tensor.cpp:20–75  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

18
19template <class Src, class Dst>
20void run_noncontig_test() {
21 // use a relatively large size so synchronization problems can be detected
22 constexpr size_t S0 = 200, S1 = 500;
23 HostTensorND hv_init{CompNode::load("xpu0"), dtype::Float32()};
24 hv_init.resize({S0, S1});
25 for (size_t i = 0; i < S0 * S1; ++i)
26 hv_init.ptr<float>()[i] = i;
27
28 Src src;
29 src.copy_from(hv_init);
30
31 bool failed = false;
32 auto check = [&](size_t begin, size_t end) {
33 ASSERT_FALSE(failed);
34 failed = true;
35
36 Src src_sub;
37 Dst dst;
38 src_sub = src.sub(Slice(begin, end).apply(src.layout(), 1));
39 dst.copy_from(src_sub).sync();
40
41 HostTensorND rst;
42 rst.copy_from(dst).sync();
43
44 auto ptr = rst.ptr<float>();
45 for (size_t i = 0; i < S0; ++i)
46 for (size_t j = begin; j < end; ++j) {
47 ASSERT_EQ(float(i * S1 + j), *ptr);
48 ++ptr;
49 }
50
51 HostTensorND hv_zero{hv_init.comp_node(), dtype::Float32()};
52 hv_zero.resize({S0, end - begin});
53 memset(hv_zero.ptr<float>(), 0, hv_zero.layout().span().dist_byte());
54 Dst dst_zero;
55 dst_zero.copy_from(hv_zero);
56 src_sub.copy_from_fixlayout(dst_zero);
57 HostTensorND src_hv;
58 src_hv.copy_from(src).sync();
59 ptr = src_hv.ptr<float>();
60 for (size_t i = 0; i < S0; ++i)
61 for (size_t j = begin; j < end; ++j) {
62 ASSERT_EQ(0.f, ptr[i * S1 + j]);
63 }
64
65 src_sub.copy_from_fixlayout(dst).sync();
66
67 failed = false;
68 };
69
70 check(0, 1);
71 check(S1 - 1, S1);
72 check(0, S1 - 1);
73 check(1, S1);
74 check(12, 21);
75}
76} // anonymous namespace
77

Callers

nothing calls this directly

Calls 13

SliceClass · 0.85
resizeMethod · 0.80
dist_byteMethod · 0.80
spanMethod · 0.80
copy_from_fixlayoutMethod · 0.80
loadFunction · 0.50
checkFunction · 0.50
copy_fromMethod · 0.45
subMethod · 0.45
applyMethod · 0.45
layoutMethod · 0.45
syncMethod · 0.45

Tested by

no test coverage detected