quantrs2_sim/automatic_parallelization/
autoparallelengine_ml_optimize_tasks_group.rs1use quantrs2_core::{
8 error::{QuantRS2Error, QuantRS2Result},
9 gate::GateOp,
10 qubit::QubitId,
11};
12
13use super::types::{MLFeatures, ParallelTask};
14
15use super::autoparallelengine_type::AutoParallelEngine;
16
17impl AutoParallelEngine {
18 pub(super) fn ml_optimize_tasks(
20 &self,
21 tasks: Vec<ParallelTask>,
22 features: &MLFeatures,
23 ) -> QuantRS2Result<Vec<ParallelTask>> {
24 let mut optimized = tasks;
25 Self::balance_task_loads(&mut optimized)?;
26 if features.num_gates < 50 {
27 optimized = self.merge_small_tasks(optimized)?;
28 }
29 if features.parallelism_factor > 0.6 {
30 optimized = Self::split_large_tasks(optimized)?;
31 }
32 Ok(optimized)
33 }
34 pub(super) fn balance_task_loads(tasks: &mut [ParallelTask]) -> QuantRS2Result<()> {
36 tasks.sort_by(|a, b| {
37 b.cost
38 .partial_cmp(&a.cost)
39 .unwrap_or(std::cmp::Ordering::Equal)
40 });
41 Ok(())
42 }
43}