Skip to main content

quantrs2_sim/automatic_parallelization/
autoparallelengine_hybrid_hardware_parallelization_group.rs

1//! # AutoParallelEngine - hybrid_hardware_parallelization_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::{DependencyGraph, HardwareCharacteristics, ParallelTask};
14
15use super::autoparallelengine_type::AutoParallelEngine;
16
17impl AutoParallelEngine {
18    /// Hybrid hardware-aware parallelization
19    pub(super) fn hybrid_hardware_parallelization(
20        &self,
21        graph: &DependencyGraph,
22        hw_char: &HardwareCharacteristics,
23    ) -> QuantRS2Result<Vec<ParallelTask>> {
24        let base_tasks = self.dependency_based_parallelization(graph)?;
25        let cache_aware_tasks = Self::refine_for_cache(base_tasks, hw_char)?;
26        if hw_char.num_numa_nodes > 1 {
27            Self::refine_for_numa(cache_aware_tasks, hw_char)
28        } else {
29            Ok(cache_aware_tasks)
30        }
31    }
32    /// Refine tasks for NUMA efficiency
33    pub(super) const fn refine_for_numa(
34        tasks: Vec<ParallelTask>,
35        hw_char: &HardwareCharacteristics,
36    ) -> QuantRS2Result<Vec<ParallelTask>> {
37        Ok(tasks)
38    }
39}