1. Ana sayfa
  2. İçerik planı
  3. SWAP ekleme · Qiskit
Qiskit · transpiler ve donanım eşlemesi

SWAP ekleme — routing planını somut iki-qubit hareketlere çevirmek

SWAP ekleme, yönlendirme aşamasının ürettiği “qubit verisini şu komşuluk boyunca kaydır” kararlarının devrede swap (veya ona eşdeğer permütasyon) kapıları olarak belirmesidir. Klasik görüntüde iki fiziksel hattın kuantum durumu yer değiştirir; böylece uzak mantıksal etkileşimler, yasal komşu çiftler üzerinde uygulanabilir hâle gelir. Bu sayfa; permütasyon maliyetini, taban kapılara ayrışmayı ve sadeleştirme pass'leriyle azaltılabilir SWAP bölgesini işler. Kenar üzerinde sıra seçimi ve öngörü routing sayfasında; darbe zaman çizelgesi zamanlama sayfasında kaldı.

  • Çıktı: somut swap veya eşdeğer üçlü cx zinciri
  • Maliyet: tipik olarak üç iki-qubit işlem / SWAP
  • Sadeleştirme: komşu SWAP birleştirme ve iptal şansı

Kavram haritası ve boru hattındaki yer

Transpile zincirinde önce devre hedefin anladığı soyutluktan çıkar, yerleşim ve yönlendirme ile topolojik olarak yürütülebilir bir sıra elde edilir. SWAP ekleme adımı, bu sıranın içinde “şu iki hattın durumunu yer değiştir” gereksinimini somut kapılara çevirir. Sonuçta ölçüm veya okuma öncesi fiziksel qubit sırası, mantıksal indeks bekleneninden farklı olabilir; bu yüzden layout nesnesi ile birlikte düşünülmesi gerekir.

Bu sayfanın sınırı

Hangi kenar üzerinden hangi sırada ilerleneceği ve öngörülü arama politikası yönlendirme başlığında anlatılır. Darbelerin zaman eksenine oturtulması zamanlama konusudur. İlk fiziksel oturma layout seçimi ile ilgilidir. Burada yalnızca SWAP kapısının üretimi, ayrışması ve sadeleşmesi ele alınır.

Mimari özet Routing yolu seçer; SWAP ekleme yolu kapılara yazar. Her eklenen SWAP, hata bütçesine çoğu hedefte üçlü iki-qubit yük bindirir; azaltılabilir mi diye sonraki optimizasyon pass'leri sorar.

Routing ile ayrım ve bulanık sınır

Qiskit preset boru hatlarında “routing pass” ile “SWAP üretimi” aynı paket içinde iç içe geçebilir; bu da öğrenicide “routing bitti mi, SWAP aşaması mı geldi?” sorusunu bulanıklaştırır. Kavramsal olarak yine de şu ayrım işe yarar: routing hangi hareket dizisinin gerekli olduğunu planlar; SWAP ekleme ise o planın devrede görünür permütasyon kapılarına dönüşümüdür. Özel pass zinciri yazarken bu ayrım dosyanızda ve testlerinizde açıkça yazılmalıdır.

Teşhis ipucu

Transpile çıktısında swap sayısı beklenenden yüksekse, önce layout'u kontrol edin, sonra routing tohumunu değiştirin, en son taban ayrıştırması sonrası oluşan cx sayısına bakın. Üçlü cx öbekleri bazen kaynakta açık swap olarak değil, doğrudan cx dizisi olarak da durabilir; raporda ikisini birlikte saymak gerekir.

Permütasyon, token ve komşu SWAP

Doğrusal veya ızgara benzeri topolojilerde yaygın zihinsel model token taşıma düşüncesidir: bir mantıksal qubitin “etiketi” fiziksel düğümler boyunca komşu SWAP'larla kayar. Üç komşu üzerinde ardışık yerel SWAP'lar, global bir permütasyonun parçası olur; sıra önemlidir çünkü kuantum durumu non-commutatif kapılar arasında taşınır. Komşu olmayan iki hat arasında tam yer değiştirme genellikle daha uzun bir SWAP zinciri ister.

Genel permütasyon ve taban

Bazı hedeflerde açık swap kapısı yoktur; transpiler doğrudan üç adet kontrollü-X ile aynı permütasyonu üretir. Bu durumda “SWAP sayısı” yerine “permütasyon maliyeti” (örneğin iki-qubit sayısı) raporlanmalıdır.

Maliyet: neden her SWAP pahalıdır?

Standart ayrıştırmada bir swap, üç adet iki-qubit kapısı (tipik olarak üç cx) ile inşa edilir. Her iki-qubit işlem bağımsız hata olasılığı taşıdığından, tek bir mantıksal SWAP görünümü bile kuantum doğruluğunu (fidelity) belirgin biçimde düşürebilir. Bu nedenle donanım hedefli derlemede “SWAP azaltma” yalnız estetik değil, fiziksel verimlilik hedefidir. Gürültü modeli ve Aer tarafı gürültü simülasyonu sayfasında; kalibrasyon okuması kalibrasyon verisi sayfasında derinleşir.

