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

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.

  • Birim: pass = DAG üzerinde tanımlı dönüşüm veya analiz
  • Yürütücü: PassManager veya aşamalı varyantlar
  • Köprü: preset ↔ optimization_level

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.

Mimari özet transpile = çoğu senaryoda preset pass manager + çalıştır. Pass manager = aynı motoru açıkça sürmek.

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.

Pratik kural Özel zincir oluşturduğunuzda, preset ile başlayıp küçük değişiklikler yapın; sıfırdan pass listesi yazmak hataya açıktır.

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.

preset_pm_run.py Python
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()))
qiskit Preset PM · run UTF-8 · LF
pm_vs_transpile.py Python
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()))
qiskit pm.run · transpile kıyası UTF-8 · LF
pm_level_sweep.py Python
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))
qiskit Preset PM · seviye taraması UTF-8 · LF

İ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.

Özet transpile gizli yönetici; pass manager açık yönetici. Sıra ve paylaşılan durum doğruluğu belirler; preset + seviye üretim için hazır yol sunar.