作业引擎/量子引擎

作业引擎/量子引擎层(job engine)是量子操作系统的核心,主要用来解析、转译、优化、调用测控系统或真机执行量子程序、得到测量结果,必要时会进行量子线路聚合/拆分等优化。

用户调用作业提交API后,量子作业会被Prefect组件调度,随后作业引擎会被Prefect组件以进程形式运行。

作业引擎启动后,会加载用户作业提交API中的参数,然后根据作业中指定的设备后端(backend)所关联的驱动会被实例化,随后引擎层会调用驱动实例中的方法来和厂商量子真机进行交互,并获取测量结果。

作业引擎调用驱动和转译器

引擎层核心调用逻辑如下:

job_flow ->
   loop src_code_list  # 循环作业中的源代码列表(source_code)
   [
    init_driver()  # 初始化驱动
    parse()  # 源代码解析
     init_transpiler()  # 初始化转译器
     transpile()  # 进行转译
     results = run_driver()  # 运行驱动中的run函数
    return results

      run_code ->
          init_driver ->  # 初始化驱动
              driver.validate_driver_configs(device_configs)  # 验证驱动配置
              driver.set_configs(device_configs)  # 驱动中加载设备配置
              driver.init_driver() ->  # 驱动初始化
              driver.fetch_configs() ->  # 驱动动态获取真机配置信息
          init_transpiler ->  # 初始化转译器
          flow_parse ->  # 解析源代码
              transpiler.parse() ->  # 调用转译器解析源代码
          flow_transpile ->  # 转译
              transpiler.transpile() ->  # 调用转译器进行转译
          flow_run_driver ->  # 驱动运行
              driver_run ->  # 驱动运行
                  driver.run() / driver.dry_run() ->  # 运行驱动中的run(真实运行)或者dry_run(模拟运行/空跑)
      get_results  # 获取运行结果
   ]