pub trait GpuKernel: Send + Sync {
// Required methods
fn apply_single_qubit_gate(
&self,
state: &mut dyn GpuBuffer,
gate_matrix: &[Complex64; 4],
qubit: QubitId,
n_qubits: usize,
) -> QuantRS2Result<()>;
fn apply_two_qubit_gate(
&self,
state: &mut dyn GpuBuffer,
gate_matrix: &[Complex64; 16],
control: QubitId,
target: QubitId,
n_qubits: usize,
) -> QuantRS2Result<()>;
fn apply_multi_qubit_gate(
&self,
state: &mut dyn GpuBuffer,
gate_matrix: &Array2<Complex64>,
qubits: &[QubitId],
n_qubits: usize,
) -> QuantRS2Result<()>;
fn measure_qubit(
&self,
state: &dyn GpuBuffer,
qubit: QubitId,
n_qubits: usize,
) -> QuantRS2Result<(bool, f64)>;
fn expectation_value(
&self,
state: &dyn GpuBuffer,
observable: &Array2<Complex64>,
qubits: &[QubitId],
n_qubits: usize,
) -> QuantRS2Result<f64>;
}
Expand description
GPU kernel for quantum operations
Required Methods§
Sourcefn apply_single_qubit_gate(
&self,
state: &mut dyn GpuBuffer,
gate_matrix: &[Complex64; 4],
qubit: QubitId,
n_qubits: usize,
) -> QuantRS2Result<()>
fn apply_single_qubit_gate( &self, state: &mut dyn GpuBuffer, gate_matrix: &[Complex64; 4], qubit: QubitId, n_qubits: usize, ) -> QuantRS2Result<()>
Apply a single-qubit gate
Sourcefn apply_two_qubit_gate(
&self,
state: &mut dyn GpuBuffer,
gate_matrix: &[Complex64; 16],
control: QubitId,
target: QubitId,
n_qubits: usize,
) -> QuantRS2Result<()>
fn apply_two_qubit_gate( &self, state: &mut dyn GpuBuffer, gate_matrix: &[Complex64; 16], control: QubitId, target: QubitId, n_qubits: usize, ) -> QuantRS2Result<()>
Apply a two-qubit gate
Sourcefn apply_multi_qubit_gate(
&self,
state: &mut dyn GpuBuffer,
gate_matrix: &Array2<Complex64>,
qubits: &[QubitId],
n_qubits: usize,
) -> QuantRS2Result<()>
fn apply_multi_qubit_gate( &self, state: &mut dyn GpuBuffer, gate_matrix: &Array2<Complex64>, qubits: &[QubitId], n_qubits: usize, ) -> QuantRS2Result<()>
Apply a multi-qubit gate
Sourcefn measure_qubit(
&self,
state: &dyn GpuBuffer,
qubit: QubitId,
n_qubits: usize,
) -> QuantRS2Result<(bool, f64)>
fn measure_qubit( &self, state: &dyn GpuBuffer, qubit: QubitId, n_qubits: usize, ) -> QuantRS2Result<(bool, f64)>
Measure a qubit
Sourcefn expectation_value(
&self,
state: &dyn GpuBuffer,
observable: &Array2<Complex64>,
qubits: &[QubitId],
n_qubits: usize,
) -> QuantRS2Result<f64>
fn expectation_value( &self, state: &dyn GpuBuffer, observable: &Array2<Complex64>, qubits: &[QubitId], n_qubits: usize, ) -> QuantRS2Result<f64>
Calculate expectation value