45. کامپایل کوانتومی
45.1کامپایلر کوانتومی چه میکند
یک جمله: مدار منطقی را به زمانبندی سختافزاری تبدیل کن، با حفظ معنا (یونیتی تا فاز سراسری)، کمینهسازی تابع هزینه زیر قیدهای سختافزار. همان قرارداد کامپایلرهای کلاسیک، با سه پیچش: معنا یک ماتریس است نه رفتار برنامه (درستی = همارزی یونیتی، در n کوچک با شبیهسازی چکشدنی — هدیه)؛ تابع هزینه فیزیکی است (احتمال خطا ≈ Σ خطاهای بهازای-دروازه، بهاضافهٔ دِکوهرنس ∝ عمق)؛ و خودِ شرح سختافزار دادهٔ متغیر است (رانش کالیبراسیون یعنی «هدفِ» بکاند اسنپشات است و کامپایل دو بار در روز، دو خروجی میدهد). PassManager قیسیت معماری مرجع است؛ QIR (مبتنیبر LLVM) و OpenQASM 3 لایههای interop.
45.2تجزیه
جلویی: مدارها را در OpenQASM 2/3 بخوانید (زبان مشترک حوزه — خوانا-برای-انسان، صادق-به-سختافزار با تعریفهای gate)، API پایتونی Qiskit (قالب تألیف عملی)، QIR (بیتکد LLVM برای ابزارهای نسل-LLVM) یا قالبهای سازنده. تجزیهگر باید: تعریفهای دروازه را هندل کند (ماکروهای کاربر که به ابتداییها باز میشوند)، عبارات پارامتری (حساب θ/2 — نمادین، در زمان کامپایل حل)، سدها (حصار زمانبندی) و ثباتهای کلاسیک + جریان کنترل (if/while در QASM 3 — مدار پویا). کامپایلر اسباببازی شما (پایان بخش) قالب 17.10 را با پارامترها میگستراند؛ تجزیهٔ خوبِ قالبهای ورودی خوبطراحیشده، ۲۰٪ زحمت کامپایلر و ۸۰٪ درد interop است.
45.3بازنماییهای میانی
IR جایی است که گذرها زندگی میکنند. گزینهها، صادقانه مقایسهشده: مدار DAG (DAGCircuit قیسیت — گرهها عملیات، یالها وابستگی داده؛ اسب کار، چون جابهجایی و حذف دروازه عمل گرافی میشوند)، نمودارهای ZX (گرافهای مفتا-نظریه-ردسته؛ بازنویسیها حرکات موضعی معتبرند؛ قویترین IR بهینهکننده)، شبکههای تانسوری (کامپایل-بهمثابه-انقباض، خاص اما رو به رشد) و فرم SSAدار QIR (برای جاسازی در زنجیرههای کلاسیک). درس طراحی از کامپایلرهای کلاسیک، کاملاً قابلاعمال: گذرها کوچک، ترکیبپذیر، جداگانه-آزمونپذیر باشند و IR باید مدارهای نامعتبر را غیرقابل-نمایش کند. IR گرافی را در پروژه پیاده خواهید کرد؛ تمرین تعمیم دارد.
45.4تجزیهٔ دروازه
هستهٔ جبری (44.6 عملیاتیشده): ترجمهٔ پایه با تجزیهٔ KAK/کارتان (هر دروازهٔ دوقیوبیتی → ≤3 CX + تکیها؛ TwoQubitBasisDecomposer قیسیت)، تجزیهٔ اویلری تککیوبیتی (ZXZ برای IBM دوست-بومی، XYX جای دیگر)، ادغام چرخش (RZ(a)·RZ(b) → RZ(a+b) — عمق مجانی) و ترکیب چندکنترلی با انتخاب میان بدهبستانها (بدون ancilla = دروازهٔ بیشتر؛ با = کمتر اما عریضتر). گذر باید محافظهکار باشد: تجزیهها در نمایهٔ نویز فرق دارند و «کوتاهترین» تجزیه همیشه بهترین-اکوشده نیست. هر تجزیه را با چک همارزی Operator آزمون کنید — برابری ماتریسی تا فاز سراسری یکخطری است و برهان درستی شماست.
45.5بهینهسازی
قلب peephole. قواعد پیادهکردنی: حذف دروازههای مجاور (X·X = I؛ H·H = I؛ CX·CX = I — تطبیق الگو روی DAG)، ادغام چرخش در نبود سدها، حذف با جابهجایی (X را از کنترلی که با آن جابهجاست عبور بده، بعد حذف کن — برد کلاسیک Optimize1qGatesDecomposition)، حذف چرخشهای زاویه-صفر و تطبیق قالب (همارزیهای کوچک پیشمحاسبهشده، بازنویسی درجا). عملکرد روی مدارهای واقعی: ۲۰–۴۰٪ کاهش عمق پیش از مسیریابی؛ بیشتر پس از آن، چون مسیریابی زبالهٔ مجاور-درمیآورد. همهٔ قواعد همارزیهای ریاضی موجهاند — هرکدام با آزمون واحدی خودش (برابری ماتریسی)، چون یک قاعدهٔ peephole نامعتبر، بیصدا همهٔ محاسبات پاییندستی را فاسد میکند.
45.6مسیریابی
مدار را در نقشهٔ اتصال جا دادن. استاندارد: درج SWAP — برای اجرای دروازهٔ دوقیوبیتی روی غیرمجاور (a,b)، SWAPها را در کوتاهترین مسیر درج کنید، سپس جایگشت انباشتهٔ نگاشت منطقی→فیزیکی را پیگیری کنید. فضای جستوجو عظیم است (کدام سواپها، به چه ترتیب)، پس ابتکارها حکم میرانند: SABRE (ابتکار دوسویهٔ swap-map — پیشفرض Qiskit) سواپهای کاندید را با فاصلهٔ میرا-نگر امتیاز میدهد. واریانتهای هوشمندتر: دروازهٔ پل (۴ CX یک CX از راه دور را بدون سواپ کامل شبیهسازی میکند)، CNOT از راه دور با تلهپورتیشن (بودجهٔ درهمتنیدگی لازم — در ماشینهای تحملخطا واقعی) و مسیریابی شبکه-پائولی (مدارهای پر-CX شیمی را اول در ترتیب قابل-مسیریابی جابهجا کنید — بردهای عظیم، بنگرید 46.5). مسیریابی را با شمار SWAP و عمق نهایی بسنجید؛ با هم اختلاف دارند.
45.7نگاشت کیوبیت
هر کیوبیت منطقی اول کجا بنشیند — پیش از مسیریابی انتخاب، با آن تنظیم میشود. اطلاعات بهینهساز: T1/T2 بهازای-کیوبیت، فیدیلیتی بهازای-دروازه (دادهٔ کالیبراسیون روی یک چیپ ۲–۳ برابر فرق میکند!)، کیفیت اتصال. امتیازدهی: چیدمان نویز-تطبیقی (VF2Layout/NoiseAdaptiveLayout قیسیت) بهترین زیرگراف نرخ-خطا را میگیرد که با شکل تعامل مدار شما بخواند؛ نگاشت مدار خطی روی زیرگراف خطی هوی-هکس بیشتر مسیریابی را حذف میکند. اهرم کمبهاشده: مدارهای یکسان روی چیدمانهای متفاوت ۲–۵ برابر در احتمال موفقیت فرق دارند — کارایی مجانی، بدون تغییر الگوریتم، فقط initial_layout بهتر. همیشه انتخاب چیدمان را روی کاربار واقعیتان محک بزنید؛ پیشفرضها میانگیناند و مدار شما میانگین نیست.
45.8زمانبندی
از فهرست دروازه به خطزمان (نمای مهندسی 44.7، اینجا کامپایلری): زمانهای ASAP/ALAP را روی DAG با مدت واقعی دروازهها حساب کنید؛ روی بیکارها تأخیر بگذارید؛ اختیاراً آگاهانه زمانبندی کنید — لایههای مستقل را برای درج جداسازی پویا همتراز کنید (همخانوادهٔ 46.6)، دروازههای دوقیوبیتی را در قید کراستاک دسته کنید، پنجرههای اندازهگیری را رعایت کنید. خروجی: DAG زمانبندیشده، یا زمانبندی pulse در پایینترین لایه. متریک فقط عمق نیست — توزیع زمان بیکاری است: مداری میتواند عمق-بهینه باشد و باز بمیرد چون یک کیوبیت ۲ میکروثانیه بیکار مانده. زمانبندی مقابل دِکوهرنس جایی است که کامپایل کوانتومی آشکارا سیستم-مهندسی میشود؛ مدارتان را یک بار گانت-چارت کنید (رسم خطزمان Qiskit) تا حسش کنید.
45.9کامپایل نویز-تطبیقی
مرز مدرن: برای نویز کامپایل کنید، نه فقط علیه آن. مواد: مدل نویز (از کالیبراسیون: خطای بهازای-دروازه، T1/T2، خطای خوانش بهازای-کیوبیت — یا آموخته، فصل ۶۱)، توابع هزینه که خطای کل مدار را برآورد میکنند (نه شمارش دروازه) و گذرهایی که استفادهشان میکنند: چیدمان نویز-تطبیقی (45.7)، مسیریابی فیدیلیتی-آگاه (سواپ از کوپلرهای تمیز)، جداسازی پویای متناسب با طیف نویز و انتخاب پالس/اکو بهازای هر نمونهٔ دروازه. موج پژوهشی دههٔ ۲۰۲۰ — شامل سیاستهای کامپایل ML-یادگرفته — اینجاست. احتیاط صادقانه: دادهٔ کالیبراسیون اسنپشات ماشینی در حال رانش است؛ بردهای نویز-تطبیقی واقعیاند اما هر بار اجرا دوباره باید بهدست آیند. چارچوب محک شما باید در هر آزمایش دادهٔ کالیبراسیون را تازه بکشد.
45.10توابع هزینهٔ کامپایل
چیزی را که نمیتوانید امتیازدهید نمیتوانید بهینه کنید. منو، از ارزان تا صادق: شمارش دروازه (سریع، خنگ)، عمق (بهتر، همچنان تخییل فیزیکی)، شمار دروازهٔ دوقیوبیتی (نایب استاندارد — غالب خطا)، Σ خطای بهازای-دروازه روی زمانبندی (دادهٔ کالیبراسیون لازم؛ استاندارد عملی)، شبیهسازی نویزی کامل مدار کامپایلشده (فقط n کوچک) و خطای منطقی موردانتظار زیر مدل کد (عصر تحملخطا). انضباط محکزنی (46.8): متریک ثابت، مجموعهٔ ورودی ثابت (باغ مدار استاندارد: QFT، جمعکننده، نمونههای گروور، آنساتزهای شیمی)، توزیع روی بذرها (الگوریتمهای مسیریابی تصادفیاند!) و همیشه با تابع هزینهٔ خودتان در ذهن کامپایل کنید — کامپایلرها هر متریکِ دادهشده را بازی میکنند، از جمله شما.