Skip to main content

quantrs2_sim/automatic_parallelization/
autoparallelengine_ml_optimize_tasks_group.rs

1//! # AutoParallelEngine - ml_optimize_tasks_group Methods
2//!
3//! This module contains method implementations for `AutoParallelEngine`.
4//!
5//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
6
7use 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    /// ML-guided task optimization
19    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    /// Balance task loads across tasks
35    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}