Examples#
Library initialization#
#include <custabilizer.h>
int main() {
custabilizerHandle_t handle;
custabilizerCreate(&handle);
custabilizerDestroy(handle);
return 0;
}
Simple circuit simulation#
This example demonstrates how to create a circuit and apply it using custabilizerFrameSimulatorApplyCircuit().
#include <custabilizer.h>
#include <cuda_runtime.h>
int main() {
// Create library handle
custabilizerHandle_t handle;
custabilizerCreate(&handle);
// Define a simple circuit
const char* circuitString =
"X_ERROR(0.01) 0 1\n"
"H 0\n"
"CNOT 0 1\n"
"M 0 1\n";
// Create circuit
int64_t bufferSize;
custabilizerCircuitSizeFromString(handle, circuitString, &bufferSize);
void* bufferDevice;
cudaMalloc(&bufferDevice, bufferSize);
custabilizerCircuit_t circuit;
custabilizerCreateCircuitFromString(handle, circuitString, bufferDevice,
bufferSize, &circuit);
// Set up frame simulator parameters
int64_t numQubits = 2;
int64_t numShots = 1017;
int64_t numMeasurements = 2;
int64_t stride = ((numShots + 7) / 8 + 3) & ~3; // Pad to multiple of 4
// Create frame simulator
custabilizerFrameSimulator_t frameSimulator;
custabilizerCreateFrameSimulator(handle, numQubits, numShots,
numMeasurements, stride, &frameSimulator);
// Allocate and initialize bit tables
int64_t bitTableBytes = numQubits * stride;
int64_t mTableBytes = numMeasurements * stride;
custabilizerBitInt_t* xTableDevice;
custabilizerBitInt_t* zTableDevice;
custabilizerBitInt_t* mTableDevice;
cudaMalloc(&xTableDevice, bitTableBytes);
cudaMalloc(&zTableDevice, bitTableBytes);
cudaMalloc(&mTableDevice, mTableBytes);
cudaMemset(xTableDevice, 0, bitTableBytes);
cudaMemset(zTableDevice, 0, bitTableBytes);
cudaMemset(mTableDevice, 0, mTableBytes);
// Apply circuit to the Pauli frames
uint64_t seed = 42;
int randomizeFrameAfterMeasurement = 1;
cudaStream_t stream = 0;
custabilizerFrameSimulatorApplyCircuit(handle, frameSimulator, circuit,
randomizeFrameAfterMeasurement, seed,
xTableDevice, zTableDevice, mTableDevice,
stream);
cudaStreamSynchronize(stream);
// Clean up
cudaFree(xTableDevice);
cudaFree(zTableDevice);
cudaFree(mTableDevice);
custabilizerDestroyFrameSimulator(frameSimulator);
custabilizerDestroyCircuit(circuit);
cudaFree(bufferDevice);
custabilizerDestroy(handle);
return 0;
}