Pass manager — transpiler pass zincirini çalıştıran yürütücü
Pass manager, kuantum devresinin iç temsilinde (çoğu zaman bir DAG üzerinde) sırayla veya koşullu olarak pass adımlarını çalıştıran nesnedir. transpile sarmalayıcısı çoğu kullanıcı için bu yürütücüyü gizler; doğrudan pass manager kurmak ise özel derleme politikaları, teşhis ve yeniden üretilebilir deneyler için gereklidir. Bu sayfa; pass türlerini, zincir disiplinini, pass'ler arası paylaşılan durumu ve preset yöneticisiyle ilişkiyi işler. Tekil pass yazımı ve gelişmiş akış kontrolü özel pass başlığında derinleştirilir; genel boru hattı çerçevesi transpiler pipeline sayfasında kalır.
Kavram haritası ve transpile ilişkisi
Çoğu uygulama kodu transpile(...) ile yetinir; bu çağrı arkada bir preset pass manager örneği oluşturur, hedef ve politika parametreleriyle doldurur ve run benzeri bir yürütme başlatır. Pass manager'ı doğrudan kullanmak, aynı mekanizmayı şeffaflaştırır: hangi adımların sırayla çalıştığını seçebilir, araya kendi pass'inizi koyabilir veya yalnızca belirli bir alt zinciri tekrar çalıştırabilirsiniz. Bu, derleyici tasarımında kontrol yüzeyini genişletmektir.
Bu sayfanın sınırı
Tek bir pass sınıfının iç algoritması veya IBM'e özgü dahili pass adları burada listelenmez; sürüm notları ve kaynak kod o ayrıntıyı taşır. Genel boru hattı evreleri transpiler pipeline başlığında özetlenir; seviye politikasının kullanıcıya yansıması optimization seviyeleri sayfasında işlenir.
Ne zaman doğrudan pass manager?
Özel araştırma derleyicisi, A/B kıyaslama, hata üreten pass'i izole etme veya üretimde kilitlenmiş bir pass sırası taahhüdü gerektiğinde doğrudan yönetici nesnesi tercih edilir. Aksi hâlde transpile sarmalayıcısı bakım maliyetini düşürür.
Pass türleri: analiz ve dönüşüm
Pass'ler kabaca iki aileye ayrılır: analiz pass'leri DAG üzerinde okuma yapar ve sonuçları paylaşılan bir duruma (çoğu zaman PropertySet) yazar; dönüşüm pass'leri ise DAG'ı değiştirir — kapı birleştirme, taban çevirisi, layout uygulaması gibi. Aynı zincirde önce analiz sonra dönüşüm sırası bozulursa, dönüşüm pass'i eksik bilgiyle çalışabilir veya gereksiz yere agresif davranabilir.
Denklik ve koruma
Dönüşüm pass'leri matematiksel denklik altında güvenli olmalıdır; aksi hâlde derleyici hatalı devre üretir. Bazı pass'ler yalnızca tahmini süre veya maliyet modelini günceller; bu da yürütme öncesi doğrulama için analiz sayılır. Taban çevirisi ve ayrıştırma ayrıntıları taban kapıları ve kapı ayrıştırması ile kesişir; pass manager yalnızca bu pass'leri ne zaman çağırdığını yönetir.
Sürüm soyutlaması
Qiskit sürümleri arasında pass sınıf hiyerarşisi ve isimleri evrilebilir; burada anlatılan ayrım kavramsaldır. Üretim kodunda somut import yollarını resmi belgeyle doğrulayın.
DAG temsili ve bağımlılık
Transpiler'ın işlediği ara temsil çoğu zaman yönlendirilmiş asiklik graf (DAG) olarak düşünülür: düğümler işlemler, kenarlar qubit başına veri akışıdır. Pass'ler bu graf üzerinde çalışır; bir pass çıktısı bir sonraki pass'in girdisidir. Bu yüzden zincir sırası salt “performans” değil, doğruluk invariant'ıdır. Örneğin zamanlama pass'leri süre bilgisini okuyabilmek için önceki pass'lerin süre alanlarını doldurmuş olması gerekir.
Devre nesnesi ile ilişki
Kullanıcı QuantumCircuit ile düşünür; pass manager çalışırken iç temsil DAG olarak akar ve sonunda yeniden devreye dönüştürülür. Bu köprü devre yapısı sayfasındaki soyutlama ile uyumludur.
Routing ve layout pass'leri
Yerleşim ve yönlendirme kararları da pass olarak uygulanır; bunların sırası ve etkileşimi layout seçimi ve yönlendirme başlıklarında anlatılan mimariyle örtüşür. Pass manager bu pass'leri zamanlar.
Zincir, tekrar ve sabit nokta
Basit bir pass listesi yeterli olmadığında, aynı alt zincir birden çok tur çalıştırılır: her tur DAG'da yeni fırsatlar açabilir (örneğin ardışık sadeleştirmeler). Bazı yapılar, değişiklik olmayana kadar döngü kurar; bu sabit nokta (fixed-point) fikrine benzer. Döngü üst sınırı olmadan sonsuz tur riski doğurur; bu yüzden preset yöneticileri iç güvenlik ve maksimum iterasyon politikaları taşır.
Koşullu dallar
Bazı zincirler “eğer şu analiz sonucu ise şu pass'i çalıştır” biçiminde dallanır. Bu akış kontrolü üretimde güçlüdür; ayrıntılı kalıplar özel pass ve resmi belgede genişletilir.
Aşamalı yöneticiler
Büyük projelerde init, layout, routing, optimization, scheduling gibi bloklar ayrı aşamalara bölünebilir; bu, okunabilirlik ve önbellekleme için kullanışlıdır. Somut sınıf adları sürüme göre değişebilir; kavram olarak “evre başına pass listesi” düşünün.
PropertySet ve pass iletişimi
Pass'ler birbirine doğrudan Python referansı ile değil, çoğu zaman paylaşılan bir PropertySet (veya eşdeğeri) üzerinden haberleşir. Analiz pass'leri buraya “devrenin şu özelliği şu” yazar; dönüşüm pass'leri okur ve karar verir. Bu tasarım, pass'leri gevşek bağlı tutar ve test edilebilirliği artırır; fakat anahtar isimleri sürümle değişebileceği için belge takibi gerekir.
Hata ayıklama ipucu
Beklenmeyen çıktı gördüğünüzde, önce hangi analiz pass'inin hangi özelliği doldurduğunu sorgulayın; çoğu hata, eksik veya eski property okumasından kaynaklanır.
Ölçüm ve zamanlama verisi
Süre ve zamanlama ile ilgili alanlar zamanlama aşamasıyla birleşir; pass zinciri bu alanları doldurmadan zamanlama pass'i anlamlı çalışmayabilir.
Preset pass manager ve seviye
generate_preset_pass_manager ailesi, IBM ve topluluk pratiğinde olgunlaşmış bir pass sırasını hazır paket olarak sunar. optimization_level parametresi bu paketin agresifliğini seçer; dolayısıyla seviye düğmesi aslında “hangi önceden tanımlı pass yöneticisi şablonu?” sorusunun kısayoludur. Özel ihtiyaçta preset'i kopyalayıp araya pass eklemek veya bir alt zinciri çıkarmak yaygın bir yoldur.
Backend ve Target bağlılığı
Preset, hedefin Target verisine göre pass içeriğini seçer; aynı seviye numarası farklı backend'lerde farklı içerik üretebilir. Bu bağ backend mimarisi ile tutarlıdır.
transpile ile eşdeğerlik
Aynı parametrelerle transpile ve pm.run çoğu senaryoda aynı aileyi kullanır; farklılık genelde ekstra argümanların veya özel append edilen pass'lerin varlığından gelir.
Teşhis, sürüm ve özel zincir köprüsü
Pass zinciri hataları genelde üç grupta toplanır: yanlış sıra (invariant bozulması), hedefe aykırı işlem (Target uyumsuzluğu) ve sürüm kayması (import veya property anahtarı değişimi). Teşhis için önce minimal devreyle yineleme, sonra pass listesini yarılayarak ikili arama, son olarak sürüm kilidi uygulanır. Görselleştirme araçları (örneğin pass manager diyagramı) ortamınızda varsa, zincirin hangi dalında takıldığınızı hızlandırır.
Özel pass ve üretim disiplini
Kurumsal projede özel pass'lerin sürümü, kod incelemesi ve birim testi ile birlikte yönetilmeli; aksi hâlde preset yükseltmesiyle sessizce uyumsuz kalabilirler. Genişletme rehberi özel pass sayfasındadır.
Tohum ve tekrarlanabilirlik
Stokastik pass'ler için tohum parametresi preset oluşturma aşamasında verilir; raporlama önerisi transpiler pipeline · determinizm ile uyumludur.
Kod laboratuvarı
Örnekler yerel FakeManilaV2 ile çalışır: preset pass manager oluşturup
run, transpile ile aynı
tohumda metrik kıyası ve yöneticinin tür adının gözlemlenmesi.
from qiskit import QuantumCircuit
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime.fake_provider import FakeManilaV2
qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 2)
qc.cx(0, 1)
backend = FakeManilaV2()
pm = generate_preset_pass_manager(optimization_level=2, backend=backend, seed_transpiler=5)
tqc = pm.run(qc)
print(type(pm).__name__)
print("depth", tqc.depth(), "ops", dict(tqc.count_ops()))
from qiskit import QuantumCircuit, transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime.fake_provider import FakeManilaV2
qc = QuantumCircuit(4)
qc.h(range(4))
qc.cx(0, 3)
qc.cx(1, 2)
backend = FakeManilaV2()
seed = 9
lvl = 2
pm = generate_preset_pass_manager(optimization_level=lvl, backend=backend, seed_transpiler=seed)
a = pm.run(qc)
b = transpile(qc, backend=backend, optimization_level=lvl, seed_transpiler=seed)
print("pm depth", a.depth(), "tr depth", b.depth())
print("pm ops", dict(a.count_ops()))
print("tr ops", dict(b.count_ops()))
from qiskit import QuantumCircuit
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
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 (0, 2, 3):
pm = generate_preset_pass_manager(optimization_level=lvl, backend=backend, seed_transpiler=0)
tqc = pm.run(qc)
print("level", lvl, "-> depth", tqc.depth(), "swap", tqc.count_ops().get("swap", 0))
İleri okuma ve özet
Pass manager, transpiler motorunun kullanıcıya açılan kontrol yüzeyidir. Analiz ve dönüşüm pass'lerinin sırası doğruluk için kritiktir; paylaşılan property alanı pass'ler arası sözleşmeyi taşır. Preset yöneticisi, optimization level ile birlikte okunmalıdır; özel ihtiyaçta preset'e dayanıp küçük eklemeler yapmak en güvenli genişleme yoludur.
- Transpiler pipeline — evre çerçevesi.
- Optimization seviyeleri — preset politika düğmesi.
- Özel pass — zinciri genişletme ve dallanma.
- Taban kapıları, kapı ayrıştırması — pass içerikleri.
- Layout seçimi, yönlendirme, zamanlama — tipik pass aileleri.
- Backend mimarisi — Target bağlamı.