1. Ana sayfa
  2. İçerik planı
  3. Yönlendirme (routing) · Qiskit
Qiskit · transpiler ve donanım eşlemesi

Yönlendirme (routing) — iki-qubit etkileşimleri coupling kenarları üzerinde akıtmak

Routing, yerleşim (layout) seçildikten sonra devreyi topolojik olarak yürütülebilir hâle getiren transpiler aşamasıdır: soyut veya kısmen yerleştirilmiş iki-qubit kapıları, cihazın izin verdiği komşu qubit çiftlerine taşınır; gerektiğinde ara hareketlerle “kuantum verisi” çip üzerinde kaydırılır. Bu sayfa; routing ile layout ayrımını, DAG üzerindeki ön katman düşüncesini, SWAP borcunun yerini ve yönlü donanım düzeltmelerini işler. SWAP ekleme ayrıntıları, darbe zamanlaması ve genel boru hattı sırası kardeş sayfalarda kalır; burada odak yönlendirme kararının mimari anlamıdır.

  • Girdi: yerleştirilmiş mantıksal–fiziksel eşleme + etkileşim sırası
  • Çıktı: coupling uyumlu kapı sırası (ve gerekirse SWAP öncülleri)
  • Maliyet: derinlik, iki-qubit sayısı, hedefe özgü hata tahmini

Kavram haritası ve boru hattındaki yer

Çoğu algoritma kaynak kodunda iki-qubit kapıları, tam bağlı bir soyut çipmiş gibi ardışık yazılır. Gerçek cihazda ise yalnızca coupling haritasındaki komşu çiftlerde doğrudan iki-qubit işlem uygulanabilir. Routing, bu çeliği çözmek için kapı sırasını ve ara hareketleri öyle seçer ki her iki-qubit işlem yürütme anında yasal bir komşulukta gerçekleşsin. Zihinsel model: layout “hangi oyuncu hangi sahne köşesinde duracak?” sorusunu yanıtlar; routing ise “sahne değişmeden diyalogları sırayla oynatırken oyuncuları gerektiğinde yan yana getirmek” olarak düşünülebilir.

Bu sayfanın sınırı

SWAP kapılarının tam üretim kuralları, kısmi SWAP optimizasyonları ve topolojik eşdeğerlik ince ayarı SWAP ekleme sayfasına bırakılır. Darbelerin zaman eksenine oturtulması zamanlama başlığındadır. Mantıksal qubitlerin ilk fiziksel oturması layout seçimi konusudur. Burada yalnızca kenar üzerinde akış ve sıra kararının mimari okuması hedeflenir.

Mimari özet Layout oturumu sabitler (veya kısmen sabitler); routing, coupling grafiği üzerinde geçici hareketlerle iki-qubit işleri yasallaştırır. Çıktının derinliği ve SWAP sayısı çoğu zaman routing kalitesinin göstergesidir.

Layout ile ayrım ve ortak sınır

Pratikte preset boru hatları layout ve routing kararlarını birbirinden tam izole etmez; yine de kavramsal ayrım öğretim ve hata ayıklama için gereklidir. Layout uzun vadeli bir eşleme politikasıdır: hangi mantıksal indeks hangi fiziksel düğümde başlar? Routing ise kısa vadeli hareket planıdır: belirli bir iki-qubit kapısı yürütülürken veri hangi komşuluklar üzerinden akar? Aynı layout altında bile farklı routing politikaları farklı SWAP derinlikleri üretir; tersine, kötü layout routing'i matematiksel olarak zorlaştırır.

Ortak sınır: yeniden yerleştirme

Bazı preset zincirlerinde “routing sırasında layout'u hafifçe kaydırma” veya yeniden deneme vardır; bu, iki kavramı birbirine karıştırır gibi görünse de uygulama kodunda hâlâ ayrı pass aileleri olarak düşünülür. Özel bir derleme stratejisi kuruyorsanız bu etkileşimi pass manager ve özel pass belgeleriyle sürüme göre doğrulamanız gerekir.

DAG, ön katman ve bağımlılık

