From 30e51f4656b5e935dddae0fa1c47190755665448 Mon Sep 17 00:00:00 2001
From: Franck Dary <franck.dary@lis-lab.fr>
Date: Sat, 6 Mar 2021 19:35:43 +0100
Subject: [PATCH] Corrected bug in MacaonDecode where dicts were not closed.
 Parallel decode.

---
 decoder/src/MacaonDecode.cpp | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/decoder/src/MacaonDecode.cpp b/decoder/src/MacaonDecode.cpp
index eea032a..525e452 100644
--- a/decoder/src/MacaonDecode.cpp
+++ b/decoder/src/MacaonDecode.cpp
@@ -1,5 +1,6 @@
 #include "MacaonDecode.hpp"
 #include <filesystem>
+#include <execution>
 #include "util.hpp"
 #include "Decoder.hpp"
 #include "Submodule.hpp"
@@ -122,11 +123,23 @@ int MacaonDecode::main()
         configs.emplace_back(mcd, tsv, util::utf8string(), std::vector<int>());
     }
 
-    for (unsigned int i = 0; i < configs.size(); i++)
+    machine.setDictsState(Dict::State::Closed);
+
+    if (configs.size() > 1)
     {
-      decoder.decode(configs[i], beamSize, beamThreshold, debug, printAdvancement);
-      configs[i].print(stdout, i == 0);
+      NeuralNetworkImpl::device = torch::kCPU;
+      machine.to(NeuralNetworkImpl::device);
+      std::for_each(std::execution::par_unseq, configs.begin(), configs.end(),
+        [&decoder, debug, printAdvancement, beamSize, beamThreshold](BaseConfig & config)
+        {
+          decoder.decode(config, beamSize, beamThreshold, debug, printAdvancement);
+        });
     }
+    else
+      decoder.decode(configs[0], beamSize, beamThreshold, debug, printAdvancement);
+
+    for (unsigned int i = 0; i < configs.size(); i++)
+      configs[i].print(stdout, i == 0);
 
   } catch(std::exception & e) {util::error(e);}
 
-- 
GitLab