quantrs2_sim/automatic_parallelization/
autoparallelengine_hybrid_hardware_parallelization_group.rs1use 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 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 pub(super) const fn refine_for_numa(
34 tasks: Vec<ParallelTask>,
35 hw_char: &HardwareCharacteristics,
36 ) -> QuantRS2Result<Vec<ParallelTask>> {
37 Ok(tasks)
38 }
39}