Maestro 0.3.11
Unified interface for quantum circuit simulation
Loading...
Searching...
No Matches
DistributedGpuSimulator.h
Go to the documentation of this file.
1#pragma once
2#if defined(__linux__) && defined(INCLUDED_BY_FACTORY)
5
7{
8template <class Immediate> class DistributedFusionSimulator : public FusionSimulator<FusionState>
9{
10 public:
11 DistributedFusionSimulator() : FusionSimulator(std::make_shared<Immediate>())
12 {
13 }
14
15 unsigned GetGateFusionMaxQubits() const override
16 {
17 // Ex local (the default) and Ex MPI already queue/fuse in the plugin.
18 if (GetType() == SimulatorType::kDistMpiGpuSim || GetConfiguration("distributed_backend") != "conventional")
19 return 0;
20 return DistributedGpuLibrary::GetInstance()->HasThreeQubitMatrixAPI() ? 3 : 2;
21 }
22
23 std::string GetConfiguration(const char *key) const override
24 {
25 // Layout is an observation of executed gates, just like amplitudes.
26 if (std::string(key) == "distributed_qubit_layout")
27 const_cast<DistributedFusionSimulator *>(this)->Flush();
28 return FusionSimulator<FusionState>::GetConfiguration(key);
29 }
30
31 std::unique_ptr<ISimulator> Clone() override
32 {
33 auto copy = std::make_unique<DistributedFusionSimulator>();
34 CloneInto(*copy);
35 return copy;
36 }
37
38 protected:
39 // A dense matrix on a global qubit forces an exchange even when the fused
40 // structured gates were all diagonal.
41 bool PreserveStructuredGates() const override
42 {
43 return true;
44 }
45
46 bool UsesDestructiveStateStorage() const override
47 {
48 return true;
49 }
50};
51
52using DistributedGpuSimulator = DistributedFusionSimulator<ImmediateDistributedGpuSimulator>;
53using DistributedMpiGpuSimulator = DistributedFusionSimulator<ImmediateDistributedMpiGpuSimulator>;
54} // namespace Simulators::Private
55#endif
char * GetConfiguration(void *sim, const char *key)
unsigned GetGateFusionMaxQubits(void *sim)