| 931 | output_frames_(frames * 2), |
| 932 | embed_prelook_runner_(weights, frames, hidden_size, backend_config), |
| 933 | upsample_runner_(weights, frames, hidden_size, backend_config), |
| 934 | after_norm_runner_(weights.after_norm, *weights.execution_context, output_frames_, hidden_size, backend_config) { |
| 935 | encoder_runners_.reserve(weights.encoders.size()); |
| 936 | for (const auto & layer : weights.encoders) { |
| 937 | encoder_runners_.push_back( |
| 938 | std::make_unique<FlowEncoderLayerBackendRunner>( |
| 939 | layer, *weights.execution_context, input_frames_, hidden_size_, backend_config)); |
| 940 | } |
| 941 | up_encoder_runners_.reserve(weights.up_encoders.size()); |
| 942 | for (const auto & layer : weights.up_encoders) { |
| 943 | up_encoder_runners_.push_back( |
| 944 | std::make_unique<FlowEncoderLayerBackendRunner>( |
| 945 | layer, *weights.execution_context, output_frames_, hidden_size_, backend_config)); |
| 946 | } |
| 947 | } |
| 948 | |
| 949 | S3FlowEncoderOutputs run(const std::vector<float> & input, int64_t valid_frames) { |
| 950 | const auto attention_mask_values = make_attention_key_mask(1, input_frames_, input_frames_, valid_frames); |
| 951 | embed_prelook_runner_.write_input(input); |
| 952 | embed_prelook_runner_.compute(); |
| 953 | |
| 954 | auto * previous_output = &embed_prelook_runner_.output_tensor(); |
| 955 | for (auto & runner : encoder_runners_) { |
| 956 | runner->write_attention_mask(attention_mask_values); |
| 957 | copy_backend_tensor(*previous_output, runner->input_tensor()); |
| 958 | runner->compute(); |
| 959 | previous_output = &runner->output_tensor(); |
| 960 | } |
| 961 | |
| 962 | copy_backend_tensor(*previous_output, upsample_runner_.input_tensor()); |
| 963 | upsample_runner_.compute(); |
| 964 | |
| 965 | const int64_t valid_output_frames = valid_frames * 2; |
| 966 | const auto up_attention_mask_values = make_attention_key_mask(1, output_frames_, output_frames_, valid_output_frames); |
| 967 | previous_output = &upsample_runner_.output_tensor(); |
| 968 | for (auto & runner : up_encoder_runners_) { |
| 969 | runner->write_attention_mask(up_attention_mask_values); |
| 970 | copy_backend_tensor(*previous_output, runner->input_tensor()); |
| 971 | runner->compute(); |
no test coverage detected