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ı.
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.
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.
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.
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()}")
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)
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()))
İ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.
- Yönlendirme — kenar üzerinde sıra ve öngörü.
- Layout seçimi — SWAP öncesi oturma.
- Zamanlama — süre ve çizelge.
- Taban kapıları, kapı ayrıştırması — native dil.
- Pass manager, özel pass, optimization seviyeleri.
- Bariyer ve akış kontrolü.
- Transpiler pipeline — genel çerçeve.