Maestro 0.3.11
Unified interface for quantum circuit simulation
Loading...
Searching...
No Matches
DistributedGpuApi.h
Go to the documentation of this file.
1// C ABI version 1 of maestro-gpu-distributed. No CUDA headers or link
2// dependency. Keep these declarations synchronized with that project's
3// include/gpusim.h. This is part of the C-language plugin boundary covered by
4// the linking exception in LICENSE, like GpuLibrary.h.
5#pragma once
6#include <cstdint>
7
9{
10enum
11{
14};
15
16// MPI-independent declarations from include/gpusim_mpi_runtime.h.
18{
19 uint32_t struct_size;
20 uint32_t reserved;
22};
23
25{
26 uint32_t struct_size;
27 int32_t size;
28 int32_t rank;
30};
31
38
40{
41 uint32_t struct_size;
42 uint32_t flags;
44 const int32_t *global_qubits;
45 uint32_t num_shards;
46 const int32_t *shard_devices;
47};
48
49using SetGpuDeviceFn = int (*)(int deviceId);
50using GetGpuDeviceCountFn = int (*)(void);
51using ValidateLicenseFn = int (*)(const char *licenseKey);
52using InitLibFn = void *(*)(void);
53using FreeLibFn = void (*)(void);
54using CreateStateVectorFn = void *(*)(void *lib);
55using CreateStateVectorWithBackendFn = void *(*)(void *lib, int backend);
56using GetBackendFn = int (*)(void *obj);
57using SetExExecutionConfigFn = int (*)(void *obj, const MgdExExecutionConfig *config);
58using DestroyStateVectorFn = void (*)(void *obj);
59using SetDataTypeFn = int (*)(void *obj, int useDoublePrecision);
60using SetSeedFn = int (*)(void *obj, unsigned long long seed);
61using IsDoublePrecisionFn = int (*)(void *obj);
62using GetNrQubitsFn = int (*)(void *obj);
63using GetStateVectorGpuIdFn = int (*)(void *obj);
64using CreateFn = int (*)(void *obj, unsigned int nrQubits);
65using CreateWithStateFn = int (*)(void *obj, unsigned int nrQubits, const double *state);
66using ResetFn = int (*)(void *obj);
67using MeasureQubitCollapseFn = int (*)(void *obj, int qubitIndex);
68using MeasureQubitNoCollapseFn = int (*)(void *obj, int qubitIndex);
69using MeasureQubitsCollapseFn = int (*)(void *obj, int *qubits, int *bitstring, int bitstringLen);
70using MeasureQubitsNoCollapseFn = int (*)(void *obj, int *qubits, int *bitstring, int bitstringLen);
71using MeasureAllQubitsCollapseFn = unsigned long long (*)(void *obj);
72using MeasureAllQubitsNoCollapseFn = unsigned long long (*)(void *obj);
73using SaveStateFn = int (*)(void *obj);
74using SaveStateToHostFn = int (*)(void *obj);
75using SaveStateDestructiveFn = int (*)(void *obj);
76using RestoreStateFreeSavedFn = int (*)(void *obj);
77using RestoreStateNoFreeSavedFn = int (*)(void *obj);
78using FreeSavedStateFn = void (*)(void *obj);
79using CloneFn = void *(*)(void *obj);
80using SampleFn = int (*)(void *obj, unsigned int nSamples, long int *samples, unsigned int nBits, int *bitOrdering);
81using SampleAllFn = int (*)(void *obj, unsigned int nSamples, long int *samples);
82using AmplitudeFn = int (*)(void *obj, long long int state, double *real, double *imaginary);
83using ProbabilityFn = double (*)(void *obj, int *qubits, int *mask, int len);
84using BasisStateProbabilityFn = double (*)(void *obj, long long int state);
85using AllProbabilitiesFn = int (*)(void *obj, double *probabilities);
86using ExpectationValueFn = double (*)(void *obj, const char *pauliString, int len);
87using ApplyXFn = int (*)(void *obj, int qubit);
88using ApplyYFn = int (*)(void *obj, int qubit);
89using ApplyZFn = int (*)(void *obj, int qubit);
90using ApplyHFn = int (*)(void *obj, int qubit);
91using ApplySFn = int (*)(void *obj, int qubit);
92using ApplySDGFn = int (*)(void *obj, int qubit);
93using ApplyTFn = int (*)(void *obj, int qubit);
94using ApplyTDGFn = int (*)(void *obj, int qubit);
95using ApplySXFn = int (*)(void *obj, int qubit);
96using ApplySXDGFn = int (*)(void *obj, int qubit);
97using ApplyKFn = int (*)(void *obj, int qubit);
98using ApplyPFn = int (*)(void *obj, int qubit, double theta);
99using ApplyRxFn = int (*)(void *obj, int qubit, double theta);
100using ApplyRyFn = int (*)(void *obj, int qubit, double theta);
101using ApplyRzFn = int (*)(void *obj, int qubit, double theta);
102using ApplyUFn = int (*)(void *obj, int qubit, double theta, double phi, double lambda, double gamma);
103using ApplyCXFn = int (*)(void *obj, int controlQubit, int targetQubit);
104using ApplyCYFn = int (*)(void *obj, int controlQubit, int targetQubit);
105using ApplyCZFn = int (*)(void *obj, int controlQubit, int targetQubit);
106using ApplyCHFn = int (*)(void *obj, int controlQubit, int targetQubit);
107using ApplyCSXFn = int (*)(void *obj, int controlQubit, int targetQubit);
108using ApplyCSXDGFn = int (*)(void *obj, int controlQubit, int targetQubit);
109using ApplyCPFn = int (*)(void *obj, int controlQubit, int targetQubit, double theta);
110using ApplyCRxFn = int (*)(void *obj, int controlQubit, int targetQubit, double theta);
111using ApplyCRyFn = int (*)(void *obj, int controlQubit, int targetQubit, double theta);
112using ApplyCRzFn = int (*)(void *obj, int controlQubit, int targetQubit, double theta);
113using ApplyCCXFn = int (*)(void *obj, int controlQubit1, int controlQubit2, int targetQubit);
114using ApplySwapFn = int (*)(void *obj, int qubit1, int qubit2);
115using ApplyCSwapFn = int (*)(void *obj, int controlQubit, int qubit1, int qubit2);
116using ApplyCUFn = int (*)(void *obj, int controlQubit, int targetQubit, double theta, double phi, double lambda, double gamma);
117using GetApiVersionFn = uint32_t (*)(void);
118using GetCapabilitiesFn = uint64_t (*)(void);
119using GetLastErrorFn = const char *(*)(void);
120using ConfigureDistributionFn = int (*)(void *obj, const MgdDistributionConfig *config);
121using GetShardDevicesFn = int (*)(void *obj, int32_t *devices, uint32_t capacity);
122using GetGlobalQubitsFn = int (*)(void *obj, int32_t *qubits, uint32_t capacity);
123using GetQubitLayoutFn = int (*)(void *obj, int32_t *wires, uint32_t capacity);
124using RedistributeFn = int (*)(void *obj, const int32_t *global_qubits, uint32_t count);
125using SwapGlobalLocalQubitsFn = int (*)(void *obj, const int32_t *global_qubits, const int32_t *local_qubits, uint32_t count);
126using SynchronizeFn = int (*)(void *obj);
127using GetStateRangeFn = int (*)(void *obj, uint64_t begin, uint64_t end, double *output);
128using SetStateRangeFn = int (*)(void *obj, uint64_t begin, uint64_t end, const double *input);
129using GetLocalStateBoundsFn = int (*)(void *obj, uint64_t *begin, uint64_t *end);
130using GetLocalStateRangeFn = int (*)(void *obj, uint64_t begin, uint64_t end, double *output);
131using SetLocalStateRangeFn = int (*)(void *obj, uint64_t begin, uint64_t end, const double *input);
132using CreateWithBasisStateFn = int (*)(void *obj, uint32_t nrQubits, uint64_t basis);
133using ApplyOneQubitMatrixFn = int (*)(void *obj, int qubit, const double *matrix);
134using ApplyOneQubitMatrixWithLayoutFn = int (*)(void *obj, int qubit, const double *matrix, int layout);
135using ApplyTwoQubitMatrixFn = int (*)(void *obj, int qubit0, int qubit1, const double *matrix);
136using ApplyTwoQubitMatrixWithLayoutFn = int (*)(void *obj, int qubit0, int qubit1, const double *matrix, int layout);
137using ApplyThreeQubitMatrixFn = int (*)(void *obj, int qubit0, int qubit1, int qubit2, const double *matrix);
138using ApplyThreeQubitMatrixWithLayoutFn = int (*)(void *obj, int qubit0, int qubit1, int qubit2, const double *matrix, int layout);
139} // namespace Simulators::DistributedGpuApi
int(*)(void *obj, int *qubits, int *bitstring, int bitstringLen) MeasureQubitsCollapseFn
int(*)(void *obj, int qubit) ApplyZFn
int(*)(void *obj, uint64_t *begin, uint64_t *end) GetLocalStateBoundsFn
int(*)(void *obj, int qubit, const double *matrix) ApplyOneQubitMatrixFn
int(*)(void *obj, unsigned int nSamples, long int *samples) SampleAllFn
int(*)(void *obj, int useDoublePrecision) SetDataTypeFn
int(*)(void *obj, int controlQubit, int targetQubit, double theta) ApplyCRxFn
int(*)(void *obj, long long int state, double *real, double *imaginary) AmplitudeFn
int(*)(void *obj, int qubit0, int qubit1, int qubit2, const double *matrix) ApplyThreeQubitMatrixFn
int(*)(void *obj, int controlQubit, int targetQubit, double theta) ApplyCRzFn
int(*)(void *obj, int qubit, const double *matrix, int layout) ApplyOneQubitMatrixWithLayoutFn
int(*)(void *obj, int controlQubit, int targetQubit, double theta, double phi, double lambda, double gamma) ApplyCUFn
int(*)(void *obj) RestoreStateNoFreeSavedFn
int(*)(void *obj, int controlQubit, int qubit1, int qubit2) ApplyCSwapFn
int(*)(void *obj, int controlQubit, int targetQubit) ApplyCHFn
int(*)(int deviceId) SetGpuDeviceFn
void *(*)(void *lib, int backend) CreateStateVectorWithBackendFn
int(*)(void *obj) SaveStateDestructiveFn
int(*)(void *obj, int qubit) ApplyKFn
void(*)(void *obj) DestroyStateVectorFn
unsigned long long(*)(void *obj) MeasureAllQubitsNoCollapseFn
double(*)(void *obj, int *qubits, int *mask, int len) ProbabilityFn
int(*)(void *obj, int qubit) ApplySFn
int(*)(void *obj, uint64_t begin, uint64_t end, double *output) GetLocalStateRangeFn
int(*)(void *obj, const int32_t *global_qubits, uint32_t count) RedistributeFn
int(*)(void *obj, int qubit) ApplyTDGFn
int(*)(void *obj, int qubitIndex) MeasureQubitNoCollapseFn
int(*)(void *obj, int qubitIndex) MeasureQubitCollapseFn
void(*)(void *obj) FreeSavedStateFn
int(*)(void *obj, uint64_t begin, uint64_t end, const double *input) SetLocalStateRangeFn
int(*)(void *obj, unsigned int nSamples, long int *samples, unsigned int nBits, int *bitOrdering) SampleFn
int(*)(void *obj, int qubit, double theta) ApplyRyFn
int(*)(void *obj, int qubit, double theta, double phi, double lambda, double gamma) ApplyUFn
int(*)(void *obj, const MgdExExecutionConfig *config) SetExExecutionConfigFn
int(*)(void *obj, int qubit0, int qubit1, const double *matrix, int layout) ApplyTwoQubitMatrixWithLayoutFn
int(*)(void *obj, unsigned long long seed) SetSeedFn
int(*)(void *obj, const int32_t *global_qubits, const int32_t *local_qubits, uint32_t count) SwapGlobalLocalQubitsFn
int(*)(void *obj, int32_t *wires, uint32_t capacity) GetQubitLayoutFn
int(*)(void *obj, int qubit) ApplyYFn
int(*)(void *obj, int qubit0, int qubit1, int qubit2, const double *matrix, int layout) ApplyThreeQubitMatrixWithLayoutFn
int(*)(void *obj, int *qubits, int *bitstring, int bitstringLen) MeasureQubitsNoCollapseFn
int(*)(void *obj, int controlQubit, int targetQubit) ApplyCXFn
int(*)(void *obj, int controlQubit1, int controlQubit2, int targetQubit) ApplyCCXFn
int(*)(void *obj, int qubit, double theta) ApplyRzFn
int(*)(void *obj, int controlQubit, int targetQubit) ApplyCYFn
int(*)(void *obj, int qubit) ApplySXDGFn
int(*)(void *obj, uint64_t begin, uint64_t end, const double *input) SetStateRangeFn
int(*)(void *obj, int controlQubit, int targetQubit) ApplyCSXFn
int(*)(void *obj, int qubit, double theta) ApplyPFn
double(*)(void *obj, const char *pauliString, int len) ExpectationValueFn
int(*)(void *obj, int qubit, double theta) ApplyRxFn
int(*)(void *obj, int qubit) ApplyHFn
int(*)(void *obj, int qubit) ApplySDGFn
int(*)(void *obj, int controlQubit, int targetQubit) ApplyCSXDGFn
int(*)(void *obj, int qubit1, int qubit2) ApplySwapFn
int(*)(void *obj, int32_t *qubits, uint32_t capacity) GetGlobalQubitsFn
int(*)(void *obj, unsigned int nrQubits, const double *state) CreateWithStateFn
int(*)(void *obj, unsigned int nrQubits) CreateFn
int(*)(void *obj, int qubit) ApplyXFn
int(*)(void *obj, double *probabilities) AllProbabilitiesFn
double(*)(void *obj, long long int state) BasisStateProbabilityFn
int(*)(void *obj, int controlQubit, int targetQubit, double theta) ApplyCRyFn
int(*)(void *obj, int qubit0, int qubit1, const double *matrix) ApplyTwoQubitMatrixFn
int(*)(const char *licenseKey) ValidateLicenseFn
int(*)(void *obj, int controlQubit, int targetQubit) ApplyCZFn
void *(*)(void *lib) CreateStateVectorFn
int(*)(void *obj, int qubit) ApplyTFn
int(*)(void *obj, const MgdDistributionConfig *config) ConfigureDistributionFn
int(*)(void *obj) IsDoublePrecisionFn
int(*)(void *obj, int controlQubit, int targetQubit, double theta) ApplyCPFn
int(*)(void *obj, uint32_t nrQubits, uint64_t basis) CreateWithBasisStateFn
int(*)(void *obj, int32_t *devices, uint32_t capacity) GetShardDevicesFn
int(*)(void *obj, int qubit) ApplySXFn
int(*)(void *obj, uint64_t begin, uint64_t end, double *output) GetStateRangeFn
int(*)(void *obj) RestoreStateFreeSavedFn
const char *(*)(void) GetLastErrorFn
unsigned long long(*)(void *obj) MeasureAllQubitsCollapseFn
int(*)(void *obj) GetStateVectorGpuIdFn