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

Function copy_general_interior

dnn/src/cambricon/relayout/opr_impl.cpp:229–264  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

227// TODO: implement with kernel.
228template <typename ctype>
229void copy_general_interior(
230 _megdnn_tensor_in src, _megdnn_tensor_out dst, RelayoutForwardImpl* opr,
231 bool cross_dev, int src_dev_id, int dst_dev_id) {
232 auto handle = concrete_handle(opr->handle());
233 auto computing_context = get_cambricon_computing_context(handle);
234
235 auto idst = tensor_iter_valonly<ctype>(dst).begin();
236 auto isrc = tensor_iter_valonly<ctype>(src).begin();
237
238 if (!cross_dev) {
239 for (size_t i = 0, it = dst.layout.total_nr_elems(); i < it; ++i) {
240 dt_byte* dst_addr = reinterpret_cast<dt_byte*>(dst.raw_ptr()) +
241 idst.offset() * dst.layout.dtype.size();
242 dt_byte* src_addr = reinterpret_cast<dt_byte*>(src.raw_ptr()) +
243 isrc.offset() * src.layout.dtype.size();
244 cnrt_check(cnrtMemcpyAsync(
245 static_cast<void*>(dst_addr), static_cast<void*>(src_addr),
246 dst.layout.dtype.size(), cnrt_queue(handle),
247 CNRT_MEM_TRANS_DIR_DEV2DEV));
248 ++idst;
249 ++isrc;
250 }
251 } else {
252 for (size_t i = 0, it = dst.layout.total_nr_elems(); i < it; ++i) {
253 dt_byte* dst_addr = reinterpret_cast<dt_byte*>(dst.raw_ptr()) +
254 idst.offset() * dst.layout.dtype.size();
255 dt_byte* src_addr = reinterpret_cast<dt_byte*>(src.raw_ptr()) +
256 isrc.offset() * src.layout.dtype.size();
257 computing_context->memcpy_peer_async_d2d(
258 static_cast<void*>(dst_addr), dst_dev_id,
259 static_cast<void*>(src_addr), src_dev_id, dst.layout.dtype.size());
260 ++idst;
261 ++isrc;
262 }
263 }
264}
265
266void copy_general(
267 _megdnn_tensor_in src, _megdnn_tensor_out dst, RelayoutForwardImpl* opr,

Callers

nothing calls this directly

Calls 10

cnrt_queueFunction · 0.85
memcpy_peer_async_d2dMethod · 0.80
concrete_handleFunction · 0.50
handleMethod · 0.45
beginMethod · 0.45
total_nr_elemsMethod · 0.45
raw_ptrMethod · 0.45
offsetMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected