CNOTs ที่ได้รับอนุญาตทางร่างกายสำหรับชิป 19 บิตของ Rigetti และชิป BristleCone 72 qubit ของ Google เป็นอย่างไร


12

สำหรับชิปควอนตัมของ IBM แต่ละอันเราสามารถเขียนการแมปพจนานุกรมแต่ละตัวควบคุม qubit j ไปยังรายการเป้าหมายที่อนุญาตให้ใช้ทางกายภาพโดยสมมติว่า j คือการควบคุมของ CNOT ตัวอย่างเช่น,

ibmqx4_c_to_tars = {
    0: [],
    1: [0],
    2: [0, 1, 4],
    3: [2, 4],
    4: []}  # 6 edges

สำหรับชิป ibmqx4 ของพวกเขา

สิ่งที่จะเป็นคำสั่งนั้นสำหรับชิป Bristlecone 72 qubit ของ Google คุณสามารถเขียนพจน์เป็นความเข้าใจ คำถามเดียวกันสำหรับชิป 19 บิตของ Rigetti


คุณอาจเพิ่มลิงก์ไปยังคำอธิบายของชิปในคำถามได้หรือไม่ ฉันไม่พบข้อมูลจำเพาะชิปของ Regitti
Nelimee

Jim Wootton ควรรู้
rrtucci

คำตอบ:


12

การดำเนินการในท้องถิ่นของ Bristlecone คือ CZ ไม่ใช่ CNOT อย่างไรก็ตามคุณสามารถแปลงระหว่างสองกับประตู Hadamard ดังนั้นนี่คือความแตกต่างเล็กน้อย

Bristlecone สามารถดำเนินการ CZ ระหว่างคู่ qubits ใด ๆ ที่อยู่ติดกันในตาราง คุณสามารถดูกริดโดยการติดตั้งcirqและพิมพ์อุปกรณ์ Bristlecone:

$ pip install cirq
$ python
>>> import cirq
>>> print(cirq.google.Bristlecone)
                                             (0, 5)────(0, 6)
                                             │         │
                                             │         │
                                    (1, 4)───(1, 5)────(1, 6)────(1, 7)
                                    │        │         │         │
                                    │        │         │         │
                           (2, 3)───(2, 4)───(2, 5)────(2, 6)────(2, 7)───(2, 8)
                           │        │        │         │         │        │
                           │        │        │         │         │        │
                  (3, 2)───(3, 3)───(3, 4)───(3, 5)────(3, 6)────(3, 7)───(3, 8)───(3, 9)
                  │        │        │        │         │         │        │        │
                  │        │        │        │         │         │        │        │
         (4, 1)───(4, 2)───(4, 3)───(4, 4)───(4, 5)────(4, 6)────(4, 7)───(4, 8)───(4, 9)───(4, 10)
         │        │        │        │        │         │         │        │        │        │
         │        │        │        │        │         │         │        │        │        │
(5, 0)───(5, 1)───(5, 2)───(5, 3)───(5, 4)───(5, 5)────(5, 6)────(5, 7)───(5, 8)───(5, 9)───(5, 10)───(5, 11)
         │        │        │        │        │         │         │        │        │        │
         │        │        │        │        │         │         │        │        │        │
         (6, 1)───(6, 2)───(6, 3)───(6, 4)───(6, 5)────(6, 6)────(6, 7)───(6, 8)───(6, 9)───(6, 10)
                  │        │        │        │         │         │        │        │
                  │        │        │        │         │         │        │        │
                  (7, 2)───(7, 3)───(7, 4)───(7, 5)────(7, 6)────(7, 7)───(7, 8)───(7, 9)
                           │        │        │         │         │        │
                           │        │        │         │         │        │
                           (8, 3)───(8, 4)───(8, 5)────(8, 6)────(8, 7)───(8, 8)
                                    │        │         │         │
                                    │        │         │         │
                                    (9, 4)───(9, 5)────(9, 6)────(9, 7)
                                             │         │
                                             │         │
                                             (10, 5)───(10, 6)

นี่คือวิธีที่คุณจะได้รับชุดที่มีการดำเนินงาน CZ ที่ได้รับอนุญาต:

qubits = cirq.google.Bristlecone.qubits
allowed = {cirq.CZ(a, b)
           for a in qubits
           for b in qubits
           if a.is_adjacent(b)}

ชุดมีองค์ประกอบ 121 องค์ประกอบในนั้นและมันค่อนข้างสุ่มว่าคุณได้รับ CZ (x, y) หรือ CZ (y, x) ในชุดดังนั้นฉันจะไม่รวมชุดของชุดที่นี่

ข้อ จำกัด เพิ่มเติมที่ต้องจำไว้คือคุณไม่สามารถดำเนินการสอง CZs ติดกันได้ในเวลาเดียวกัน Cirq คำนึงถึงสิ่งนี้เมื่อสร้างวงจรที่กำหนดเป้าหมายที่ Bristlecone ตัวอย่างเช่น:

import cirq
device = cirq.google.Bristlecone
a, b, c, d, e = device.col(6)[:5]
circuit = cirq.Circuit.from_ops(
    cirq.CZ(a, b),
    cirq.CZ(c, d),
    cirq.CZ(a, b),
    cirq.CZ(d, e),
    device=device)
