MLIR方法图片示例

 MLIR方法图片示例

 

 

MLIR

更广泛的社区讨论强调的第二个特征是,典型的量子经典计算编译管道需要多个级别的IR抽象。QIR只代表编译器降低流水线中的一个抽象级别,它实际上是量子计算机物理控制所需转换为模拟脉冲之前的最低机器级别。当然,还有其他抽象层,特别是那些可能更接近程序员和所使用的语言的抽象层。通常,编译器优化可能更适合于语言抽象级别,在那里仍然可以表达更多的原始意图和语义。此外,多级IR抽象可以提供一种机制,用于通过基于LLVM的QIR将语言有效地映射到目标代码。换言之,能否提供一个强大且预先实现的基础设施,使通过多个级别的IR抽象将语言简化为量子经典机器级别的东西,如QIR?

最近的工作已经开始通过一种称为多级中间表示(MLIR)的新型经典编译器IR框架来解决这些挑战。MLIR促进了定义编译器IR的灵活方法,以及将一个IR抽象层逐步降低到较低层的系统。使用这种方法,您可以定义一个语言级别的IR,其中包含编程语言的独特语义,执行特定于语言的优化,然后将该表示降到较低级别的IR抽象,如LLVM机器级别的IR。如果您可以降到LLVM IR,则可以使用现有的LLVM工具链轻松生成可执行文件和对象代码。

最近,通过ORNL为QCOR C++编译器提供的一种新的方言实现,MLIR被扩展为支持量子计算语言功能(在MLIR中,方言是语言IR特定操作的集合)。该方言定义了接近可用量子语言中典型特征的操作,最重要的是,定义了以符合QIR规范的方式将MLIR方言表示向下翻译为LLVM IR所需的翻译机制。此外,由于MLIR中的方言是模块化组件,可以自由地利用现有方言进行经典控制流、变量声明和分配以及函数声明和实现。一种真正的混合量子经典IR,具有优化和降低QIR表示的能力。通过这种方式,如图1所示,构建新的量子经典语言编译器的原型相当于将语言解析或抽象语法树映射到量子经典MLIR表示,然后利用现有的基础设施降低到可执行文件和对象代码。

让再次用GHZ代码演示这个工作流,但这次增加了一点复杂性——具体来说,将把受控的not操作拉到它自己的子例程中,并添加经典的变量声明。此外,将添加一些X门,这些门都应该有效地抵消,任何好的编译器都应该能够检测并丢弃。

为了将像OpenQASM 3(或任何其他量子语言)这样的语言降低到QIR,只需将语言解析或抽象语法树映射到MLIR表示,利用新开发的量子方言与预先实现的经典方言操作。这种MLIR量子方言,以及执行量子经典优化并逐步降低到LLVM的其他基础设施,由开源QCOR项目提供。

您将在MLIR表示中注意到,可以定义经典变量并利用循环和条件等典型控制流结构,还可以声明和定义独立函数。这种表示的好处在于保留了语言级别的语义,并且可以应用量子优化和经典优化。具体来说,并不是所有的量子运算都消耗一个量子。量子值,并产生一个新的量子。Qubit值。这一功能使人们能够有效地绘制出价值使用定义链,这些链提供了量子数据如何流经IR节点的关键见解。这种数据流使人们能够有效地挑选出常见的模式,特别是那些作为常见电路优化的模式。例如,引入的额外X运算呈现了一种使用定义模式,其中X门消耗一个量子位并产生另一个量子位值,然后由另一个X门运算消耗。编译器可以很容易地搜索这种模式,并且可以丢弃操作。此外,通过首先应用常见的经典优化过程,如函数内联,可以跨循环边界优化这些量子门。

利用现有的经典优化,并对量子位数据流使用模式识别来挑选量子电路优化,得到了上面的代码片段ghz_opt。请注意,循环已展开,函数已内联,并且所有不必要的量子运算都已删除。

在将该MLIR实例降低到LLVM IR附着到QIR之后,可以容易地生成可执行的对象代码。剩下要做的就是链接到任何实现QIR规范的库。QCOR项目提供了一个XACC框架的委托,从而使这个简单的GHZ代码能够在IBM、Rigetti、IonQ和霍尼韦尔的物理架构以及广泛的模拟器上运行。如上面的shell命令所示,只需指定目标后端(cuQuantum SDK、IBM物理后端等),上述降低的工作流程将OpenQASM 3代码简化为混合量子经典二进制可执行文件。

 

 

MLIR dialects in the compiler and their dependencies. Additions marked in red.

编译器中的MLIR方言及其依赖关系。添加内容用红色标记。

 

 

Performance of each optimization implemented with 1 CU and í µí± = 11.

用1个CU和íµí±=11实现的每个优化的性能。

 

Figure 1: Our goal is to enable progressive lowering of quantum assembly languages to executable binaries via the quantum intermediate representation (QIR). We provide a new dialect to MLIR for quantum assembly languages that can be lowered to LLVM IR adherent to the QIR specification. Linking to a qcor-enabled, QIR runtime library implementation will enables a retargetable compiler that produces executable binaries and object code for available quantum co-processors. 

图1:目标是通过量子中间表示(QIR)将量子汇编语言逐步降低为可执行二进制文件。为量子汇编语言的MLIR提供了一种新的方言,该方言可以降到符合QIR规范的LLVM IR。链接到启用qcor的QIR运行库实现将启用可重定目标的编译器,该编译器为可用的量子协处理器生成可执行二进制文件和目标代码。

 

Figure 2: Bell state measurement expressed in the QIR. Qubits and Results are opaque types, while quantum runtime functions are declared and implementations are expected to be linked in later. 

图2:以QIR表示的贝尔状态测量。Qubits和Results是不透明的类型,而量子运行时函数是声明的,预计稍后会链接实现。

 

Figure 3: Graphical representation of the operations contributed from the quantum MLIR dialect. These operations enable qubit array allocation and deallocation, qubit addressing, quantum instruction invocation, and a mechanism for initializing and finalizing the QIR runtime implementation. Each operation keeps track of constant attributes, and can take operands as input and return specific values.

图3:量子MLIR方言提供的操作的图形表示。这些操作实现了量子位阵列分配和释放、量子位寻址、量子指令调用,以及初始化和完成QIR运行时实现的机制。每个操作都跟踪常量属性,并且可以将操作数作为输入并返回特定值。

 

Figure 4: Example MLIR instance using the quantum dialect. This code allocates a register of size 1, gets reference to that single qubit, executes a hadamard gate, and then deallocates the register. 

posted @ 2024-04-06 05:38  吴建明wujianming  阅读(34)  评论(0编辑  收藏  举报