1. Ana sayfa
  2. İçerik planı
  3. Coupling map · Qiskit
Qiskit · devre yürütme

Coupling map — iki-qubit kapılarının izinli yolları

Donanım üzerinde rastgele iki qubit'i alıp aralarına bir cx koyamazsınız; donanım yalnızca fiziksel olarak bağlanmış qubit çiftlerinde iki-qubit kapısı uygulayabilir. Bu izinli çiftlerin tamamına coupling map denir; Qiskit bunu CouplingMap adında yönlü bir graf nesnesiyle modeller. Coupling map; transpiler için "devre nereye oturacak?" ve "kapılar nasıl yönlendirilecek?" sorularının tek kaynağıdır. Bu sayfa, ne fizik tarafındaki bağlanırlık ve topoloji dersini ne de Qiskit'in backend özellikleri okuma rehberini tekrar etmez; doğrudan Qiskit'teki graf nesnesi, mesafe metrikleri, alt graf seçimi, layout + routing ve SWAP bütçesi üzerine yoğunlaşır. Tüm kod yerel FakeBackend ile çalışır; hesap, ağ ya da token gerektirmez.

  • Nesne: CouplingMap
  • Metrik: mesafe · çap · SWAP
  • Karar: layout + routing

CouplingMap nesnesi ve yön kavramı

CouplingMap, Qiskit'in iki-qubit kapı izinlerini tutan küçük ama özenle tasarlanmış bir yönlü graftır. Düğümler fiziksel qubit indekslerini, kenarlar ise "bu yönde iki-qubit kapısı uygulanabilir" cümlesini taşır. Önemli ayrım şudur: graf yönlüdür; (0, 1) kenarının varlığı (1, 0) kenarının da var olduğunu otomatik olarak söylemez. Bazı donanımlarda fizik gerçekten simetriktir; bazılarında ise yalnızca bir yön kalibre edilmiştir ve ters yön transpiler tarafından açıkça "çevir + uygula + çevir" desenine genişletilir.

Nesne ile graf arasındaki ince çizgi

CouplingMap içeriği fizik gerçeğinin gösterimidir, algoritmik bir önerge değildir. Yani "burada cx koyayım" gibi bir niyet bildirmez; yalnızca "burada koyman fiziksel olarak mümkündür" der. Bu ayrım, transpiler'in haritalama (mapping) ve yönlendirme (routing) kararları için referans noktasıdır.

Coupling vs Target ilişkisi

Modern BackendV2 üzerinde coupling bilgisi backend.coupling_map ile dışa açıktır; ancak gerçek kaynak yine Target'tır. Hangi iki-qubit kapısının hangi yönde mümkün olduğu, target üzerindeki kapı-qargs kayıtlarıyla belirlenir. Yani "coupling map", target'tan türetilmiş topolojik bir özettir.

Sözcüğün anlamı Coupling map = iki-qubit kapılarının yapılabildiği yönlü kenarların listesi. İzinli yollar demek ücretsiz yollar demek değildir; her kenarın hata ve süre maliyeti vardır.

Donanımdan coupling okuma

Coupling bilgisini elde etmenin iki yolu vardır: doğrudan backend.coupling_map ile özet kenar listesini çekmek; ya da backend.target üzerinden iki-qubit kapısının kayıtlı olduğu qargs kümesini okumak. Birincisi kısa ve sezgisel, ikincisi daha eksiksizdir: target üzerinden okuyunca "hangi kapı, hangi yönde, hangi sürede, hangi hatayla?" sorularına aynı satırda yanıt bulabilirsiniz.

Statik fotoğraf ile çalışmak

FakeBackend nesneleri gerçek bir cihazın belirli bir andaki coupling map'ini taşır. Bu yüzden öğretim, otomatik test ve yerel keşif için ideal araçtırlar; ancak cihazın bugünkü kalibrasyonunu yansıtmaz. Coupling kenarları (topoloji) zaman içinde nadiren değişir; üzerlerindeki süre ve hata sayıları ise sık değişir.

Mevcudiyet kontrolü

Bir algoritma yazarken "(a, b) çiftinde cx var mı?" sorusunu sormak yerine "target içinde cx(a, b) kayıtlı mı, kalibrasyonu var mı?" sorusu daha sağlamdır. Bu cevap, transpiler'in basis_gates seçimi ile birleşince devre yazımına dönük tek bir disipline yaslanır.

