انتقل إلى المحتوى الرئيسي

تهيئة الكيوبتات

Package versions

The code on this page was developed using the following requirements. We recommend using these versions or newer.

qiskit-ibm-runtime~=0.43.1

عند تنفيذ دائرة على وحدة معالجة كمية (QPU) من IBM®، يُدرج النظام عادةً إعادة تعيين ضمنية في بداية الدائرة للتأكد من تهيئة الكيوبتات إلى الصفر. يتحكم في هذا السلوك العلَم init_qubits، الذي يُعيَّن كـخيار تنفيذ primitive.

غير أن عملية إعادة التعيين ليست مثالية، مما يؤدي إلى أخطاء في تحضير الحالة. للتخفيف من هذا الخطأ، يُدرج النظام أيضًا وقت تأخير التكرار (أو rep_delay) بين الدوائر. لكل backend قيمة افتراضية مختلفة لـrep_delay، لكنها في الغالب أطول من T1 للسماح للبيئة بإعادة تعيين الكيوبتات. يمكن الاستعلام عن قيمة rep_delay الافتراضية بتشغيل backend.default_rep_delay.

تعتمد جميع وحدات IBM الكمية على تنفيذ معدل التكرار الديناميكي، الذي يتيح لك تغيير rep_delay لكل مهمة. تُجمَّع الدوائر التي ترسلها في مهمة primitive معًا للتنفيذ على وحدة QPU. تُنفَّذ هذه الدوائر بالتكرار عليها لكل لقطة (shot) مطلوبة؛ يسير التنفيذ عموديًا عبر مصفوفة من الدوائر واللقطات، كما هو موضح في الشكل التالي.

العمود الأول يمثل اللقطة 0. تُنفَّذ الدوائر بالترتيب من 0 إلى 3. العمود الثاني يمثل اللقطة 1. تُنفَّذ الدوائر بالترتيب من 0 إلى 3. تتبع الأعمدة المتبقية نفس النمط.

نظرًا لإدراج rep_delay بين الدوائر، تواجه كل لقطة هذا التأخير. لذلك، يؤدي تقليل rep_delay إلى تخفيض إجمالي وقت تنفيذ وحدة QPU، لكن على حساب زيادة معدل خطأ تحضير الحالة، كما يتضح في الصورة التالية:

تُظهر هذه الصورة أنه كلما انخفضت قيمة rep_delay، ارتفع معدل خطأ تحضير الحالة.

يؤدي ضبط كل من rep_delay=0 وinit_qubits=False معًا إلى "دمج" الدوائر فعليًا، إذ ستبدأ الكيوبتات من الحالة النهائية للقطة السابقة.

تجدر الإشارة إلى أنه رغم تجميع دوائر مهمة primitive معًا لتنفيذها على وحدة QPU، لا يوجد ضمان بشأن ترتيب تنفيذ الدوائر القادمة من وحدات PUB. بالتالي، حتى لو أرسلت pubs=[pub1, pub2]، لا يوجد ضمان بأن دوائر pub1 ستُنفَّذ قبل pub2. كما لا يوجد ضمان بأن دوائر المهمة ذاتها ستعمل كدفعة واحدة على وحدة QPU.

تحديد rep_delay لمهمة primitive

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit-ibm-runtime
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler

service = QiskitRuntimeService()

# Make sure your backend supports it
backend = service.least_busy(
operational=True, min_num_qubits=100, dynamic_reprate_enabled=True
)

# Determine the allowable range
backend.rep_delay_range
sampler = Sampler(mode=backend)

# Specify a value in the supported range
sampler.options.execution.rep_delay = 0.0005

الخطوات التالية

توصيات