Transpiler iç işlerinde devre bir DAG olarak temsil edilir; düğümler işlemler, kenarlar ise qubit başına veri akışıdır. Routing sezgiselleri çoğu zaman “şu anda yürütülebilecek” işlemlerin oluşturduğu ön katman üzerinden ilerler: ön katmandaki iki-qubit işler yasal komşulukta mı? Değilse, önce SWAP veya eşdeğer hareketlerle komşuluk sağlanır. Sonraki katmanlar, bağımlılıklar çözüldükçe açılır. Bu görüş, neden bazı kapıların yer değiştirmesinin diğerlerini bloke ettiğini açıklar.

Öngörü (lookahead)

İyi routing, yalnızca bir sonraki kapıya bakmaz; ilerideki etkileşimlere göre şimdiki SWAP'ı pahalı mı ucuz mu olduğunu tartar. Bu stratejik bakış, arama bütçesi ve optimization level ile birlikte büyür; aksi hâlde yerel optimuma takılıp gereksiz derinlik üretilir. Genel boru hattı çerçevesi transpiler pipeline sayfasında özetlenmiştir.

SWAP ve köprü hareketleri (yüksek seviye)

Komşu olmayan iki fiziksel qubit arasında iki-qubit kapısı uygulamak için klasik yol, ara durumları bir SWAP zinciriyle yer değiştirmektir. Routing katmanı bu zinciri nereye koyacağına karar verir; her SWAP ekstra iki-qubit hata demektir. Bazı durumlarda üç-qubit köprüleri veya özel ayrıştırmalar daha verimli olabilir; hangi dönüşümün seçildiği hedef tabana ve pass paketine bağlıdır. Uygulama ayrıntıları ve optimizasyonlar SWAP ekleme sayfasında derinleşir.

Ölçüm ve klasik geri bildirim etkisi

Routing, ölçüm ve klasik kontrol içeren devrelerde bağımlılık grafiğini karmaşıklaştırır; bu akışların semantiği klasik kontrol ve ölçüm mantığı ile birlikte okunmalıdır. Burada yalnızca şu uyarı yeter: dinamik devrelerde routing maliyeti statik analizle her zaman üstten sınırlanamaz.

Yönlü donanım ve kapı yönü

Bazı süperiletken mimarilerde iki-qubit kapısı yönlüdür: yalnızca belirli bir kontrol–hedef yönünde doğrudan uygulanabilir. Routing veya öncül taban ayrıştırması, ters yöndeki bir etkileşimi yasal yöne çevirmek için ek tek-qubit kapıları ekleyebilir. Bu düzeltme routing ile taban ayrıştırması arasında paylaşılan bir sorumluluktur; hangi pass'in ne yaptığını sürüm belgesinden izlemek, “neden birden fazla ek rz görüyorum?” sorusuna cevap verir.

Coupling haritası ile ilişki

Yönlülük ve komşuluk bilgisi Target ve coupling yapısından gelir. Donanım şemasının okunması coupling map ve donanım topolojisi sayfalarında desteklenir.

Maliyet bakışı ve Target duyarlılığı

Routing kalitesini ölçmek için yalnızca toplam kapı sayısı yetmez: derinlik (kritik yol), iki-qubit sayısı ve mümkünse hedefin raporladığı süre/hata ağırlıklı bir skor birlikte düşünülmelidir. Target, hangi kenarın daha “pahalı” olduğunu transpiler'a iletir; böylece aynı topolojik uzunlukta iki farklı SWAP seçenekten biri düşük hatalı kenar tercih edilerek seçilebilir. Kalibrasyonun zaman içinde değişmesi, routing sonucunu da dinamik kılar.

Metrikleri raporlamak

Yayınlanan sonuçlarda en azından şunları yazın: backend adı, optimization level, tohum, nihai layout özeti, transpile sonrası derinlik, iki-qubit ve SWAP sayıları. Bu disiplin, layout sayfasındaki raporlama önerisiyle aynı hizada tutulmalıdır.

Sezgiseller, seviye ve tekrarlanabilirlik

