94 int number_of_threads = QThreadPool::globalInstance()->maxThreadCount();
96 if(number_of_threads == 1)
103 QObject::tr(
"parallelized extraction of %1 XICs").arg(xic_coord_list.size()));
105 std::size_t chunck_size = xic_coord_list.size() / number_of_threads;
107 if(chunck_size < 1000)
110 struct parallelExtractChunck
112 std::vector<XicCoordSPtr>::iterator it_xic_coord_begin;
113 std::vector<XicCoordSPtr>::iterator it_xic_coord_end;
116 std::vector<parallelExtractChunck> chunck_list;
118 for(
auto it = xic_coord_list.begin(); it != xic_coord_list.end();)
120 qDebug() <<
"chunck_size=" << chunck_size;
121 parallelExtractChunck chunck;
122 chunck.it_xic_coord_begin = it;
123 for(std::size_t i = 0; i < chunck_size && it != xic_coord_list.end(); i++)
127 chunck.it_xic_coord_end = it;
128 chunck_list.push_back(chunck);
134 std::function<std::size_t(
const parallelExtractChunck &)> extractChunck =
135 [self](
const parallelExtractChunck &extract_chunck) {
138 self->protectedExtractXicCoordSPtrList(
139 monitor, extract_chunck.it_xic_coord_begin, extract_chunck.it_xic_coord_end);
140 self->postExtractionProcess(
141 monitor, extract_chunck.it_xic_coord_begin, extract_chunck.it_xic_coord_end);
148 std::function<void(std::size_t &result,
const std::size_t &value)> monitorExtract2 =
149 [monitorRef](std::size_t &result [[maybe_unused]],
150 const std::size_t &value [[maybe_unused]]) { monitorRef->
count(); };
153 QFuture<std::size_t> res =
154 QtConcurrent::mappedReduced<std::size_t>(chunck_list.begin(),
158 QtConcurrent::UnorderedReduce);
166 res.waitForFinished();