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

حدود المهام

عندما ترسل مهمة إلى وحدة معالجة كمية (QPU) من IBM®، تُحال أولاً إلى خدمة التحقق من المهام. تحاول هذه الخدمة التأكد من أن المهمة ستتمكن من التشغيل على وحدة المعالجة الكمية، لتجنب انتظارها في الطابور ثم فشلها في النهاية. تشمل هذه الفحوصات إنفاذ الحدود الموضحة أدناه. إذا تجاوزت هذه الحدود، فلن يتمكن نظام البرمجيات الكمية من معالجة حمل العمل وسيفشل في الغالب.

ملاحظات
  • بعض خيارات البدائيات (primitives) تزيد من حجم الدائرة. يتم التحقق من الحدود الموضحة بعد الزيادة المتوقعة في حجم الدائرة. تحديداً، هذه الخيارات تزيد من حجم الدائرة:
  • الحدود التي تُبلغ عنها حقول backend.configuration() وهي max_shots وmax_experiments لم تعد ذات صلة ولا مُفعَّلة. ستُزال هذه الحقول في المستقبل القريب.
  • هذه الحدود تنطبق على كل مهمة، وليس على كل وحدة PUB (Primitive Unified Bloc).

الحد الأقصى للتنفيذات

يُسمح بما يصل إلى 10 ملايين تنفيذ لمهام Sampler (يمكن تقسيم مهام Estimator إلى مهام فرعية أصغر، لذا لا ينطبق هذا الحد عليها). عدد التنفيذات هو عدد الدوائر مضروباً في عدد اللقطات (shots)، حيث تكون الدوائر هي تلك المُولَّدة بعد بث عناصر PUB.

على سبيل المثال، إذا كان لديك PUB بدائرة واحدة ومعاملات بشكل (4, 1)، فسيُنتج 4 دوائر. إذا طلبت 2,000 لقطة، يكون إجمالي عدد التنفيذات 4×2,000=8,0004 \times 2,000 = 8,000.

لاحظ أنه إذا مكّنت Pauli-twirling في مهمة Sampler الخاصة بك، فإن إجمالي عدد اللقطات يستند إلى قيمتي num_randomizations وshots_per_randomization. راجع TwirlingOptions للمزيد من التفاصيل.

الحد الأقصى لعدد التعليمات منخفضة المستوى لكل كيوبت

تسمح الخدمة بما يصل إلى 26.8 مليون تعليمة لنظام التحكم لكل كيوبت. يضمن ذلك احتواء دوائر المستخدم ضمن ذاكرة التعليمات لنظام التحكم. يوضح المثال أدناه كيفية ترجمة دائرة وحساب عدد كل تعليمة فيها.

يصف الجدول التالي كيفية ترجمة النظام لتعليمات دائرة معمارية مجموعة التعليمات (ISA) إلى تعليمات نظام التحكم عند احتساب هذا الحد.

التعليمةالعدد
rz1
delay1
sx2
x2
cx5
cz5
ecr5
measure10
reset17
init50
ملاحظة

يلتقط هذا الجدول الأسلوب التقريبي المستخدم في عملية التحقق ولا يعكس العدد الدقيق للتعليمات المستخدمة لتنفيذ العملية.

مثال

عرّف الدوائر وقم بترجمتها، ثم احصل على عدد البوابات التي ستُشغَّل.

from qiskit import QuantumCircuit
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService

num_qubits = 50
ghz = QuantumCircuit(num_qubits)
ghz.h(range(num_qubits))
ghz.cx(0, range(1, num_qubits))
op_counts = ghz.count_ops()

# Choose the least busy backend
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)

pm = generate_preset_pass_manager(optimization_level=3, backend=backend)
transpiled_ghz = pm.run(ghz)
op_counts = transpiled_ghz.count_ops()

print(f"Post-Transpilation gates: {op_counts}")

للاطلاع على التفاصيل الكاملة، راجع الترجمة مقابل backends مخصصة.

الحد الأقصى لعدد البوابات أحادية وثنائية الكيوبت لكل دائرة

الحد الأقصى لعدد البوابات أحادية الكيوبت هو كما يلي:

  • 30 مليون بوابة RZ
  • 20 مليون بوابة SX

الحد الأقصى لعدد البوابات ثنائية الكيوبت لكل دائرة هو خمسة ملايين. يضمن ذلك إمكانية التعامل مع المهمة ضمن حدود الذاكرة لطبقة البرمجيات منخفضة المستوى.