Mesafe, çap ve en kısa yol

Coupling map bir graf olduğuna göre, üzerinde tanımlı doğal metrikler vardır: iki qubit arasındaki mesafe (en az kaç kenar geçilmesi gerektiği), çap (graf üzerindeki en uzak iki qubit arasındaki mesafe) ve en kısa yol (bu mesafeyi gerçekleyen kenar dizisi). Bu metrikler doğrudan yorumlanabilir: iki mantıksal qubit arasındaki fiziksel mesafe büyüdükçe transpiler'in eklediği SWAP sayısı da büyür.

Mesafe → SWAP sezgisi

Mesafesi d olan iki qubit'i yan yana getirmek için en az d − 1 SWAP gerekir. Her SWAP üç cx kapısına eşittir; bu, devrenin iki-qubit yükünü kabaca 3(d − 1) kadar artırır. Bu cümle hesap değil büyüklük tahminidir; gerçek sayıyı transpiler'in seçtiği yol belirler.

Çap neyi söyler?

Bir cihazın çapı, "en kötü durumda iki uzak qubit'i yan yana getirmek için kaç adım gerekir?" sorusunun cevabıdır. Tüm-tüm bağlanmış algoritmaları (örneğin geniş kapsamlı QFT ya da çok-qubit'li VQE ansatz) çalıştırırken bu sayı, beklenen SWAP yükünü tahmin etmek için iyi bir tek-sayı özetidir.

Sezgi cümlesi Mesafe büyüdükçe SWAP artar, SWAP arttıkça hata bütçesi şişer. Mesafe = ücret; çap = en kötü ücret.

Alt graf seçimi: hangi qubit yolu?

127-qubit'lik bir cihaz, 5-qubit'lik bir algoritma için 122 qubit'i kullanmamak zorundadır. Bu seçim önemsiz değildir: aynı cihazda farklı 5-qubit alt grafları, çok farklı iki-qubit hata oranlarına ve farklı topolojilere sahip olabilir. İyi bir alt graf; algoritmanın istediği iki-qubit etkileşimlerini düşük mesafede karşılayan ve seçilen kenarlardaki hata oranı toplamı küçük olan kümedir.

Kriterler birbirinin önünde

Kriterler çoğu zaman çatışır: en az SWAP üreten alt graf, hata oranı en düşük alt graftan farklı olabilir. Karar, hangi maliyetin baskın olduğuna göre verilir: kısa devre + yüksek kapı sayısı ise hata oranı; uzun devre + az kapı ise süre ve coherence baskın olur.

"En meşgul" qubit'lerden kaçınmak

Bir kalibrasyon penceresinde bazı kenarların ölçüldüğü hata oranları beklenmedik biçimde yüksek olabilir (kalibrasyon sürüklenmesi). Bu kenarlardan kaçınmak için alt graf seçimi, "hangi kenar bu pencerede güvenli?" sorusunu da içerir.

Layout: mantıksal → fiziksel atama

Transpile sürecinin omurgasında iki problem vardır. Birincisi layout: devredeki mantıksal qubit indekslerini, donanımdaki fiziksel qubit indekslerine atamak. İkincisi routing: bu atama altında yine uyumsuz kalan iki-qubit kapılarını SWAP ekleyerek uyumlu hâle getirmek. Layout kararının kalitesi, routing'in işini doğrudan etkiler.

Layout stratejileri

Qiskit transpiler farklı seviyelerde farklı layout stratejileri çalıştırır: trivial (mantıksal i → fiziksel i), dense (en yoğun bağlı alt graf), sabre (heuristic + örnekleme tabanlı), vf2 (alt graf izomorfizmi arayışı), noise-aware varyantlar. Strateji seçimi optimization_level üzerinden yönetilir; daha yüksek seviye, daha pahalı ama daha iyi layout arayışı anlamına gelir.

Sabit layout vs öneri

Önceden bildiğiniz iyi bir atamayı transpiler'a empoze etmek için initial_layout parametresi vardır. Bu, deneylerde tekrar üretilebilirliği artırır; "aynı qubit yolu, aynı kapılar" cümlesi raporlamayı kolaylaştırır.

Routing ve SWAP bütçesi

Layout yerleşse bile, algoritmanın istediği bazı iki-qubit etkileşimleri hâlâ uzak qubit çiftlerine düşebilir. Routing bu boşluğu SWAP zinciri ekleyerek doldurur. Routing kalitesi, transpile sonrasındaki iki-qubit kapı sayısı ve derinlik ile ölçülür; her ekstra SWAP, üç cx ve buna bağlı hata ve süre maliyeti demektir.

SWAP'in görünmez maliyeti

SWAP, devre yazarken elle eklediğimiz bir kapı değildir; transpiler tarafından "topolojiye uyum" gerekçesiyle eklenir. Bu nedenle "devrede yalnızca 8 cx vardı, sonuçta 35 cx oldu" durumu son derece olağandır; aradaki 27, SWAP bütçesidir.

Routing sezgisi

Algoritmanın etkileşim grafı (hangi qubit çiftleri arasında iki-qubit kapısı var?) ile donanımın coupling map'ini yan yana koyunca, "fark ne kadar?" sorusu görsel olarak da yanıtlanabilir. İki graf ne kadar örtüşürse SWAP yükü o kadar azalır.

Pratik kural algoritma grafı ≈ donanım grafı ne kadar yakınsa, transpile sonrası iki-qubit kapı sayısı o kadar düşük kalır. Uyum, layout'un başarısının sezgisel ölçüsüdür.

Yön farkı ve native iki-qubit kapısı

Coupling map yönlüdür: bazı kapı varyantları yalnızca tek yönde kalibre edilmiş olabilir (cx(0, 1) var ama cx(1, 0) yok). Bu durumda transpiler ters yönlü çağrıları açıkça "H çevir + cx + H çevir" biçiminde genişletir. Bu mekanik genişletme, fiziksel zaten "ters yönlü" çalışıyor olsa bile mantıksal hat üzerinde fazladan tek-qubit kapısı ekler.

Native iki-qubit kapısı farklılığı

Süperiletken cihazların hepsi cx ile sınırlı değildir; bazı yeni nesil cihazlar ecr (echoed cross-resonance) ya da cz türü kapıları native olarak verir. Coupling map aynı kalsa bile, hangi iki-qubit kapısının native olduğu transpile çıktısının biçimini değiştirir. Bu yüzden coupling'i okurken, hangi iki-qubit kapısı için izinli olduğunu da target'tan kontrol etmek gerekir.

Yön farkı algoritmaya nasıl yansır?

Algoritma yazımı sırasında bu detay genellikle gözükmez; transpiler arkada işini görür. Ancak derinlik raporu incelenirken "ben sadece bir cx koymuştum, sonuçta iki cx ve dört tek-qubit kapısı çıktı" cümlesi sık görülür. Açıklaması çoğunlukla yön farkı + native kapı genişletmesidir.

Özel ve ölçeklenebilir coupling tasarımı

Yerel deneyler için "kendi" coupling map'inizi tanımlayabilir, simülatöre takabilir ve algoritmanızın farklı topolojiler altındaki davranışını gözlemleyebilirsiniz. Bu, "aynı algoritma, farklı harita" deneyini ucuza yapmanın yoludur. Qiskit kütüphanesi tipik şekiller için hazır üreteçler de sağlar: doğrusal (line), çevrim (ring), tam-tüm bağlı (full), iki boyutlu kafes (grid) gibi.

Eğitim için "ideal" haritalar

Gerçek bir donanımda göremediğimiz "tam-tüm bağlı" topolojiler, transpile sonrası SWAP'in sıfıra indiği temiz bir karşılaştırma zemini sunar. Bu karşılaştırma, gerçek donanımdaki SWAP yükünün ne kadarının topolojiden geldiğini anlamak için iyi bir egzersizdir.

Ölçek ve sınır

Coupling map büyüdükçe layout araması maliyetlenir; bu yüzden transpiler bazı stratejiler için boyut sınırına takılabilir. Bu sayfada bunun fiziksel arka planını derinleştirmek yerine, kavramsal sonucu vurgulamak yeterlidir: büyük cihazlar için layout araması bazen ana maliyettir.

Kod laboratuvarı

Üç blok da tamamen yereldir. İlk blok FakeBackend üzerinden coupling kenarlarını ve temel graf metriklerini (mesafe matrisi, çap, kenar sayısı) hesaplar. İkinci blok aynı GHZ devresini iki farklı topoloji altında transpile edip iki-qubit kapı sayısı ve derinlik farkını gösterir. Üçüncü blok özel bir coupling map (doğrusal ve halka) üzerinde aynı küçük algoritmanın SWAP bütçesinin nasıl değiştiğini ortaya koyar.

Referans İskelet — Çalıştırmayın Aşağıdaki kalıp IBM hesabı ve token gerektirir; statik sayfada çalıştırılması önerilmez. Yalnızca akışı hatırlatmak içindir.
# from qiskit_ibm_runtime import QiskitRuntimeService
# service = QiskitRuntimeService()
# backend = service.backend("ibm_brisbane")
# cmap    = backend.coupling_map
# print(len(list(cmap.get_edges())), "kenar")
# print("çap =", cmap.distance_matrix.max())
coupling_map_metrics.py Python
from qiskit_ibm_runtime.fake_provider import FakeManilaV2

backend = FakeManilaV2()
cmap    = backend.coupling_map

edges = list(cmap.get_edges())
print("qubit         :", backend.num_qubits)
print("kenar sayısı  :", len(edges))
print("ilk 6 kenar   :", edges[:6])

# Tüm çiftler arası mesafe matrisi
D = cmap.distance_matrix              # numpy.ndarray, simetrik (yön bağımsız mesafe)
print("\nmesafe matrisi (kısaltılmış):")
for row in D[:5]:
    print(" ", " ".join(f"{int(v):2d}" for v in row[:5]))

print("\nçap (en uzak iki qubit) =", int(D.max()))
qiskit CouplingMap · graf metrikleri (yön bağımsız mesafe) UTF-8 · LF
topology_compare_transpile.py Python
from qiskit import QuantumCircuit, transpile
from qiskit_ibm_runtime.fake_provider import FakeManilaV2, FakeBelemV2

def ghz(n):
    qc = QuantumCircuit(n)
    qc.h(0)
    for i in range(n - 1):
        qc.cx(0, i + 1)            # 0 → herkes (uzaktan etkileşim)
    return qc

base_qc = ghz(5)

for cls in (FakeManilaV2, FakeBelemV2):
    backend = cls()
    tqc = transpile(base_qc, backend=backend, optimization_level=3, seed_transpiler=42)
    n_cx  = sum(1 for inst in tqc.data if inst.operation.name in ("cx", "ecr"))
    print(f"{backend.name:>14}  derinlik={tqc.depth():3d}  "
          f"2q kapı sayısı={n_cx:3d}")
qiskit Aynı devre · farklı topoloji · SWAP yükü farkı UTF-8 · LF
custom_coupling_line_vs_ring.py Python
from qiskit import QuantumCircuit, transpile
from qiskit.transpiler import CouplingMap

n = 6

line_edges = [(i, i + 1) for i in range(n - 1)] + [(i + 1, i) for i in range(n - 1)]
ring_edges = line_edges + [(n - 1, 0), (0, n - 1)]
line = CouplingMap(line_edges)
ring = CouplingMap(ring_edges)

# Algoritma: 0 ↔ herkes etkileşimi (uzak çiftler çoğunluk)
qc = QuantumCircuit(n)
qc.h(0)
for i in range(1, n):
    qc.cx(0, i)

basis = ["sx", "rz", "x", "cx"]
for name, cmap in (("line", line), ("ring", ring)):
    t = transpile(qc, coupling_map=cmap, basis_gates=basis,
                  optimization_level=3, seed_transpiler=7)
    cx = sum(1 for inst in t.data if inst.operation.name == "cx")
    print(f"{name:>5}  derinlik={t.depth():3d}  cx={cx:3d}  çap={cmap.distance_matrix.max():.0f}")
qiskit Özel coupling · doğrusal vs halka · SWAP bütçesi karşılaştırması UTF-8 · LF

İleri okuma ve özet

Coupling map, donanımın topolojik izinli yollar tablosudur. Mesafe ve çap gibi graf metrikleri, transpile sonrasındaki SWAP yükünün büyüklük sezgisini verir; alt graf seçimi ve layout, bu yükü pratik olarak şekillendirir; routing ise kalan boşluğu doldurur. Algoritmanın etkileşim grafı ile donanımın coupling map'i ne kadar örtüşürse, devreniz o kadar "donanıma uygun" demektir.

Özet Coupling map = yönlü iki-qubit izin grafı. Mesafe SWAP'ı, SWAP hatayı, hata güveni şekillendirir. Algoritma grafını donanım grafına yaklaştırmak, transpile kalitesinin en sağlam tek cümlelik özetidir.