print(circuit)
# (0, 6): ───@───────@───
#            │       │
# (1, 6): ───@───────@───
# 
# (2, 6): ───────@───────
#                │
# (3, 6): ───────@───@───
#                    │
# (4, 6): ───────────@───

การดำเนินการสองครั้งแรกนั้นถูกเซเพราะพวกเขาอยู่ติดกับ CZ แต่สองคนที่สองไม่ใช่เพราะพวกเขาไม่ใช่


ใช้ API ได้ดี! ทางออกของคุณดีกว่าของฉัน! :)
Nelimee

ตอนนี้, โซลูชันของคุณก็ถูกต้องเช่นกัน, Circ ได้เลือกที่จะหมุนอาร์เรย์แบบสี่เหลี่ยม 45 องศาซึ่งค่อนข้าง
บิดเบี้ยว

1
อ้อเข้าใจแล้ว. พวกเขาทำเพราะข้อ จำกัด การวาด ascii
rrtucci

Google มีคอมพิวเตอร์ควอนตัมหรือไม่?
user1271772

@rrtucci ASCII มีเส้นทแยงมุม (/, \) ตัวเลือกพิกัดนั้นมีมากขึ้นตามแนวการลดความยากของงานต่าง ๆ เช่นคาดเดาว่ามี qubit (a, b) อยู่หรือไม่ สำหรับงานเหล่านั้นรูปร่างเพชรนั้นมีความยุ่งยากใกล้กับชายแดนในขณะที่รูปแบบกระดานหมากรุกนั้นมีความยุ่งยากตลอด
Craig Gidney

9

จากโพสต์บล็อกดั้งเดิมที่แสดงชิปควอนตัม Bristlecone นี่คือแผนที่การเชื่อมต่อของชิป:

แผนที่การเชื่อมต่อ Bristlecone

0

connectivity_map = {
    i : [i + offset
         for offset in (-6, -5, 5, 6) # values deduced by taking a qubit in the middle of
                                      # chip and computing the offsets between the choosen
                                      # qubit and it's 4 neighbours
         if ((0 <= i+offset < 72)             # the neighbour should be a valid qubit
             and ((i+offset) // 6 != i // 6)) # the neighbour should not be on the same line
    ]
    for i in range(72)
}

คำเตือน : การแสดงออกข้างต้นไม่ได้รับการยืนยันอย่างสมบูรณ์ ดูเหมือนว่าจะใช้ได้กับ qubits แรกดูเหมือนจะสมเหตุสมผลสำหรับฉัน แต่ก็ขึ้นอยู่กับคุณที่จะตรวจสอบว่าแผนที่นั้นถูกต้อง 100%

คำเตือน 2 : โพสต์บล็อกของ Google ไม่ได้พูดเกี่ยวกับทิศทางของการเชื่อมต่อระหว่าง qubits แผนที่การเชื่อมต่อที่ระบุข้างต้นถือว่าการเชื่อมต่อเป็นแบบทวิภาคี


3

PyQuil รุ่นปัจจุบันให้วัตถุ "ISA" ซึ่งเป็นที่เก็บข้อมูลที่คุณต้องการเกี่ยวกับตัวประมวลผลเชิงปริมาณของ Rigetti แต่มันไม่ได้จัดรูปแบบตามที่คุณร้องขอ ฉันเป็นโปรแกรมเมอร์ Python ผู้น่าสงสารดังนั้นคุณจะต้องแก้ตัวไม่ใช่ Pythonic-ness ของฉัน - แต่นี่เป็นตัวอย่างที่จะใช้device_nameและจัดรูปแบบ pyQuil ISA เป็นหนึ่งในพจนานุกรมของคุณ:

import pyquil.api as p

device_name = '19Q-Acorn'

isa = p.get_devices(as_dict=True)[device_name].isa
d = {}
for qubit in isa.qubits:
    l = []
    for edge in isa.edges:
        if qubit.id is edge.targets[0]:
            l += [edge.targets[1]]
        if qubit.id is edge.targets[1]:
            l += [edge.targets[0]]
    if not qubit.dead:
        d[qubit.id] = l

print(d)

เช่นเดียวกับในกรณีของ Google โดยทั่วไปเกตสองควิตที่มีอยู่ในโปรเซสเซอร์ Rigetti quantum คือ a CZซึ่ง (1) เป็นแบบสองทิศทาง (†) ในแง่ที่CZ q0 q1เหมือนกับCZ q1 q0และ (2) สามารถแปลงเป็นที่คุณต้องการได้อย่างง่ายดายCNOTs โดยประกบเป้าหมายด้วย Hadamard ประตู

† - การดำเนินการทางกายภาพของCZประตูในงานสถาปัตยกรรมยิ่งยวดจะส่งซึ่งเป็นเหตุผลที่คุณมักจะเห็นรายละเอียดสถาปัตยกรรมรวมถึงแต่ไม่CZ q0 q1 CZ q1 q0มันเป็นการจดชวเลขซึ่ง qubit มีส่วนร่วมในการปฏิสัมพันธ์ทางกายภาพครึ่งหนึ่งถึงแม้ว่าผลลัพธ์ (ไม่สนใจเอฟเฟกต์เสียง) เหมือนกันกับการสั่งซื้อทั้งคู่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.