ScaffCC是2015年左右由普林斯顿大学和加州大学圣芭芭拉联合研发的量子编译器。在当时,量子编程语言和量子编译器的发展还处在早期阶段。
量子算法的工程化实现和性能分析亟需量子编程模型和量子编译器的支撑,因此,Frederic和Margaret带领团队的博士生Ali JavadiAbhari研发了Scaffold量子编程语言和ScaffCC量子编译器。目前,Ali JavadiAbhari在IBM从事量子软件相关的工作。
JAVADIABHARI, Ali, et al. ScaffCC: Scalable compilation and analysis of quantum programs. Parallel Computing, 2015, 45: 2-17.
LITTEKEN, Andrew, et al. An updated LLVM-based quantum research compiler with further OpenQASM support. Quantum Science and Technology, 2020.
这两篇文献相隔时间较长,其主要原因大概在于Ali JavadiAbhari从普林斯顿大学博士毕业之后进入IBM工作,更多的精力参与到了以Python语言为主的Qiskit中。此外,实现量子编译器理论上难度不大,但是工程挑战极大。
第一篇论文是早期关于ScaffCC量子编译器的论文,内容相对较少,对于很多工程实现细节并没有给出太多介绍;第二篇论文更多的是从工程化实现的角度分析了ScaffCC量子编译器的具体实现细节。
https://github.com/epiqc/ScaffCC
下面用一个最简单的例子对ScaffCC的基本功能进行介绍。
下面的代码是ScaffCC提供的一个简单的示例程序。从程序不难看出,Scaffold编程语言是一种非常接近于C语言的量子编程语言。Scaffold对于函数和循环都提供了相关的支持。
使用ScaffCC量子编译器能够将上述代码编译为OpenQASM的量子汇编程序,同时,也能够对量子程序所需要的资源进行分析。具体的命令行如下所示:
./scaffold.sh Algorithms/Cat_State/cat_state.n04.scaffold
编译过程中,其实ScaffCC调用了系统中预置的pass,编译器的输出如下所示:
执行完之后的资源分析结果如下所示。从图中可以看出该程序共需要使用4个量子比特,一个Hadamard门和3个CNOT门。
生成的量子程序可以加载到Delft研发的QX量子模拟器中,运行结果如下所示:
为了精简篇幅,对于ScaffCC的介绍会形成系列性的文章,欢迎持续关注。