Leslie Zhai via llvm-dev
2017-Nov-03 04:24 UTC
[llvm-dev] ScaffCC (A Framework for Compilation and Analysis of Quantum Computing Programs) migrated to LLVM 6.0
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/
Leslie Zhai via llvm-dev
2017-Nov-03 04:48 UTC
[llvm-dev] ScaffCC (A Framework for Compilation and Analysis of Quantum Computing Programs) migrated to LLVM 6.0
Ali JavadiAbhari, Shruti Patil, Daniel Kudrow, Jeff Heckey, Alexey Lvov, Frederic Chong and Margaret Martonosi, ScaffCC: A Framework for Compilation and Analysis of Quantum Computing Programs, ACM International Conference on Computing Frontiers (CF 2014), Cagliari, Italy, May 2014 在 2017年11月03日 12:24, Leslie Zhai 写道:> 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/