क्या आईबीएम का "कंपाइलर" मेरी पहचान सर्किट को कुछ नहीं करेगा?
यदि मुझे निम्नलिखित गेट के साथ एक सर्किट बनाना था:
$$\tag{1}R_\phi = \begin{bmatrix} 1 & 0 \\ 0 & e^{i \phi} \end{bmatrix},$$
साथ से $\phi$निर्दिष्ट करने के लिए 0 के बराबर है, तो मैं जो गेट चला रहा हूं वह सिर्फ पहचान गेट है, और सर्किट को कुछ भी नहीं करना है। क्या IBM हार्डवेयर वास्तव में कुछ पैरामीटर को "रन" करेगा, जिसमें कुछ पैरामीटर 0 के करीब हो सकता है? या क्या आईबीएम के कंपाइलर यह पहचानेंगे कि कुछ भी नहीं किया जाना है, और बस किसी भी गेट को "लागू" नहीं करना है?
जबकि दो मामले आदर्श रूप से समतुल्य होंगे, व्यवहार में, जहां "कुछ भी नहीं" किया जाता है, त्रुटि के लिए कम संवेदनशील होगा, जो हमारे द्वारा देखे जाने वाले परिणामों में महत्वपूर्ण अंतर ला सकता है।
इसी तरह, अगर हम दो डालते हैं $X$ आईबीएम हार्डवेयर पर चलने वाले सर्किट में एक-दूसरे के बगल में गेट्स, क्या आईबीएम के कंपाइलर नोटिस करेंगे कि सर्किट सिर्फ पहचान सर्किट है, और दो गेटों को लागू करने के बजाय कुछ भी करने का फैसला करें जो एक दूसरे को रद्द करते हैं?
आईबीएम के सॉफ्टवेयर और फर्मवेयर किस हद तक इस तरह के सर्किट को "संकलित" करते हैं?
जवाब
कोई भी संकलन / सर्किट अनुकूलन पारदर्शी रूप से Qiskit द्वारा होता है। एक उपयोगकर्ता के रूप में आपके पास इस बात पर नियंत्रण है कि पास किए गए optimization_level
तर्क के माध्यम से क्या होता है transpile()
। अनुकूलन स्तर उच्च (जैसे स्तर 3) सेट करना अधिक सर्किट अनुकूलन करेगा और इसे कम सेट करना कम या कोई अनुकूलन नहीं करेगा (उदाहरण स्तर 0)। आपके द्वारा प्रदान किए गए दो उदाहरण सीधे हैं। उन्हें अनुकूलन स्तर 3 पर अनुकूलित किया जाएगा और अनुकूलन स्तर 0 पर अकेला छोड़ दिया जाएगा।