IBM ekosisteminde yaygın anılan SABRE ailesi, layout ve routing aramasını birlikte düşünen bir zihniyet sunar; yine de uygulama geliştiricisi açısından sonuç, yasal komşulukta sıralanmış kapılar ve SWAP maliyetidir. Yüksek optimization_level geniş arama ve daha iyi yerel kararlar anlamına gelebilir; maliyet ise transpile süresidir. Rastgele kırılımlar nedeniyle aynı girdide farklı SWAP sayıları görmek sürpriz değildir; bu yüzden seed_transpiler kullanımı ve sürüm sabitleme önemlidir. Seviye tablosu optimization seviyeleri sayfasında toplanır; determinizm çerçevesi transpiler pipeline bölümünde özetlenir.

Pratik kural Uzun menzilli etkileşim içeren devrelerde önce layout'u bilinçli seçin, ardından routing çıktısını iki farklı seed ile kıyaslayın; dağılım genişse, algoritma veya hedef seçimini gözden geçirin.

Kod laboratuvarı

Örnekler yerel FakeManilaV2 (beş qubit, doğrusal coupling) üzerindedir: optimization level'ın SWAP ve derinliğe etkisi, tohum değişiminin routing çıktısına etkisi ve layout sabitlemesi altında routing'in telafi gücü gözlemlenir.

routing_level_swap.py Python
from qiskit import QuantumCircuit, transpile
from qiskit_ibm_runtime.fake_provider import FakeManilaV2

# Doğrusal topolojide uzun menzil etkileşim: routing SWAP üretir.
qc = QuantumCircuit(3)
qc.cx(0, 1)
qc.cx(1, 2)
qc.cx(0, 2)

backend = FakeManilaV2()
for lvl in (1, 3):
    tqc = transpile(qc, backend=backend, optimization_level=lvl, seed_transpiler=0)
    ops = tqc.count_ops()
    swaps = ops.get("swap", 0)
    print(f"level {lvl}: depth={tqc.depth()} swap={swaps} ops={dict(ops)}")
qiskit Routing maliyeti · seviye kıyası UTF-8 · LF
routing_seed_variation.py Python
from qiskit import QuantumCircuit, transpile
from qiskit_ibm_runtime.fake_provider import FakeManilaV2

qc = QuantumCircuit(4)
qc.h(range(4))
qc.cx(0, 3)
qc.cx(1, 2)
qc.cx(0, 2)

backend = FakeManilaV2()
for seed in (0, 1, 2):
    tqc = transpile(qc, backend=backend, optimization_level=3, seed_transpiler=seed)
    swaps = tqc.count_ops().get("swap", 0)
    print(f"seed {seed}: depth={tqc.depth()} swap={swaps}")
qiskit Stokastik kırılım · SWAP ve derinlik UTF-8 · LF
routing_under_layout.py Python
from qiskit import QuantumCircuit, transpile
from qiskit_ibm_runtime.fake_provider import FakeManilaV2

qc = QuantumCircuit(3)
qc.cx(0, 2)
qc.cx(0, 1)

backend = FakeManilaV2()
seed = 0

auto_layout = transpile(qc, backend=backend, optimization_level=2, seed_transpiler=seed)
spread = transpile(
    qc,
    backend=backend,
    initial_layout=[0, 2, 4],
    optimization_level=2,
    seed_transpiler=seed,
)

def summarize(label, tqc):
    ops = tqc.count_ops()
    print(label, "depth", tqc.depth(), "swap", ops.get("swap", 0))

summarize("Otomatik layout:", auto_layout)
summarize("Uzak düğümlere sabit:", spread)
qiskit Layout + routing birlikte okunur UTF-8 · LF

İleri okuma ve özet

Routing, layout'un sabitlediği fiziksel dünya içinde iki-qubit işleri coupling kurallarına uyduran hareket planıdır. DAG ön katmanı ve öngörü, neden bazı yerel kararların uzun vadede pahalı olduğunu açıklar; SWAP ise bu planın en görünür maliyet kalemidir. Target duyarlı maliyet ve güncel kalibrasyon, aynı topolojide bile farklı yollar seçilebilmesine yol açar.

Özet Routing = coupling uyumlu sıra + gerekli ara hareketler. Layout kötüyse routing ağır öder; seviye ve tohum çıktıyı şekillendirir. Raporlarda SWAP, derinlik ve layout birlikte yer almalıdır.