Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions apps/qsim_amplitudes.cc
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
#include "../lib/circuit_qsim_parser.h"
#include "../lib/formux.h"
#include "../lib/fuser_mqubit.h"
#include "../lib/gates_qsim.h"
#include "../lib/io_file.h"
#include "../lib/operation.h"
#include "../lib/run_qsim.h"
#include "../lib/simmux.h"
#include "../lib/util.h"
Expand Down Expand Up @@ -160,7 +160,7 @@ int main(int argc, char* argv[]) {
return 1;
}

Circuit<GateQSim<float>> circuit;
Circuit<Operation<float>> circuit;
unsigned maxtime = opt.times.back();
if (!CircuitQsimParser<IOFile>::FromFile(maxtime, opt.circuit_file,
circuit)) {
Expand Down Expand Up @@ -191,7 +191,7 @@ int main(int argc, char* argv[]) {
using Simulator = Factory::Simulator;
using StateSpace = Simulator::StateSpace;
using State = StateSpace::State;
using Fuser = MultiQubitGateFuser<IO, GateQSim<float>>;
using Fuser = MultiQubitGateFuser<IO>;
using Runner = QSimRunner<IO, Fuser, Factory>;

auto measure = [&opt, &circuit](
Expand Down
6 changes: 3 additions & 3 deletions apps/qsim_base.cc
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@
#include "../lib/circuit_qsim_parser.h"
#include "../lib/formux.h"
#include "../lib/fuser_mqubit.h"
#include "../lib/gates_qsim.h"
#include "../lib/io_file.h"
#include "../lib/operation.h"
#include "../lib/run_qsim.h"
#include "../lib/simmux.h"
#include "../lib/util_cpu.h"
Expand Down Expand Up @@ -114,7 +114,7 @@ int main(int argc, char* argv[]) {
return 1;
}

Circuit<GateQSim<float>> circuit;
Circuit<Operation<float>> circuit;
if (!CircuitQsimParser<IOFile>::FromFile(opt.maxtime, opt.circuit_file,
circuit)) {
return 1;
Expand Down Expand Up @@ -144,7 +144,7 @@ int main(int argc, char* argv[]) {
using Simulator = Factory::Simulator;
using StateSpace = Simulator::StateSpace;
using State = StateSpace::State;
using Fuser = MultiQubitGateFuser<IO, GateQSim<float>>;
using Fuser = MultiQubitGateFuser<IO>;
using Runner = QSimRunner<IO, Fuser, Factory>;

StateSpace state_space = Factory(opt.num_threads).CreateStateSpace();
Expand Down
6 changes: 3 additions & 3 deletions apps/qsim_base_cuda.cu
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@
#include "../lib/circuit_qsim_parser.h"
#include "../lib/formux.h"
#include "../lib/fuser_mqubit.h"
#include "../lib/gates_qsim.h"
#include "../lib/io_file.h"
#include "../lib/operation.h"
#include "../lib/run_qsim.h"
#include "../lib/simulator_cuda.h"

Expand Down Expand Up @@ -114,7 +114,7 @@ int main(int argc, char* argv[]) {

using fp_type = float;

Circuit<GateQSim<fp_type>> circuit;
Circuit<Operation<fp_type>> circuit;
if (!CircuitQsimParser<IOFile>::FromFile(opt.maxtime, opt.circuit_file,
circuit)) {
return 1;
Expand All @@ -140,7 +140,7 @@ int main(int argc, char* argv[]) {
using Simulator = Factory::Simulator;
using StateSpace = Simulator::StateSpace;
using State = StateSpace::State;
using Fuser = MultiQubitGateFuser<IO, GateQSim<fp_type>>;
using Fuser = MultiQubitGateFuser<IO>;
using Runner = QSimRunner<IO, Fuser, Factory>;

StateSpace::Parameter param1;
Expand Down
6 changes: 3 additions & 3 deletions apps/qsim_base_custatevec.cu
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@
#include "../lib/circuit_qsim_parser.h"
#include "../lib/formux.h"
#include "../lib/fuser_mqubit.h"
#include "../lib/gates_qsim.h"
#include "../lib/io_file.h"
#include "../lib/operation.h"
#include "../lib/run_qsim.h"
#include "../lib/simulator_custatevec.h"
#include "../lib/util_custatevec.h"
Expand Down Expand Up @@ -108,7 +108,7 @@ int main(int argc, char* argv[]) {

using fp_type = float;

Circuit<GateQSim<fp_type>> circuit;
Circuit<Operation<fp_type>> circuit;
if (!CircuitQsimParser<IOFile>::FromFile(opt.maxtime, opt.circuit_file,
circuit)) {
return 1;
Expand Down Expand Up @@ -143,7 +143,7 @@ int main(int argc, char* argv[]) {
using Simulator = Factory::Simulator;
using StateSpace = Simulator::StateSpace;
using State = StateSpace::State;
using Fuser = MultiQubitGateFuser<IO, GateQSim<fp_type>>;
using Fuser = MultiQubitGateFuser<IO>;
using Runner = QSimRunner<IO, Fuser, Factory>;

Factory factory;
Expand Down
4 changes: 2 additions & 2 deletions apps/qsim_base_custatevecex.cu
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@

#include "../lib/circuit_qsim_parser.h"
#include "../lib/formux.h"
#include "../lib/gates_qsim.h"
#include "../lib/io_file.h"
#include "../lib/multiprocess_custatevecex.h"
#include "../lib/operation.h"
#include "../lib/run_custatevecex.h"
#include "../lib/simulator_custatevecex.h"
#include "../lib/util_custatevec.h"
Expand Down Expand Up @@ -106,7 +106,7 @@ int main(int argc, char* argv[]) {

using fp_type = float;

Circuit<GateQSim<fp_type>> circuit;
Circuit<Operation<fp_type>> circuit;
if (!CircuitQsimParser<IOFile>::FromFile(opt.maxtime, opt.circuit_file,
circuit)) {
return 1;
Expand Down
72 changes: 37 additions & 35 deletions apps/qsim_qtrajectory_cuda.cu
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@
#include "../lib/circuit_qsim_parser.h"
#include "../lib/expect.h"
#include "../lib/fuser_mqubit.h"
#include "../lib/gates_qsim.h"
#include "../lib/io_file.h"
#include "../lib/operation.h"
#include "../lib/qtrajectory.h"
#include "../lib/run_qsim.h"
#include "../lib/simulator_cuda.h"
Expand All @@ -44,10 +44,10 @@ struct Options {
unsigned verbosity = 0;
};

constexpr char usage[] = "usage:\n ./qsim_qtrajectory_cuda.x "
constexpr char usage[] = "usage:\n ./qsim_qtrajectory.x "
"-c circuit_file -d times_to_calculate_observables "
"-a amplitude_damping_const -p phase_damping_const "
"-t traj0 -n num_trajectories -f max_fused_size "
"-0 traj0 -n num_trajectories -f max_fused_size "
"-v verbosity\n";

Options GetOptions(int argc, char* argv[]) {
Expand All @@ -59,7 +59,7 @@ Options GetOptions(int argc, char* argv[]) {
return std::atoi(word.c_str());
};

while ((k = getopt(argc, argv, "c:d:a:p:t:n:f:v:")) != -1) {
while ((k = getopt(argc, argv, "c:d:a:p:0:n:f:v:")) != -1) {
switch (k) {
case 'c':
opt.circuit_file = optarg;
Expand All @@ -73,7 +73,7 @@ Options GetOptions(int argc, char* argv[]) {
case 'p':
opt.phase_damp_const = std::atof(optarg);
break;
case 't':
case '0':
opt.traj0 = std::atoi(optarg);
break;
case 'n':
Expand All @@ -85,7 +85,6 @@ Options GetOptions(int argc, char* argv[]) {
case 'v':
opt.verbosity = std::atoi(optarg);
break;
break;
default:
qsim::IO::errorf(usage);
exit(1);
Expand Down Expand Up @@ -120,47 +119,52 @@ bool ValidateOptions(const Options& opt) {
return true;
}

template <typename Gate, typename Channel1, typename Channel2>
std::vector<qsim::NoisyCircuit<Gate>> AddNoise(
const qsim::Circuit<Gate>& circuit, const std::vector<unsigned>& times,
template <typename FP, typename Channel1, typename Channel2>
std::vector<qsim::Circuit<qsim::Operation<FP>>> AddNoise(
const qsim::Circuit<qsim::Operation<FP>>& circuit,
const std::vector<unsigned>& times,
const Channel1& channel1, const Channel2& channel2) {
std::vector<qsim::NoisyCircuit<Gate>> ncircuits;
std::vector<qsim::Circuit<qsim::Operation<FP>>> ncircuits;
ncircuits.reserve(times.size());

qsim::NoisyCircuit<Gate> ncircuit;
qsim::Circuit<qsim::Operation<FP>> ncircuit;

ncircuit.num_qubits = circuit.num_qubits;
ncircuit.channels.reserve(5 * circuit.gates.size());
ncircuit.ops.reserve(5 * circuit.ops.size());

unsigned cur_time_index = 0;

for (std::size_t i = 0; i < circuit.gates.size(); ++i) {
const auto& gate = circuit.gates[i];
for (std::size_t i = 0; i < circuit.ops.size(); ++i) {
const auto& op = circuit.ops[i];

unsigned time = OpTime(op);
const auto& qubits = OpQubits(op);

ncircuit.channels.push_back(qsim::MakeChannelFromGate(3 * gate.time, gate));
ncircuit.ops.push_back(op);
OpBaseOperation(ncircuit.ops.back()).time = 3 * time;

for (auto q : gate.qubits) {
ncircuit.channels.push_back(channel1.Create(3 * gate.time + 1, q));
for (auto q : qubits) {
ncircuit.ops.push_back(channel1.Create(3 * time + 1, q));
}

for (auto q : gate.qubits) {
ncircuit.channels.push_back(channel2.Create(3 * gate.time + 2, q));
for (auto q : qubits) {
ncircuit.ops.push_back(channel2.Create(3 * time + 2, q));
}
Comment thread
sergeisakov marked this conversation as resolved.

unsigned t = times[cur_time_index];

if (i == circuit.gates.size() - 1 || t < circuit.gates[i + 1].time) {
if (i == circuit.ops.size() - 1 || t < OpTime(circuit.ops[i + 1])) {
ncircuits.push_back(std::move(ncircuit));

ncircuit = {};

if (i < circuit.gates.size() - 1) {
if (circuit.gates[i + 1].time > times.back()) {
if (i < circuit.ops.size() - 1) {
if (OpTime(circuit.ops[i + 1]) > times.back()) {
break;
}

ncircuit.num_qubits = circuit.num_qubits;
ncircuit.channels.reserve(5 * circuit.gates.size());
ncircuit.ops.reserve(5 * circuit.ops.size());
}

++cur_time_index;
Expand All @@ -170,13 +174,13 @@ std::vector<qsim::NoisyCircuit<Gate>> AddNoise(
return ncircuits;
}

template <typename Gate>
std::vector<std::vector<qsim::OpString<Gate>>> GetObservables(
template <typename FP>
std::vector<std::vector<qsim::OpString<FP>>> GetObservables(
unsigned num_qubits) {
std::vector<std::vector<qsim::OpString<Gate>>> observables;
std::vector<std::vector<qsim::OpString<FP>>> observables;
observables.reserve(num_qubits);

using X = qsim::GateX<typename Gate::fp_type>;
using X = qsim::GateX<FP>;

for (unsigned q = 0; q < num_qubits; ++q) {
observables.push_back({{{1.0, 0.0}, {X::Create(0, q)}}});
Expand Down Expand Up @@ -210,18 +214,16 @@ int main(int argc, char* argv[]) {
using Simulator = Factory::Simulator;
using StateSpace = Simulator::StateSpace;
using State = StateSpace::State;
using Gate = GateQSim<fp_type>;
using Fuser = MultiQubitGateFuser<IO, Gate>;
using FuserQT = MultiQubitGateFuser<IO, const Gate*>;
using RunnerQT = QSimRunner<IO, FuserQT, Factory>;
using QTSimulator = QuantumTrajectorySimulator<IO, Gate, RunnerQT>;
using Fuser = MultiQubitGateFuser<IO>;
using Runner = QSimRunner<IO, Fuser, Factory>;
using QTSimulator = QuantumTrajectorySimulator<IO, Runner>;

auto opt = GetOptions(argc, argv);
if (!ValidateOptions(opt)) {
return 1;
}

Circuit<Gate> circuit;
Circuit<Operation<fp_type>> circuit;
unsigned maxtime = opt.times.back();
if (!CircuitQsimParser<IOFile>::FromFile(maxtime, opt.circuit_file,
circuit)) {
Expand All @@ -230,7 +232,7 @@ int main(int argc, char* argv[]) {

if (opt.times.size() == 1
&& opt.times[0] == std::numeric_limits<unsigned>::max()) {
opt.times[0] = circuit.gates.back().time;
opt.times[0] = OpTime(circuit.ops.back());
}

StateSpace::Parameter param1;
Expand All @@ -256,7 +258,7 @@ int main(int argc, char* argv[]) {

auto noisy_circuits = AddNoise(circuit, opt.times, channel1, channel2);

auto observables = GetObservables<Gate>(circuit.num_qubits);
auto observables = GetObservables<fp_type>(circuit.num_qubits);

std::vector<std::vector<std::vector<std::complex<double>>>> results;
results.reserve(opt.num_trajectories);
Expand Down
6 changes: 3 additions & 3 deletions apps/qsim_von_neumann.cc
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@
#include "../lib/circuit_qsim_parser.h"
#include "../lib/formux.h"
#include "../lib/fuser_mqubit.h"
#include "../lib/gates_qsim.h"
#include "../lib/io_file.h"
#include "../lib/operation.h"
#include "../lib/run_qsim.h"
#include "../lib/simmux.h"
#include "../lib/util_cpu.h"
Expand Down Expand Up @@ -99,7 +99,7 @@ int main(int argc, char* argv[]) {
return 1;
}

Circuit<GateQSim<float>> circuit;
Circuit<Operation<float>> circuit;
if (!CircuitQsimParser<IOFile>::FromFile(opt.maxtime, opt.circuit_file,
circuit)) {
return 1;
Expand Down Expand Up @@ -129,7 +129,7 @@ int main(int argc, char* argv[]) {
using Simulator = Factory::Simulator;
using StateSpace = Simulator::StateSpace;
using State = StateSpace::State;
using Fuser = MultiQubitGateFuser<IO, GateQSim<float>>;
using Fuser = MultiQubitGateFuser<IO>;
using Runner = QSimRunner<IO, Fuser, Factory>;

auto measure = [&opt, &circuit](
Expand Down
10 changes: 5 additions & 5 deletions apps/qsimh_amplitudes.cc
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
#include "../lib/circuit_qsim_parser.h"
#include "../lib/formux.h"
#include "../lib/fuser_basic.h"
#include "../lib/gates_qsim.h"
#include "../lib/io_file.h"
#include "../lib/operation.h"
#include "../lib/run_qsimh.h"
#include "../lib/simmux.h"
#include "../lib/util.h"
Expand Down Expand Up @@ -174,7 +174,7 @@ int main(int argc, char* argv[]) {
return 1;
}

Circuit<GateQSim<float>> circuit;
Circuit<Operation<float>> circuit;
if (!CircuitQsimParser<IOFile>::FromFile(opt.maxtime, opt.circuit_file,
circuit)) {
return 1;
Expand Down Expand Up @@ -213,9 +213,9 @@ int main(int argc, char* argv[]) {
unsigned num_threads;
};

using HybridSimulator = HybridSimulator<IO, GateQSim<float>, BasicGateFuser,
For>;
using Runner = QSimHRunner<IO, HybridSimulator>;
using Fuser = BasicGateFuser<IO>;
using HybridSimulator = HybridSimulator<IO, For>;
using Runner = QSimHRunner<IO, Fuser, HybridSimulator>;

Runner::Parameter param;
param.prefix = opt.prefix;
Expand Down
Loading
Loading