aboutsummaryrefslogtreecommitdiff
path: root/include/core
diff options
context:
space:
mode:
Diffstat (limited to 'include/core')
-rw-r--r--include/core/runtime.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/include/core/runtime.h b/include/core/runtime.h
new file mode 100644
index 0000000..9e7427e
--- /dev/null
+++ b/include/core/runtime.h
@@ -0,0 +1,43 @@
+#pragma once
+
+#include <stdbool.h>
+#include <stddef.h>
+
+#include "core/circuit.h"
+#include "maths/vector.h"
+
+#define PSI_PARALLEL_THRESHOLD 8
+
+struct PsiRuntimeConfig
+{
+ bool parallel;
+ bool simd;
+ bool batched;
+ bool structure_aware;
+ size_t parallel_threshold;
+};
+
+enum PsiRuntime
+{
+ PSI_RUNTIME_BASIC,
+ PSI_RUNTIME_BASIC_MT,
+ PSI_RUNTIME_BATCHED,
+ PSI_RUNTIME_BATCHED_MT,
+ PSI_RUNTIME_SIMD,
+ PSI_RUNTIME_SIMD_MT,
+ PSI_RUNTIME_STRUCTURE_AWARE,
+ PSI_RUNTIME_STRUCTURE_AWARE_MT,
+};
+
+struct PsiRuntimeConfig psi_new_runtime_config(void);
+struct PsiRuntimeConfig psi_optimal_runtime_config(void);
+struct PsiRuntimeConfig psi_runtime_to_config(enum PsiRuntime runtime);
+
+struct PsiVector psi_compute_runtime_config(struct PsiRuntimeConfig config, size_t num_qubits, const struct PsiGateOp *operations, size_t op_count);
+struct PsiVector psi_compute_runtime(enum PsiRuntime runtime, size_t num_qubits, const struct PsiGateOp *operations, size_t op_count);
+
+const struct PsiVector *psi_compute_circuit(struct PsiQuantumCircuit *circuit);
+const struct PsiVector *psi_compute_circuit_with(struct PsiQuantumCircuit *circuit, enum PsiRuntime runtime);
+const struct PsiVector *psi_compute_circuit_with_config(struct PsiQuantumCircuit *circuit, struct PsiRuntimeConfig config);
+double psi_circuit_probability(struct PsiQuantumCircuit *circuit, size_t state_index);
+void psi_circuit_probabilities(struct PsiQuantumCircuit *circuit, double *out);