Skip to main content

quantrs2_sim/automatic_parallelization/
functions.rs

1//! Auto-generated module
2//!
3//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
4
5use quantrs2_circuit::builder::{Circuit, Simulator};
6use quantrs2_core::{
7    error::{QuantRS2Error, QuantRS2Result},
8    gate::GateOp,
9    qubit::QubitId,
10};
11use std::time::{Duration, Instant};
12
13use super::autoparallelengine_type::AutoParallelEngine;
14use super::types::{AutoParallelBenchmarkResults, AutoParallelConfig, CircuitParallelResult};
15
16/// Benchmark automatic parallelization performance
17pub fn benchmark_automatic_parallelization<const N: usize>(
18    circuits: Vec<Circuit<N>>,
19    config: AutoParallelConfig,
20) -> QuantRS2Result<AutoParallelBenchmarkResults> {
21    let engine = AutoParallelEngine::new(config);
22    let mut results = Vec::new();
23    let start_time = Instant::now();
24    for circuit in circuits {
25        let analysis_start = Instant::now();
26        let analysis = engine.analyze_circuit(&circuit)?;
27        let analysis_time = analysis_start.elapsed();
28        results.push(CircuitParallelResult {
29            circuit_size: circuit.num_gates(),
30            num_qubits: circuit.num_qubits(),
31            analysis_time,
32            efficiency: analysis.efficiency,
33            max_parallelism: analysis.max_parallelism,
34            num_tasks: analysis.tasks.len(),
35        });
36    }
37    let total_time = start_time.elapsed();
38    Ok(AutoParallelBenchmarkResults {
39        total_time,
40        average_efficiency: results.iter().map(|r| r.efficiency).sum::<f64>()
41            / results.len() as f64,
42        average_parallelism: results.iter().map(|r| r.max_parallelism).sum::<usize>()
43            / results.len(),
44        circuit_results: results,
45    })
46}