From 23e122f3048d61e39c01ecfb22c2d88b0466d323 Mon Sep 17 00:00:00 2001 From: Yufeng Li Date: Fri, 7 Dec 2018 10:24:57 -0800 Subject: [PATCH] Run backward gru in main thread for bidirection (#118) --- .../core/providers/cpu/rnn/deep_cpu_gru.cc | 25 +++++++------------ 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/onnxruntime/core/providers/cpu/rnn/deep_cpu_gru.cc b/onnxruntime/core/providers/cpu/rnn/deep_cpu_gru.cc index 9be1d1ffd0..3ff4584820 100644 --- a/onnxruntime/core/providers/cpu/rnn/deep_cpu_gru.cc +++ b/onnxruntime/core/providers/cpu/rnn/deep_cpu_gru.cc @@ -374,21 +374,6 @@ Status DeepCpuGruOp::ComputeImpl(OpKernelContext& context) const { gsl::span hidden_output_2 = hidden_output.subspan(hidden_output_size_per_direction, hidden_output_size_per_direction); - // run backward first as it needs an extra reverse sequence operation - std::packaged_task task_bw{ - [&]() { - std::unique_ptr> bw = std::make_unique>( - alloc, logger, - seq_length, batch_size, input_size, hidden_size_, linear_before_reset_, Direction::kReverse, - bias_2, initial_hidden_2, - activation_funcs_.Entries()[2], - activation_funcs_.Entries()[3], - clip_, ttp_); - bw->Compute(input, sequence_lens_span, num_directions_, input_weights_2, recurrent_weights_2, output_2, hidden_output_2); - }}; - auto task_results_bw = task_bw.get_future(); - ttp_.RunTask(std::move(task_bw)); - std::packaged_task task_fw{ [&]() { std::unique_ptr> fw = std::make_unique>( @@ -403,8 +388,16 @@ Status DeepCpuGruOp::ComputeImpl(OpKernelContext& context) const { auto task_results_fw = task_fw.get_future(); ttp_.RunTask(std::move(task_fw)); + std::unique_ptr> bw = std::make_unique>( + alloc, logger, + seq_length, batch_size, input_size, hidden_size_, linear_before_reset_, Direction::kReverse, + bias_2, initial_hidden_2, + activation_funcs_.Entries()[2], + activation_funcs_.Entries()[3], + clip_, ttp_); + bw->Compute(input, sequence_lens_span, num_directions_, input_weights_2, recurrent_weights_2, output_2, hidden_output_2); + task_results_fw.get(); - task_results_bw.get(); } else { std::unique_ptr> gru_p = std::make_unique>( alloc, logger,