| 772 | } |
| 773 | |
| 774 | void NELSTMLayer::run() |
| 775 | { |
| 776 | ARM_COMPUTE_TRACE_EVENT(ARM_COMPUTE_PROF_CAT_CPU, ARM_COMPUTE_PROF_LVL_CPU, "NELSTMLayer::run"); |
| 777 | prepare(); |
| 778 | |
| 779 | MemoryGroupResourceScope scope_mg(_memory_group); |
| 780 | |
| 781 | _concat_inputs_forget_gate.run(); |
| 782 | _fully_connected_forget_gate.run(); |
| 783 | |
| 784 | if (_run_peephole_opt) |
| 785 | { |
| 786 | _pixelwise_mul_forget_gate.run(); |
| 787 | _accum_forget_gate1.run(); |
| 788 | } |
| 789 | if (_is_layer_norm_lstm) |
| 790 | { |
| 791 | _mean_std_norm_forget_gate.run(); |
| 792 | _pixelwise_mul_forget_gate_coeff.run(); |
| 793 | _accum_forget_gate_bias.run(); |
| 794 | } |
| 795 | _activation_forget_gate.run(); |
| 796 | |
| 797 | if (_run_cifg_opt) |
| 798 | { |
| 799 | if (_ones.info()->data_type() == DataType::F16) |
| 800 | { |
| 801 | std::fill_n(reinterpret_cast<half *>(_ones.buffer()), |
| 802 | _ones.info()->total_size() / _ones.info()->element_size(), 1); |
| 803 | } |
| 804 | else |
| 805 | { |
| 806 | std::fill_n(reinterpret_cast<float *>(_ones.buffer()), |
| 807 | _ones.info()->total_size() / _ones.info()->element_size(), 1); |
| 808 | } |
| 809 | _subtract_input_gate.run(); |
| 810 | } |
| 811 | else |
| 812 | { |
| 813 | _fully_connected_input_gate.run(); |
| 814 | |
| 815 | if (_run_peephole_opt) |
| 816 | { |
| 817 | _pixelwise_mul_input_gate.run(); |
| 818 | _accum_input_gate1.run(); |
| 819 | } |
| 820 | |
| 821 | if (_is_layer_norm_lstm) |
| 822 | { |
| 823 | _mean_std_norm_input_gate.run(); |
| 824 | _pixelwise_mul_input_gate_coeff.run(); |
| 825 | _accum_input_gate_bias.run(); |
| 826 | } |
| 827 | _activation_input_gate.run(); |
| 828 | } |
| 829 | |
| 830 | _fully_connected_cell_state.run(); |
| 831 | _transpose_cell_state.run(); |
no test coverage detected