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

Method run

src/cpu/operators/CpuGemm.cpp:430–521  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

428}
429
430void CpuGemm::run(ITensorPack &tensors)
431{
432 ARM_COMPUTE_TRACE_EVENT(ARM_COMPUTE_PROF_CAT_CPU, ARM_COMPUTE_PROF_LVL_CPU, "CpuGemm::run");
433 prepare(tensors);
434
435 auto a = tensors.get_const_tensor(ACL_SRC_0);
436 auto b = tensors.get_const_tensor(ACL_SRC_1);
437 auto c = tensors.get_const_tensor(ACL_SRC_2);
438 auto d = tensors.get_tensor(ACL_DST);
439
440 if (_asm_glue && _asm_glue->is_configured())
441 {
442 // Pass c to asm dispatch only if it's the bias tensor
443 ITensorPack asm_pack = tensors;
444 asm_pack.add_const_tensor(ACL_SRC_2, _run_bias_addition ? c : nullptr);
445 _asm_glue->run(asm_pack);
446 if (_run_alpha_scale)
447 {
448 ITensorPack pack{{ACL_SRC, d}, {ACL_DST, d}};
449 _alpha_scale_func->run(pack);
450 }
451 }
452 else
453 {
454 CpuAuxTensorHandler interleaved_a(offset_int_vec(InterleavedLHS), _tmp_a, tensors, true);
455 CpuAuxTensorHandler pretransposed_b(offset_int_vec(PreTransposedRHS), _pretransposed_b, tensors);
456 CpuAuxTensorHandler transposed1xw_b(offset_int_vec(Transposed1xWRHS), _tmp_b, tensors, true);
457 CpuAuxTensorHandler temp_d(offset_int_vec(TempResult), _tmp_d, tensors, true);
458
459 ITensorPack mm_pack{{ACL_SRC_0, a}, {ACL_SRC_1, b}, {ACL_DST, (_run_bias_addition) ? temp_d.get() : d}};
460
461 if (_run_interleave_transpose)
462 {
463 // Run interleave kernel
464 ITensorPack interleave_pack{{ACL_SRC, a}, {ACL_DST, interleaved_a.get()}};
465 NEScheduler::get().schedule_op(_interleave_kernel.get(), Window::DimY, _interleave_kernel->window(),
466 interleave_pack);
467 // Use reshaped matrices
468 mm_pack.add_const_tensor(ACL_SRC_0, interleaved_a.get());
469 }
470
471 const ITensor *b_to_use = b;
472 if (_pretranspose_b_func)
473 {
474 if (!_reshape_b_only_on_first_run)
475 {
476 // Run pretranspose kernel
477 ITensorPack pretranspose_pack{{ACL_SRC, b_to_use}, {ACL_DST, pretransposed_b.get()}};
478 _pretranspose_b_func->run(pretranspose_pack);
479 }
480 b_to_use = pretransposed_b.get();
481 }
482 if (_run_interleave_transpose)
483 {
484 if (!_reshape_b_only_on_first_run)
485 {
486 // Run transpose1xw kernel
487 ITensorPack transpose_pack{{ACL_SRC, b_to_use}, {ACL_DST, transposed1xw_b.get()}};

Callers 1

prepareMethod · 0.45

Calls 7

offset_int_vecFunction · 0.85
get_const_tensorMethod · 0.80
add_const_tensorMethod · 0.80
get_tensorMethod · 0.45
is_configuredMethod · 0.45
getMethod · 0.45
schedule_opMethod · 0.45

Tested by

no test coverage detected