MCPcopy Create free account
hub / github.com/ARM-software/ComputeLibrary / prepare

Method prepare

src/cpu/operators/CpuGemm.cpp:523–560  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

521}
522
523void CpuGemm::prepare(ITensorPack &tensors)
524{
525 if (!_is_prepared)
526 {
527 if (_asm_glue && _asm_glue->is_configured())
528 {
529 _asm_glue->prepare(tensors);
530 }
531 else if (_reshape_b_only_on_first_run)
532 {
533 const ITensor *b = tensors.get_const_tensor(ACL_SRC_1);
534 const ITensor *b_to_use = b;
535 CpuAuxTensorHandler pretransposed_b(
536 offset_int_vec(PreTransposedRHS), _pretransposed_b, tensors,
537 false /*pack_inject: no need to inject into tensors*/,
538 _pretranspose_b_func ==
539 nullptr /*bypass_alloc: no need to allocate if _pretranspose_b_func is not run*/);
540 CpuAuxTensorHandler transposed1xw_b(offset_int_vec(Transposed1xWRHS), _tmp_b, tensors,
541 false /*pack_inject*/, !_run_interleave_transpose /*bypass_alloc*/);
542
543 if (_pretranspose_b_func)
544 {
545 // Run pretranspose kernel
546 ITensorPack pretranspose_pack{{ACL_SRC, b_to_use}, {ACL_DST, pretransposed_b.get()}};
547 _pretranspose_b_func->run(pretranspose_pack);
548 b_to_use = pretransposed_b.get();
549 }
550 if (_run_interleave_transpose)
551 {
552 // Run transpose kernel
553 ITensorPack transpose_pack{{ACL_SRC, b_to_use}, {ACL_DST, transposed1xw_b.get()}};
554 NEScheduler::get().schedule_op(_transpose1xW_b_kernel.get(), Window::DimY,
555 _transpose1xW_b_kernel->window(), transpose_pack);
556 }
557 }
558 _is_prepared = true;
559 }
560}
561
562experimental::MemoryRequirements CpuGemm::workspace() const
563{

Callers 3

runMethod · 0.45
runMethod · 0.45
runMethod · 0.45

Calls 6

offset_int_vecFunction · 0.85
get_const_tensorMethod · 0.80
is_configuredMethod · 0.45
getMethod · 0.45
runMethod · 0.45
schedule_opMethod · 0.45

Tested by

no test coverage detected