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

Function extract_from_workspace

dnn/src/naive/relayout_format/opr_impl.cpp:92–116  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

90}
91
92void extract_from_workspace(
93 _megdnn_tensor_out dst, _megdnn_tensor_in src, size_t group) {
94 megdnn_assert(
95 dst.layout.is_contiguous() && src.layout.is_contiguous(), "dst %s, src %s",
96 dst.layout.to_string().c_str(), src.layout.to_string().c_str());
97 const size_t n = dst.layout[0];
98 const size_t n_stride_dst_in_bytes = dst.layout.dtype.size(dst.layout.stride[0]);
99 const size_t n_stride_src_in_bytes = src.layout.dtype.size(src.layout.stride[0]);
100 const size_t ocpg = dst.layout[1] / group;
101 const size_t icpg = src.layout[1] / group;
102 const size_t dst_c_stride_in_bytes = dst.layout.dtype.size(dst.layout.stride[1]);
103 const size_t src_c_stride_in_bytes = src.layout.dtype.size(src.layout.stride[1]);
104 megdnn_assert(dst_c_stride_in_bytes == src_c_stride_in_bytes);
105 for (size_t nid = 0; nid < n; ++nid) {
106 const size_t n_offset_dst = nid * n_stride_dst_in_bytes;
107 const size_t n_offset_src = nid * n_stride_src_in_bytes;
108 for (size_t gid = 0; gid < group; ++gid) {
109 memcpy(reinterpret_cast<char*>(dst.raw_ptr()) + n_offset_dst +
110 gid * ocpg * dst_c_stride_in_bytes,
111 reinterpret_cast<char*>(src.raw_ptr()) + n_offset_src +
112 gid * icpg * src_c_stride_in_bytes,
113 ocpg * dst_c_stride_in_bytes);
114 }
115 }
116};
117
118template <typename dtype>
119void padding_src_to_workspace(

Callers 1

execMethod · 0.85

Calls 4

is_contiguousMethod · 0.45
to_stringMethod · 0.45
sizeMethod · 0.45
raw_ptrMethod · 0.45

Tested by

no test coverage detected