تصوير توقيت الدائرة
إصدارات الحزم
تم تطوير الكود في هذه الصفحة باستخدام المتطلبات التالية. نوصي باستخدام هذه الإصدارات أو أحدث منها.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
بالإضافة إلى تصوير التعليمات على الدائرة، قد ترغب في تصوير جدولة الدائرة باستخدام طريقة Qiskit timeline_drawer. يمكن أن يساعدك هذا التصوير مثلاً في اكتشاف وقت التوقف على الـ Qubits بسرعة. غير أن هذه الطريقة لا تُعيد نتائج دقيقة للدوائر الديناميكية. لتصوير جدولة الدوائر الديناميكية، استخدم طريقة draw_circuit_schedule_timing كما هو موضح في قسم دعم Qiskit Runtime.
أمثلة
لتصوير برنامج دائرة مجدوَلة، يمكنك استدعاء هذه الدالة مع مجموعة من وسائط التحكم. يمكن تعديل معظم مظهر صورة الإخراج عبر ورقة أنماط، لكن ذلك ليس إلزامياً.
الرسم باستخدام ورقة الأنماط الافتراضية
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit import QuantumCircuit
from qiskit.visualization.timeline import draw
from qiskit.providers.fake_provider import GenericBackendV2
from qiskit.transpiler import generate_preset_pass_manager
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
backend = GenericBackendV2(5)
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuit = pm.run(qc)
draw(isa_circuit, target=backend.target)
الرسم باستخدام ورقة أنماط مناسبة لتصحيح البرامج
from qiskit import QuantumCircuit
from qiskit.visualization.timeline import draw, IQXDebugging
from qiskit.providers.fake_provider import GenericBackendV2
from qiskit.transpiler import generate_preset_pass_manager
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
backend = GenericBackendV2(5)
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuit = pm.run(qc)
draw(isa_circuit, style=IQXDebugging(), target=backend.target)
يمكنك إنشاء دوال مُولِّد أو تخطيط مخصصة وتحديث ورقة أنماط موجودة بتلك الدوال. بهذه الطريقة يمكنك التحكم في معظم مظهر صورة الإخراج دون تعديل قاعدة الكود الخاصة بمُرسِم الدائرة المجدوَلة. راجع مرجع API لـ timeline_drawer لمزيد من الأمثلة.
دعم Qiskit Runtime
بينما يُعدّ مُرسِم الجدول الزمني المدمج في Qiskit مفيداً للدوائر الثابتة، فإنه قد لا يعكس بدقة توقيت الدوائر الديناميكية بسبب العمليات الضمنية مثل البث وتحديد الفروع. كجزء من دعم الدوائر الديناميكية، يُعيد Qiskit Runtime معلومات توقيت الدائرة الدقيقة داخل نتائج المهمة عند الطلب.
- هذه دالة تجريبية، وهي في وضع إصدار معاينة وبالتالي قد تتغير.
- تنطبق هذه الدالة فقط على مهام Qiskit Runtime Sampler.
- على الرغم من أن إجمالي وقت الدائرة يُعاد في بيانات التعريف "compilation"، إلا أن هذا ليس الوقت المُستخدَم للفوترة (الوقت الكمومي).
تفعيل استرجاع بيانات التوقيت
لتفعيل استرجاع بيانات التوقيت، اضبط علامة scheduler_timing التجريبية على True عند تشغيل مهمة primitive.
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuit = pm.run(qc)
sampler = SamplerV2(backend)
sampler.options.experimental = {
"execution": {
"scheduler_timing": True,
},
}
sampler_job = sampler.run([isa_circuit])
result = sampler_job.result()
الوصول إلى بيانات توقيت الدائرة
عند الطلب، تُعاد بيانات توقيت الدائرة لكل PUB في بيانات تعريف نتيجة المهمة، تحت ["compilation"]["scheduler_timing"]["timing"]. يحتوي هذا الحقل على معلومات التوقيت الخام. لعرض معلومات التوقيت، استخدم أداة التصوير المدمجة كما هو موضح في قسم تصوير التوقيتات.
استخدم الكود التالي للوصول إلى بيانات توقيت الدائرة لأول PUB:
job_result = sampler_job.result()
circuit_schedule = job_result[0].metadata["compilation"]["scheduler_timing"]
circuit_schedule_timing = circuit_schedule["timing"]
فهم بيانات التوقيت الخام
بينما يُعدّ تصوير بيانات توقيت الدائرة باستخدام طريقة draw_circuit_schedule_timing حالة الاستخدام الأكثر شيوعاً، قد يكون من المفيد فهم بنية بيانات التوقيت الخام المُعادة. قد يساعدك ذلك مثلاً على استخراج المعلومات برمجياً.
بيانات التوقيت المُعادة في ["compilation"]["scheduler_timing"]["timing"] هي قائمة من السلاسل النصية. كل سلسلة تمثل تعليمة واحدة على قناة ما، وتكون مفصولة بفواصل إلى أنواع البيانات التالية:
Branch- يُحدد ما إذا كانت التعليمة في تدفق تحكم (then / else) أو فرع رئيسي.Instruction- الـ Gate والـ Qubit الذي ستعمل عليه.Channel- القناة المُعيَّنة للتعليمة. يمكن أن تكون إحدى التالي:Qubit x- قناة القيادة لـ Qubit x.AWGRx_y(قراءة مولّ د موجة اعتباطي) - تُستخدم بواسطة قنوات القراءة للتواصل عند قياس الـ Qubits. تقابل وسيطا x و y معرّف جهاز القراءة ورقم الـ Qubit على التوالي.
T0- وقت بدء التعليمة ضمن الجدول الكامل.Duration- مدة التعليمة بوحدات dt ثانية، حيث 1 dt = 1 دورة جدولة. يمكنك إيجاد قيمةdtللـ Backend باستخدامbackend.dt.Pulse- نوع عملية النبضة المُستخدَمة.
مثال:
main,barrier,Qubit 0,7,0,barrier # A barrier on the main branch on qubit 0 at time 7 with 0 duration
main,reset_0,Qubit 0,7,64,play # A reset instruction on the main branch on qubit 0 at time 7 with duration 64 and a play operation
...
تصوير التوقيتات
مع qiskit-ibm-runtime الإصدار v0.43.0 أو أحدث، يمكنك تصوير توقيتات الدوائر. لتصوير التوقيتات، تحتاج أولاً إلى تحويل بيانات تعريف النتيجة إلى fig باستخدام طريقة draw_circuit_schedule_timing. تُعيد هذه الطريقة شكل plotly، يمكنك عرضه مباشرة أو حفظه في ملف أو كليهما. لمزيد من المعلومات حول أوامر plotly المُستخدَمة، راجع fig.show() و fig.write_image("<path.format>").
from qiskit_ibm_runtime.visualization import draw_circuit_schedule_timing
# Create a figure from the metadata
fig = draw_circuit_schedule_timing(
circuit_schedule=circuit_schedule_timing,
included_channels=None,
filter_readout_channels=False,
filter_barriers=False,
width=1000,
)
# Uncomment the following line to display the figure
# fig.show(renderer="notebook")
# Save to a file
# fig.write_html("scheduler_timing.html")
فهم الشكل المُولَّد
تنقل صورة مخرجات بيانات توقيت الدائرة التي يُنتجها draw_circuit_schedule_timing المعلومات التالية:
- المحور X هو الوقت بوحدات dt ثانية، حيث 1 dt = 1 دورة جدولة. يمكنك إيجاد قيمة
dtللـ Backend باستخدامbackend.dt. - المحور Y هو القناة (فكّر في القنوات كأدوات تُصدر نبضات).
Receive channel- القناة الوحيدة التي ليست أداة بحد ذاتها. إنها تعليمة تُشغَّل على جميع القنوات التي تشارك في إجراء اتصال مع الـ Hub في تلك اللحظة.Qubit x- قناة القيادة لـ Qubit x.AWGRx_y(قراءة مولّد موجة اعتباطي) - تُستخدم بواسطة قنوات القراءة للتواصل عند قياس الـ Qubits. تقابل وسيطا x و y معرّف جهاز القراءة ورقم الـ Qubit على التوالي.Hub- يتحكم في البث.
بالإضافة إلى ذلك، لكل تعليمة صيغة X_Y، حيث X هو اسم التعليمة وY هو نوع النبضة. يُطبّق نوع play نبضات التحكم، بينما يُسجِّل capture حالة الـ Qubit. يمكنك أيضاً التمرير فوق كل تعليمة للحصول على مزيد من التفاصيل. على سبيل المثال، يُظهر الشكل السابق نبضة تحكم لـ Gate X مُطبَّقة على Qubit 10 عند 1161 dt.