From aaea07b252f3a668d2b321765770f09759365356 Mon Sep 17 00:00:00 2001 From: hachem Date: Sun, 6 Sep 2026 23:13:30 +0200 Subject: add: scalar kernel engine with fusion --- include/core/kernel.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++ include/psi.h | 1 + 2 files changed, 47 insertions(+) create mode 100644 include/core/kernel.h (limited to 'include') diff --git a/include/core/kernel.h b/include/core/kernel.h new file mode 100644 index 0000000..f827731 --- /dev/null +++ b/include/core/kernel.h @@ -0,0 +1,46 @@ +#pragma once + +#include +#include + +#include "maths/matrix.h" +#include "maths/vector.h" + +enum PsiGateType +{ + PSI_GATE_TYPE_DIAGONAL, + PSI_GATE_TYPE_NON_DIAGONAL, + PSI_GATE_TYPE_CONTROLLED, +}; + +struct PsiKernel +{ + struct PsiMatrix matrix; + size_t *targets; + size_t target_count; + char *name; + enum PsiGateType gate_type; +}; + +struct PsiKernel psi_new_kernel(const char *name, struct PsiMatrix matrix, const size_t *targets, size_t target_count); +struct PsiKernel psi_clone_kernel(struct PsiKernel kernel); +void psi_free_kernel(struct PsiKernel *kernel); + +bool psi_kernels_share_qubits(struct PsiKernel a, struct PsiKernel b); +bool psi_kernels_commute(struct PsiKernel a, struct PsiKernel b); +bool psi_kernels_can_fuse(struct PsiKernel a, struct PsiKernel b); +bool psi_fuse_kernels(struct PsiKernel a, struct PsiKernel b, struct PsiKernel *out); + +struct PsiKernelBatch +{ + struct PsiKernel *kernels; + size_t count; + size_t capacity; + size_t num_qubits; +}; + +struct PsiKernelBatch psi_new_kernel_batch(size_t num_qubits); +void psi_free_kernel_batch(struct PsiKernelBatch *batch); +void psi_add_kernel(struct PsiKernelBatch *batch, struct PsiKernel kernel); +void psi_optimize_kernel_batch(struct PsiKernelBatch *batch); +void psi_execute_kernel_batch(struct PsiKernelBatch batch, struct PsiVector *state); diff --git a/include/psi.h b/include/psi.h index b471d0a..d8d7226 100644 --- a/include/psi.h +++ b/include/psi.h @@ -15,3 +15,4 @@ const char *psi_version(void); #include "core/custom_gate.h" #include "core/classical_components.h" #include "core/circuit.h" +#include "core/kernel.h" -- cgit v1.3