From 711905aa4a03c1b755be397fca52dadba9786be4 Mon Sep 17 00:00:00 2001 From: Christopher Wood Date: Sat, 26 Sep 2020 15:42:32 -0400 Subject: [PATCH] Add AerProvider function for optimizing backend options --- qiskit/providers/aer/aerprovider.py | 9 +++++++++ qiskit/providers/aer/backends/aerbackend.py | 16 ++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/qiskit/providers/aer/aerprovider.py b/qiskit/providers/aer/aerprovider.py index 2fdba50080..305bd51a13 100644 --- a/qiskit/providers/aer/aerprovider.py +++ b/qiskit/providers/aer/aerprovider.py @@ -17,6 +17,8 @@ from qiskit.providers import BaseProvider from qiskit.providers.providerutils import filter_backends +from .aererror import AerError +from .backends.aerbackend import AerBackend from .backends.qasm_simulator import QasmSimulator from .backends.statevector_simulator import StatevectorSimulator from .backends.unitary_simulator import UnitarySimulator @@ -48,3 +50,10 @@ def backends(self, name=None, filters=None, **kwargs): def __str__(self): return 'AerProvider' + + @staticmethod + def optimize_backend_options(min_qubits=10, max_qubits=20, ntrials=10): + """Set optimal OpenMP and fusion options for backend.""" + from .profile import optimize_backend_options + return optimize_backend_options( + min_qubits=min_qubits, max_qubits=max_qubits, ntrials=ntrials) diff --git a/qiskit/providers/aer/backends/aerbackend.py b/qiskit/providers/aer/backends/aerbackend.py index ae467f8bf1..c3abcc6069 100644 --- a/qiskit/providers/aer/backends/aerbackend.py +++ b/qiskit/providers/aer/backends/aerbackend.py @@ -139,9 +139,25 @@ def _format_qobj(self, qobj, backend_options, noise_model): output = qobj.to_dict() # Add new parameters to config from backend options config = output["config"] + if backend_options is not None: for key, val in backend_options.items(): config[key] = val if not hasattr(val, 'to_dict') else val.to_dict() + + # Add default OpenMP options + if 'statevector_parallel_threshold' not in config and hasattr( + self, '_statevector_parallel_threshold'): + config['statevector_parallel_threshold'] = self._statevector_parallel_threshold + + # Add default fusion options + if 'fusion_threshold' not in config: + if 'gpu' in config.get('method', '') and hasattr(self, '_fusion_threshold_gpu'): + # Set GPU fusion threshold + config['fusion_threshold'] = self._fusion_threshold_gpu + elif hasattr(self, '_fusion_threshold'): + # Set CPU fusion threshold + config['fusion_threshold'] = self._fusion_threshold + # Add noise model to config if noise_model is not None: config["noise_model"] = noise_model