Commit 831ca5a1 authored by Nguyen, Thien Minh's avatar Nguyen, Thien Minh
Browse files

Execute qcor pass manager in VQPE evaluation



Signed-off-by: default avatarThien Nguyen <nguyentm@ornl.gov>
parent f1083894
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -10,6 +10,13 @@ bool CostFunctionEvaluator::initialize(Observable *observable,
  return target_operator != nullptr;
}

void executePassManager(
    std::vector<std::shared_ptr<CompositeInstruction>> evalKernels) {
  for (auto &subKernel : evalKernels) {
    execute_pass_manager(subKernel);
  }
}

QuantumSimulationModel
ModelBuilder::createModel(Observable *obs, TdObservable td_ham,
                          const HeterogeneousMap &params) {
+4 −0
Original line number Diff line number Diff line
@@ -171,5 +171,9 @@ getObjEvaluator(PauliOperator &obs, const std::string &name = "default",
                const HeterogeneousMap &init_params = {}) {
  return getObjEvaluator(&obs, name, init_params);
}

// Helper to apply optimization/placement before evaluation:
void executePassManager(
    std::vector<std::shared_ptr<CompositeInstruction>> evalKernels);
} // namespace qsim
} // namespace qcor
 No newline at end of file
+1 −0
Original line number Diff line number Diff line
@@ -161,6 +161,7 @@ double PhaseEstimationObjFuncEval::evaluate(
  auto qpu = xacc::internal_compiler::get_qpu();
  auto temp_buffer = xacc::qalloc(nbQubits + 1);
  // Execute all sub-kernels
  executePassManager(fsToExec);
  qpu->execute(temp_buffer, fsToExec);

  // Assemble execution data into a fast look-up map
+8 −4
Original line number Diff line number Diff line
@@ -18,10 +18,14 @@ std::string __placement_name = "";
std::vector<int> __qubit_map = {};
std::string __qrt_env = "nisq";

void execute_pass_manager() {
void execute_pass_manager(
    std::shared_ptr<CompositeInstruction> optional_composite) {
  qcor::internal::PassManager passManager(__opt_level, __qubit_map,
                                          __placement_name);
  auto optData = passManager.optimize(::quantum::qrt_impl->get_current_program());
  auto kernelToExecute = optional_composite
                             ? optional_composite
                             : ::quantum::qrt_impl->get_current_program();
  auto optData = passManager.optimize(kernelToExecute);

  std::vector<std::string> user_passes;
  if (!__user_opt_passes.empty()) {
@@ -37,7 +41,7 @@ void execute_pass_manager() {
  // Runs user-specified passes
  for (const auto &user_pass : user_passes) {
    optData.emplace_back(
        qcor::internal::PassManager::runPass(user_pass, ::quantum::qrt_impl->get_current_program()));
        qcor::internal::PassManager::runPass(user_pass, kernelToExecute));
  }

  if (__print_opt_stats) {
@@ -47,7 +51,7 @@ void execute_pass_manager() {
    }
  }

  passManager.applyPlacement(::quantum::qrt_impl->get_current_program());
  passManager.applyPlacement(kernelToExecute);
}

std::vector<int> parse_qubit_map(const char *qubit_map_str) {
+4 −1
Original line number Diff line number Diff line
@@ -187,7 +187,10 @@ extern std::vector<int> __qubit_map;
extern std::vector<int> parse_qubit_map(const char *qubit_map_str);
extern void apply_decorators(const std::string &decorator_cmdline_string);
extern std::string __qrt_env;
void execute_pass_manager();
// Execute the pass manager on the provided kernel.
// If none provided, execute the pass manager on the current QRT kernel.
void execute_pass_manager(
    std::shared_ptr<CompositeInstruction> optional_composite = nullptr);

} // namespace internal_compiler
} // namespace xacc