Maestro 0.3.1
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>
8// MPI-independent declarations from include/gpusim_mpi_runtime.h.
10 uint32_t struct_size;
11 uint32_t reserved;
13};
15 uint32_t struct_size;
16 int32_t size;
17 int32_t rank;
19};
26 uint32_t struct_size;
27 uint32_t flags;
29 const int32_t *global_qubits;
30 uint32_t num_shards;
31 const int32_t *shard_devices;
32};
33using SetGpuDeviceFn = int (*)(int deviceId);
34using GetGpuDeviceCountFn = int (*)(void);
35using ValidateLicenseFn = int (*)(const char *licenseKey);
36using CheckLicenseFn = int (*)(void *state);
37using InitLibFn = void *(*)(void);
38using FreeLibFn = void (*)(void);
39using CreateStateVectorFn = void *(*)(void *lib);
40using CreateStateVectorWithBackendFn = void *(*)(void *lib, int backend);
41using GetBackendFn = int (*)(void *obj);
42using SetExExecutionConfigFn = int (*)(void *obj,
43 const MgdExExecutionConfig *config);
44using DestroyStateVectorFn = void (*)(void *obj);
45using SetDataTypeFn = int (*)(void *obj, int useDoublePrecision);
46using SetSeedFn = int (*)(void *obj, unsigned long long seed);
47using IsDoublePrecisionFn = int (*)(void *obj);
48using GetNrQubitsFn = int (*)(void *obj);
49using GetStateVectorGpuIdFn = int (*)(void *obj);
50using CreateFn = int (*)(void *obj, unsigned int nrQubits);
51using CreateWithStateFn = int (*)(void *obj, unsigned int nrQubits,
52 const double *state);
53using ResetFn = int (*)(void *obj);
54using MeasureQubitCollapseFn = int (*)(void *obj, int qubitIndex);
55using MeasureQubitNoCollapseFn = int (*)(void *obj, int qubitIndex);
56using MeasureQubitsCollapseFn = int (*)(void *obj, int *qubits, int *bitstring,
57 int bitstringLen);
58using MeasureQubitsNoCollapseFn = int (*)(void *obj, int *qubits,
59 int *bitstring, int bitstringLen);
60using MeasureAllQubitsCollapseFn = unsigned long long (*)(void *obj);
61using MeasureAllQubitsNoCollapseFn = unsigned long long (*)(void *obj);
62using SaveStateFn = int (*)(void *obj);
63using SaveStateToHostFn = int (*)(void *obj);
64using SaveStateDestructiveFn = int (*)(void *obj);
65using RestoreStateFreeSavedFn = int (*)(void *obj);
66using RestoreStateNoFreeSavedFn = int (*)(void *obj);
67using FreeSavedStateFn = void (*)(void *obj);
68using CloneFn = void *(*)(void *obj);
69using SampleFn = int (*)(void *obj, unsigned int nSamples, long int *samples,
70 unsigned int nBits, int *bitOrdering);
71using SampleAllFn = int (*)(void *obj, unsigned int nSamples,
72 long int *samples);
73using AmplitudeFn = int (*)(void *obj, long long int state, double *real,
74 double *imaginary);
75using ProbabilityFn = double (*)(void *obj, int *qubits, int *mask, int len);
76using BasisStateProbabilityFn = double (*)(void *obj, long long int state);
77using AllProbabilitiesFn = int (*)(void *obj, double *probabilities);
78using ExpectationValueFn = double (*)(void *obj, const char *pauliString,
79 int len);
80using ApplyXFn = int (*)(void *obj, int qubit);
81using ApplyYFn = int (*)(void *obj, int qubit);
82using ApplyZFn = int (*)(void *obj, int qubit);
83using ApplyHFn = int (*)(void *obj, int qubit);
84using ApplySFn = int (*)(void *obj, int qubit);
85using ApplySDGFn = int (*)(void *obj, int qubit);
86using ApplyTFn = int (*)(void *obj, int qubit);
87using ApplyTDGFn = int (*)(void *obj, int qubit);
88using ApplySXFn = int (*)(void *obj, int qubit);
89using ApplySXDGFn = int (*)(void *obj, int qubit);
90using ApplyKFn = int (*)(void *obj, int qubit);
91using ApplyPFn = int (*)(void *obj, int qubit, double theta);
92using ApplyRxFn = int (*)(void *obj, int qubit, double theta);
93using ApplyRyFn = int (*)(void *obj, int qubit, double theta);
94using ApplyRzFn = int (*)(void *obj, int qubit, double theta);
95using ApplyUFn = int (*)(void *obj, int qubit, double theta, double phi,
96 double lambda, double gamma);
97using ApplyCXFn = int (*)(void *obj, int controlQubit, int targetQubit);
98using ApplyCYFn = int (*)(void *obj, int controlQubit, int targetQubit);
99using ApplyCZFn = int (*)(void *obj, int controlQubit, int targetQubit);
100using ApplyCHFn = int (*)(void *obj, int controlQubit, int targetQubit);
101using ApplyCSXFn = int (*)(void *obj, int controlQubit, int targetQubit);
102using ApplyCSXDGFn = int (*)(void *obj, int controlQubit, int targetQubit);
103using ApplyCPFn = int (*)(void *obj, int controlQubit, int targetQubit,
104 double theta);
105using ApplyCRxFn = int (*)(void *obj, int controlQubit, int targetQubit,
106 double theta);
107using ApplyCRyFn = int (*)(void *obj, int controlQubit, int targetQubit,
108 double theta);
109using ApplyCRzFn = int (*)(void *obj, int controlQubit, int targetQubit,
110 double theta);
111using ApplyCCXFn = int (*)(void *obj, int controlQubit1, int controlQubit2,
112 int targetQubit);
113using ApplySwapFn = int (*)(void *obj, int qubit1, int qubit2);
114using ApplyCSwapFn = int (*)(void *obj, int controlQubit, int qubit1,
115 int qubit2);
116using ApplyCUFn = int (*)(void *obj, int controlQubit, int targetQubit,
117 double theta, double phi, double lambda,
118 double gamma);
119using GetApiVersionFn = uint32_t (*)(void);
120using GetCapabilitiesFn = uint64_t (*)(void);
121using GetLastErrorFn = const char *(*)(void);
122using ConfigureDistributionFn = int (*)(void *obj,
123 const MgdDistributionConfig *config);
124using GetShardDevicesFn = int (*)(void *obj, int32_t *devices,
125 uint32_t capacity);
126using GetGlobalQubitsFn = int (*)(void *obj, int32_t *qubits,
127 uint32_t capacity);
128using GetQubitLayoutFn = int (*)(void *obj, int32_t *wires, uint32_t capacity);
129using RedistributeFn = int (*)(void *obj, const int32_t *global_qubits,
130 uint32_t count);
131using SwapGlobalLocalQubitsFn = int (*)(void *obj, const int32_t *global_qubits,
132 const int32_t *local_qubits,
133 uint32_t count);
134using SynchronizeFn = int (*)(void *obj);
135using GetStateRangeFn = int (*)(void *obj, uint64_t begin, uint64_t end,
136 double *output);
137using SetStateRangeFn = int (*)(void *obj, uint64_t begin, uint64_t end,
138 const double *input);
139using GetLocalStateBoundsFn = int (*)(void *obj, uint64_t *begin,
140 uint64_t *end);
141using GetLocalStateRangeFn = int (*)(void *obj, uint64_t begin, uint64_t end,
142 double *output);
143using SetLocalStateRangeFn = int (*)(void *obj, uint64_t begin, uint64_t end,
144 const double *input);
145using CreateWithBasisStateFn = int (*)(void *obj, uint32_t nrQubits,
146 uint64_t basis);
147using ApplyOneQubitMatrixFn = int (*)(void *obj, int qubit,
148 const double *matrix);
149using ApplyOneQubitMatrixWithLayoutFn = int (*)(void *obj, int qubit,
150 const double *matrix,
151 int layout);
152using ApplyTwoQubitMatrixFn = int (*)(void *obj, int qubit0, int qubit1,
153 const double *matrix);
154using ApplyTwoQubitMatrixWithLayoutFn = int (*)(void *obj, int qubit0,
155 int qubit1,
156 const double *matrix,
157 int layout);
158} // namespace Simulators::DistributedGpuApi
int(*)(void *obj, int qubit0, int qubit1, const double *matrix) ApplyTwoQubitMatrixFn
int(*)(void *obj, int qubit) ApplyZFn
int(*)(void *obj, unsigned int nSamples, long int *samples, unsigned int nBits, int *bitOrdering) SampleFn
int(*)(void *obj, int useDoublePrecision) SetDataTypeFn
int(*)(void *obj, int controlQubit, int targetQubit, double theta) ApplyCRxFn
int(*)(void *obj) RestoreStateNoFreeSavedFn
int(*)(void *obj, int32_t *qubits, uint32_t capacity) GetGlobalQubitsFn
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
int(*)(void *obj, unsigned int nSamples, long int *samples) SampleAllFn
double(*)(void *obj, int *qubits, int *mask, int len) ProbabilityFn
int(*)(void *obj, int qubit) ApplySFn
int(*)(void *obj, int32_t *devices, uint32_t capacity) GetShardDevicesFn
int(*)(void *obj, int qubit0, int qubit1, const double *matrix, int layout) ApplyTwoQubitMatrixWithLayoutFn
int(*)(void *obj, int qubit) ApplyTDGFn
int(*)(void *obj, int *qubits, int *bitstring, int bitstringLen) MeasureQubitsCollapseFn
int(*)(void *obj, int qubitIndex) MeasureQubitNoCollapseFn
int(*)(void *obj, int controlQubit1, int controlQubit2, int targetQubit) ApplyCCXFn
int(*)(void *obj, int qubitIndex) MeasureQubitCollapseFn
int(*)(void *obj, unsigned int nrQubits, const double *state) CreateWithStateFn
int(*)(void *obj, int controlQubit, int qubit1, int qubit2) ApplyCSwapFn
void(*)(void *obj) FreeSavedStateFn
int(*)(void *obj, int controlQubit, int targetQubit, double theta) ApplyCPFn
int(*)(void *obj, int controlQubit, int targetQubit, double theta, double phi, double lambda, double gamma) ApplyCUFn
int(*)(void *obj, int qubit, double theta) ApplyRyFn
int(*)(void *obj, unsigned long long seed) SetSeedFn
int(*)(void *obj, int32_t *wires, uint32_t capacity) GetQubitLayoutFn
int(*)(void *obj, const int32_t *global_qubits, uint32_t count) RedistributeFn
int(*)(void *obj, int qubit) ApplyYFn
int(*)(void *obj, int controlQubit, int targetQubit, double theta) ApplyCRyFn
int(*)(void *obj, int controlQubit, int targetQubit) ApplyCXFn
int(*)(void *obj, uint64_t begin, uint64_t end, const double *input) SetLocalStateRangeFn
int(*)(void *obj, int controlQubit, int targetQubit, double theta) ApplyCRzFn
int(*)(void *obj, int qubit, double theta) ApplyRzFn
int(*)(void *obj, int controlQubit, int targetQubit) ApplyCYFn
int(*)(void *obj, uint64_t begin, uint64_t end, double *output) GetLocalStateRangeFn
double(*)(void *obj, const char *pauliString, int len) ExpectationValueFn
int(*)(void *obj, int qubit) ApplySXDGFn
int(*)(void *obj, int controlQubit, int targetQubit) ApplyCSXFn
int(*)(void *obj, int qubit, double theta) ApplyPFn
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, unsigned int nrQubits) CreateFn
int(*)(void *obj, int qubit) ApplyXFn
int(*)(void *obj, const int32_t *global_qubits, const int32_t *local_qubits, uint32_t count) SwapGlobalLocalQubitsFn
int(*)(void *obj, uint32_t nrQubits, uint64_t basis) CreateWithBasisStateFn
int(*)(void *obj, double *probabilities) AllProbabilitiesFn
double(*)(void *obj, long long int state) BasisStateProbabilityFn
int(*)(void *obj, const MgdDistributionConfig *config) ConfigureDistributionFn
int(*)(void *obj, uint64_t begin, uint64_t end, const double *input) SetStateRangeFn
int(*)(const char *licenseKey) ValidateLicenseFn
int(*)(void *obj, const MgdExExecutionConfig *config) SetExExecutionConfigFn
int(*)(void *obj, int controlQubit, int targetQubit) ApplyCZFn
void *(*)(void *lib) CreateStateVectorFn
int(*)(void *obj, int qubit) ApplyTFn
int(*)(void *obj) IsDoublePrecisionFn
int(*)(void *obj, uint64_t *begin, uint64_t *end) GetLocalStateBoundsFn
int(*)(void *obj, int qubit, const double *matrix, int layout) ApplyOneQubitMatrixWithLayoutFn
int(*)(void *obj, uint64_t begin, uint64_t end, double *output) GetStateRangeFn
int(*)(void *obj, int qubit) ApplySXFn
int(*)(void *obj) RestoreStateFreeSavedFn
int(*)(void *obj, int qubit, const double *matrix) ApplyOneQubitMatrixFn
int(*)(void *obj, long long int state, double *real, double *imaginary) AmplitudeFn
const char *(*)(void) GetLastErrorFn
int(*)(void *obj, int qubit, double theta, double phi, double lambda, double gamma) ApplyUFn
unsigned long long(*)(void *obj) MeasureAllQubitsCollapseFn
int(*)(void *obj, int *qubits, int *bitstring, int bitstringLen) MeasureQubitsNoCollapseFn
int(*)(void *state) CheckLicenseFn
int(*)(void *obj) GetStateVectorGpuIdFn