{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import sys\n", "import time\n", "import pandas as pd\n", "import numpy as np\n", "\n", "# QCGPU Imports\n", "import qcgpu\n", "\n", "# ProjectQ Imports\n", "from projectq import MainEngine\n", "import projectq.ops as ops\n", "from projectq.backends import Simulator\n", "from projectq.types import Qureg\n", "\n", "# Qiskit Imports\n", "from qiskit import ClassicalRegister, QuantumRegister\n", "from qiskit import QuantumCircuit, execute" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def bench_qcgpu(n, depth):\n", " state = qcgpu.State(n)\n", "\n", " h = qcgpu.gate.h()\n", " x = qcgpu.gate.x()\n", " t = qcgpu.gate.t()\n", "\n", " print('started')\n", " start = time.time()\n", "\n", " for level in range(depth):\n", " for q in range(n):\n", " \n", " state.apply_gate(h, q)\n", " state.apply_gate(t, q)\n", "\n", " if q != 0:\n", " state.apply_controlled_gate(x, q, 0)\n", " \n", " runtime = time.time() - start\n", " print('ended: ', runtime)\n", " return runtime\n", " \n", "def bench_projectq(n, depth):\n", " eng = MainEngine(backend=Simulator(gate_fusion=True), engine_list=[])\n", " qbits = eng.allocate_qureg(n)\n", "\n", " print('started')\n", " start = time.time()\n", "\n", " for level in range(depth):\n", " print(depth-level)\n", " for q in qbits:\n", " ops.H | q\n", " ops.T | q\n", " if q != qbits[0]:\n", " ops.CNOT | (q, qbits[0])\n", "\n", " runtime = time.time() - start\n", " print('ended: ', runtime)\n", "\n", " for q in qbits:\n", " ops.Measure | q\n", " eng.flush()\n", " return runtime\n", "\n", "def bench_qiskit(n, depth):\n", " q = QuantumRegister(n)\n", " c = ClassicalRegister(n)\n", " qc = QuantumCircuit(q, c)\n", "\n", " \n", " \n", " for level in range(depth):\n", " for i in range(n):\n", " qc.h(q[i])\n", " qc.t(q[i])\n", "\n", " if i != 0:\n", " qc.cx(q[i], q[0])\n", " \n", " \n", " \n", " qc.measure(q, c)\n", "\n", " print('started')\n", " start = time.time()\n", " \n", " job_sim = execute(qc, \"local_qasm_simulator\")\n", " \n", " runtime = time.time() - start\n", " print('ended: ', runtime)\n", " return runtime\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "bench_qcgpu(28,3)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "started\n", "3\n", "2\n", "1\n", "ended: 29.044461727142334\n" ] }, { "ename": "KeyboardInterrupt", "evalue": "\n raised in:\n' File \"/home/adam/.local/lib/python3.6/site-packages/projectq/backends/_sim/_simulator.py\", line 366, in _handle'\n' out = self._simulator.measure_qubits(ids)'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mbench_projectq\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m28\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m\u001b[0m in \u001b[0;36mbench_projectq\u001b[0;34m(n, depth)\u001b[0m\n\u001b[1;32m 41\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 42\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mq\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mqbits\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 43\u001b[0;31m \u001b[0mops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mMeasure\u001b[0m \u001b[0;34m|\u001b[0m \u001b[0mq\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 44\u001b[0m \u001b[0meng\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mflush\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 45\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mruntime\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/lib/python3.6/site-packages/projectq/ops/_gates.py\u001b[0m in \u001b[0;36m__or__\u001b[0;34m(self, qubits)\u001b[0m\n\u001b[1;32m 282\u001b[0m \u001b[0mnum_qubits\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 283\u001b[0m \u001b[0mcmd\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgenerate_command\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mqubit\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 284\u001b[0;31m \u001b[0mapply_command\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcmd\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 285\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mnum_qubits\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 286\u001b[0m warnings.warn(\"Pending syntax change in future versions of \"\n", "\u001b[0;32m~/.local/lib/python3.6/site-packages/projectq/ops/_command.py\u001b[0m in \u001b[0;36mapply_command\u001b[0;34m(cmd)\u001b[0m\n\u001b[1;32m 56\u001b[0m \"\"\"\n\u001b[1;32m 57\u001b[0m \u001b[0mengine\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcmd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mengine\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 58\u001b[0;31m \u001b[0mengine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreceive\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mcmd\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 59\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 60\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/lib/python3.6/site-packages/projectq/cengines/_main.py\u001b[0m in \u001b[0;36mreceive\u001b[0;34m(self, command_list)\u001b[0m\n\u001b[1;32m 264\u001b[0m then send on)\n\u001b[1;32m 265\u001b[0m \"\"\"\n\u001b[0;32m--> 266\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcommand_list\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 267\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 268\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcommand_list\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/lib/python3.6/site-packages/projectq/cengines/_main.py\u001b[0m in \u001b[0;36msend\u001b[0;34m(self, command_list)\u001b[0m\n\u001b[1;32m 286\u001b[0m \"\\n\" + repr(last_line[-2]))\n\u001b[1;32m 287\u001b[0m \u001b[0mcompact_exception\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__cause__\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 288\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mcompact_exception\u001b[0m \u001b[0;31m# use verbose=True for more info\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 289\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 290\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mflush\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdeallocate_qubits\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mKeyboardInterrupt\u001b[0m: \n raised in:\n' File \"/home/adam/.local/lib/python3.6/site-packages/projectq/backends/_sim/_simulator.py\", line 366, in _handle'\n' out = self._simulator.measure_qubits(ids)'" ] } ], "source": [ "bench_projectq(28,3)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "started\n", "ended: 0.684215784072876\n" ] }, { "data": { "text/plain": [ "0.684215784072876" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bench_qiskit(28,3)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.6" } }, "nbformat": 4, "nbformat_minor": 2 }