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

مقدمة إلى OpenQASM

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

مع تطور احتياجات تطوير وحدات QPU، توسعت قائمة ميزات OpenQASM استجابةً لذلك؛ إذ تتضمن أحدث نسخة، OpenQASM 3، إضافات تشمل التحكم في تدفق البرنامج الكلاسيكي، ومعدِّلات البوابات، وتنفيذات النبضات.

تُعدّ OpenQASM خياراً مناسباً لفئات متعددة من المستخدمين نظراً لمرونتها. وتعطي مقدمة ورقة OpenQASM 31 أمثلة على ذلك:

"على الرغم من أن OpenQASM ليست لغة عالية المستوى، يرغب كثير من المستخدمين في كتابة دوائر كمية بسيطة يدوياً باستخدام لغة معبِّرة خاصة بالمجال. يحتاج الباحثون المتخصصون في تجميع الدوائر إلى معلومات عالية المستوى مسجَّلة في التمثيلات الوسيطة لتوجيه خوارزميات التحسين والتوليف. يفضّل العلماء التجريبيون سهولة كتابة الدوائر على مستوى مرتفع نسبياً، لكنهم كثيراً ما يحتاجون إلى تعديل التوقيت أو أوصاف البوابات على مستوى النبضات يدوياً في نقاط مختلفة من الدائرة. أما مهندسو الأجهزة الذين يصممون وحدات التحكم الكلاسيكية ومولدات الموجات فيفضلون اللغات العملية من حيث التجميع في ظل قيود الأجهزة، والتي تُظهر بوضوح بنية الدائرة التي يمكن لوحدات التحكم الاستفادة منها."

تُعدّ OpenQASM تنسيق التبادل المشترك بين أدوات البرمجيات الكمية المستقلة. وبالنسبة للمطورين الذين يفضلون أداة لبناء الدوائر وأخرى للتحويل وهكذا، فإن OpenQASM هي اللغة المشتركة التي تعمل جسراً بينها.

تتيح Qiskit SDK طرقاً للتحويل بين OpenQASM وصنف QuantumCircuit (راجع OpenQASM 2 وQiskit وOpenQASM 3 وQiskit للتعليمات).

لمزيد من المعلومات، اطّلع على مواصفة OpenQASM المباشرة.

مثال على كود OpenQASM: حالة القطة


OPENQASM 3;
include "stdgates.inc";

const n = 3; // number of qubits
qubit[n] q; // a register 'q' of n qubits
bit[n] c; // a register 'c' of n classical bits

h q[0]; // Hadamard
for k in [0:n-1] {
cnot q[k], q[k+1]; // Controlled-NOT from control qubit q[k] to target qubit q[k+1]
}

c = measure q; // measure quantum register

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

توصيات

Footnotes

  1. Andrew W. Cross et al. "OpenQASM 3: A broader and deeper quantum assembly language," ACM Transactions on Quantum Computing, Volume 3, Issue 3 (2022). https://doi.org/10.48550/arXiv.2104.14722