Hedefe özgü alternatifler

Bazı cihazlar iswap, rzz veya ecr gibi doğal iki-qubit kapılarıyla daha kısa permütasyon yolları sunabilir; bu durumda “üç cx” kuralı tek başına maliyet ölçütü olmaktan çıkar. Hangi ayrıştırmanın seçildiği Target ile belirlenir.

Native tabana ayrıştırma

Transpile sonunda yürütücünün gördüğü dil cihazın native kümesidir. swap ara temsilde durabilir; son aşamalarda ise çoğu zaman cx, ecr vb. kapılara açılır. Bu ayrıştırma kuralları taban kapıları ve kapı ayrıştırması sayfalarında genişletilir; burada vurgu şudur: SWAP sayısını azaltmak ile ayrışmış iki-qubit sayısını azaltmak aynı metrik değildir.

Sadeleştirme, birleştirme ve bariyerler

Ardışık SWAP'lar bazen birleştirilebilir veya iptal olabilir; aynı hat üzerinde ileri–geri hareket planları gereksiz permütasyonu geri alır. Bu sadeleştirmeler genellikle optimizasyon pass'lerinin işidir ve denklik altında güvenli kalmalıdır. barrier gibi akış ipuçları, pass'lerin kapıları kaydırmasını kısıtlar; gereksiz SWAP'ın geri gelmesine veya kaybolmamasına yol açabilir. Semantik ayrıntı bariyer ve akış kontrolü sayfasında işlenir.

Pass zinciri disiplini

Hangi sadeleştirme şablonunun hangi sırada çalıştığı sürüme bağlıdır; özel derleyici yazarken pass manager ve özel pass belgelerine başvurun.

Optimization level ve raporlama

Yüksek optimization_level değerleri, yalnızca routing aramasını genişletmekle kalmaz; aynı zamanda SWAP sonrası birleştirme ve kısa eşdeğer dönüşümler için daha agresif pass paketleri çalıştırabilir. Bu yüzden aynı devrede SWAP sayısı düşerken ayrışmış cx sayısı ters örnekte artmış gibi görünebilir; raporda her iki metriği de verin. Tohum ve sürüm sabitleme önerisi transpiler pipeline · determinizm ile uyumludur; seviye tablosu optimization seviyeleri sayfasındadır.

Pratik kural Makale eklerinde hem count_ops().get("swap") hem de toplam iki-qubit sayısını yazın; yalnızca birini vermek okuyucuyu yanıltır.

Kod laboratuvarı

Örnekler yerel FakeManilaV2 üzerindedir: transpile çıktısında açık swap sayısı, seviyeye göre değişim ve manuel QuantumCircuit.swap sonrası taban ayrıştırması gözlemi.

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

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()
    cx = ops.get("cx", 0)
    sw = ops.get("swap", 0)
    print(f"level {lvl}: swap={sw} cx={cx} depth={tqc.depth()}")
qiskit SWAP ve cx birlikte okunur UTF-8 · LF
manual_swap_then_transpile.py Python
from qiskit import QuantumCircuit, transpile
from qiskit_ibm_runtime.fake_provider import FakeManilaV2

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

backend = FakeManilaV2()
tqc = transpile(qc, backend=backend, optimization_level=2, seed_transpiler=1)
print(tqc.count_ops())
print(tqc)
qiskit Açık swap → native ayrıştırma UTF-8 · LF
swap_barrier_hint.py Python
from qiskit import QuantumCircuit, transpile
from qiskit_ibm_runtime.fake_provider import FakeManilaV2

qc = QuantumCircuit(3)
qc.swap(0, 1)
qc.barrier()
qc.swap(1, 2)

backend = FakeManilaV2()
tqc = transpile(qc, backend=backend, optimization_level=3, seed_transpiler=0)
print("ops:", dict(tqc.count_ops()))
qiskit Bariyer · pass hareket sınırı ipucu UTF-8 · LF

İleri okuma ve özet

SWAP ekleme, routing planının ölçülebilir fiziksel maliyete dönüştüğü yerdir. Üçlü iki-qubit yükü ve taban ayrışması nedeniyle raporlarda yalnızca swap sayısına değil, toplam iki-qubit sayısına da bakılmalıdır. Bariyerler ve özel pass sıraları, aynı kaynak devrede bile farklı permütasyon izleri üretebilir.

Özet Routing yolu seçer; SWAP ekleme permütasyonu yazar. Maliyet çoğu hedefte iki-qubit üçlüsü ile ölçülür; sadeleştirme ve taban ayrışması son görünümü belirler. Rapor: swap, cx (veya native iki-qubit), derinlik, layout, seviye, tohum.