[llvm-dev] ScaffCC (A Framework for Compilation and Analysis of Quantum Computing Programs) migrated to LLVM 6.0
Leslie Zhai via llvm-dev
llvm-dev at lists.llvm.org
Thu Nov 2 21:24:15 PDT 2017
Hi ScaffCC and LLVM developers,
My sincere thanks goto:
* Yupan Liu https://github.com/climberpi he introduced ScaffCC to me,
and he wrote some popular science introduce about quantum computing
https://www.zhihu.com/people/climberpi/activities
* Ali JavadiAbhari https://github.com/ajavadia he is the core developer
of ScaffCC, count (ajavadia + epiqc) contribution together :)
https://github.com/epiqc/ScaffCC/graphs/contributors
* Adam Holmes https://github.com/ah744 he is also core developer and
provided kind response to ScaffCC users recently
https://github.com/epiqc/ScaffCC/issues/7#issuecomment-336499375
* Hal Finkel https://www.alcf.anl.gov/staff-directory/hal-finkel he
taught me how to use Internalize and GlobalDCE PASS correctly but not
monkey patch
http://lists.llvm.org/pipermail/llvm-dev/2017-October/118495.html
* Michael Kruse https://github.com/Meinersbur he taught me how to
workaround use LoopUnroll PASS
http://lists.llvm.org/pipermail/llvm-dev/2017-October/118420.html
and others who give me kind responses for teaching me about qubit and
quantum gate https://en.wikipedia.org/wiki/Quantum_gate
ScaffCC has been migrated to LLVM 6.0 https://github.com/ScaffCC and it
is just able to simulate qubit and quantum gate now, for example:
$ cat cat_state.n04.scaffold (Scaffold is a high level, C-like
programming language for expressing quantum algorithms)
qmodule catN(qbit *bit, const int n) {
H(bit[0]);
for (int i = 1; i < n; i++) {
CNOT(bit[i], bit[i - 1]);
}
}
qmodule unCatN(qbit *bit, const int n) {
for (int i = n - 1; i > 0; i--) {
CNOT(bit[i], bit[i - 1]);
}
H(bit[0]);
}
int main() {
qbit bits[4];
catN(bits, 4);
return 0;
}
$ ./scaffold.sh -fkR Algorithms/Cat_State/cat_state.n04.scaffold (a easy
to use helper shell script for clang and opt command)
[Scaffold.makefile] Compiling cat_state.n04_merged.scaffold ...
clang version 6.0.0 (git at github.com:llvm-mirror/clang.git
b4d187902f12e2f8240beb2b50227db637a6d5ba)
(git at github.com:llvm-mirror/llvm.git
2653dfaeb3502fd81dc99fde001be69d62a67d13)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /data/project/ScaffCC/ScaffCC/./build/bin
Found candidate GCC installation: /usr/lib/gcc/x86_64-redhat-linux/6.3.1
Found candidate GCC installation: /usr/lib/gcc/x86_64-redhat-linux/6.4.1
Selected GCC installation: /usr/lib/gcc/x86_64-redhat-linux/6.4.1
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Selected multilib: .;@m64
Found CUDA installation: /usr/local/cuda, version 9.0
"/data/project/ScaffCC/ScaffCC/build/bin/clang-6.0" -cc1 -triple
x86_64-unknown-linux-gnu -emit-llvm -disable-free -main-file-name
cat_state.n04_merged.scaffold -mrelocation-model static -mthread-model
posix -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases
-munwind-tables -fuse-init-array -target-cpu x86-64 -dwarf-column-info
-debugger-tuning=gdb -v -coverage-notes-file
/data/project/ScaffCC/ScaffCC/cat_state.n04.gcno -resource-dir
/data/project/ScaffCC/ScaffCC/build/lib/clang/6.0.0 -I
Algorithms/Cat_State/ -internal-isystem /usr/local/include
-internal-isystem
/data/project/ScaffCC/ScaffCC/build/lib/clang/6.0.0/include
-internal-externc-isystem /include -internal-externc-isystem
/usr/include -fdebug-compilation-dir /data/project/ScaffCC/ScaffCC
-ferror-limit 19 -fmessage-length 103 -fobjc-runtime=gcc
-fdiagnostics-show-option -fcolor-diagnostics -disable-O0-optnone -o
cat_state.n04.ll -x c cat_state.n04_merged.scaffold
clang -cc1 version 6.0.0 based upon LLVM 6.0.0svn default target
x86_64-unknown-linux-gnu
ignoring nonexistent directory "/include"
#include "..." search starts here:
#include <...> search starts here:
Algorithms/Cat_State
/usr/local/include
/data/project/ScaffCC/ScaffCC/build/lib/clang/6.0.0/include
/usr/include
End of search list.
[Scaffold.makefile] Transforming cbits ...
[Scaffold.makefile] O1 optimizations ...
[Scaffold.makefile] Unrolling Loops (1) ...
[Scaffold.makefile] Cloning Functions (1) ...
Functions Cloned: 1
[Scaffold.makefile] Dead Argument Elimination (1) ...
[Scaffold.makefile] Unrolling Loops (2) ...
[Scaffold.makefile] Cloning Functions (2) ...
Functions Cloned: 0
[Scaffold.makefile] Dead Argument Elimination (2) ...
[Scaffold.makefile] Unrolling Loops (3) ...
[Scaffold.makefile] Cloning Functions (3) ...
Functions Cloned: 0
[Scaffold.makefile] Dead Argument Elimination (3) ...
[Scaffold.makefile] Internalizing and Removing Unused Functions ...
[Scaffold.makefile] Toffoli Decomposition ...
[Scaffold.makefile] Inserting Reverse Functions...
[Scaffold.makefile] Flattening modules ...
[Scaffold.makefile] Flat QASM written to cat_state.n04.qasmf ...
$ cat cat_state.n04.qasmf
qubit bits0
qubit bits1
qubit bits2
qubit bits3
H bits0
CNOT bits1,bits0
CNOT bits2,bits1
CNOT bits3,bits2
$ ./cat_state.n04_qasm
H bits0
CNOT bits1,bits0
CNOT bits2,bits1
CNOT bits3,bits2
$ ./scaffold.sh -s Algorithms/Cat_State/cat_state.n04.scaffold
$ ./qx_simulator_1.0.beta_linux_x86_64 cat_state.n04.qc
=======================================================================================================
_______
/ ___ \ _ __ ____ ____ __ ___ __ __ __ ___
______ ____ ___
/ / / | | |/_/ / __/ / _/ / |/ / / / / / / / / _ |
/_ __/ / __ \ / _ \
/ /___/ / _> < _\ \ _/ / / /|_/ / / /_/ / / /__ / __
| / / / /_/ / / , _/
\______/\__\ /_/|_| /___/ /___/ /_/ /_/ \____/ /____//_/ |_|
/_/ \____/ /_/|_|
[v0.1 beta]
_______________________________________________________________________________________________________
[version 0.1 beta - Nader Khammassi - TU Delft, QuTech - 2016 -
report bugs to: n.khammassi at tudelft.nl]
[released under Apache License 2.0 terms, license copy at:
http://www.apache.org/licenses/LICENSE-2.0]
=======================================================================================================
[+] loading circuit from 'cat_state.n04.qc' ...
[-] loading quantum_code file 'cat_state.n04.qc'...
[+] code loaded successfully.
[+] initializing xpu...
[+] initialized.
[+] creating quantum register of 4 qubits...
[+] executing circuit 'default' (1 iter) ...
--------------[quantum state]--------------
(+0.707107,+0.000000) |0000> +
(+0.707107,+0.000000) |1111> +
-------------------------------------------
[>>] measurement prediction: | X | X | X | X |
-------------------------------------------
[>>] measurement register : | 0 | 0 | 0 | 0 |
-------------------------------------------
[+] circuit execution time: +0.000396 sec.
QX: Quantum Computer Simulator
https://qutech.nl/qx-quantum-computer-simulator/
About HACKING ScaffCC, just git checkout scaff-llvm release_31 branch
https://github.com/ScaffCC/scaff-llvm/tree/release_31
Then
$ git diff 02b87df98afb03136a1f5076c042696c98524947
to see how ScaffCC modified the original LLVM release_31 branch, so it
is able to:
* Add more quantum types
https://github.com/ScaffCC/scaff-llvm/blob/master/include/llvm/IR/Intrinsics.td#L254
* Add more quantum gates
https://github.com/ScaffCC/scaff-llvm/blob/master/include/llvm/IR/Intrinsics.td#L313
* Optimize Scaffold PASS
https://github.com/ScaffCC/scaff-llvm/tree/master/lib/Transforms/Scaffold
Also checkout scaff-clang release_31 branch
https://github.com/ScaffCC/scaff-clang/tree/release_31 to diff
WIP:
Quantum algorithm Shors
https://github.com/ScaffCC/ScaffCC/tree/master/Algorithms/Shors is too
heavy! it used up classical computer (my Thinkpad X220 notebook)
resource https://github.com/ScaffCC/ScaffCC/issues/3 it needs to
optimize Scaffold and LLVM PASS.
--
Regards,
Leslie Zhai -https://reviews.llvm.org/p/xiangzhai/
More information about the llvm-dev
mailing list