Liệu "trình biên dịch" của IBM có biến mạch nhận dạng của tôi thành hư không?

Aug 17 2020

Nếu tôi tạo một mạch với cổng sau:

$$\tag{1}R_\phi = \begin{bmatrix} 1 & 0 \\ 0 & e^{i \phi} \end{bmatrix},$$

với $\phi$được chỉ định bằng 0, thì cổng mà tôi đang chạy chỉ là cổng nhận dạng, và mạch không phải làm gì với qubit. Liệu phần cứng IBM có thực sự "chạy" một số cổng với một số tham số được đặt càng gần 0 càng tốt không? Hay các trình biên dịch của IBM sẽ nhận ra rằng không có gì phải làm, và chỉ không "áp dụng" bất kỳ cổng nào?

Mặc dù hai trường hợp lý tưởng là tương đương nhau, nhưng trên thực tế, trường hợp "không làm gì" sẽ ít bị sai sót hơn, điều này có thể tạo ra sự khác biệt đáng kể trong kết quả mà chúng ta quan sát được.

Tương tự như vậy, nếu chúng ta đặt hai $X$ các cổng cạnh nhau trong một mạch để chạy trên phần cứng IBM, liệu các trình biên dịch của IBM có nhận thấy rằng mạch đó chỉ là mạch nhận dạng, và quyết định không làm gì hơn là áp dụng hai cổng triệt tiêu lẫn nhau?

Phần mềm và phần sụn của IBM "biên dịch" các mạch như thế này ở mức độ nào?

Trả lời

9 AliJavadi Aug 17 2020 at 10:56

Mọi tối ưu hóa quá trình biên dịch / mạch diễn ra một cách minh bạch bởi Qiskit. Với tư cách là người dùng, bạn có quyền kiểm soát những gì xảy ra thông qua optimization_levelđối số được chuyển đến transpile(). Đặt mức tối ưu hóa cao (ví dụ mức 3) sẽ thực hiện nhiều tối ưu hóa mạch hơn và đặt mức thấp sẽ thực hiện ít hoặc không tối ưu hóa (ví dụ mức 0). Hai ví dụ mà bạn cung cấp rất đơn giản. Chúng sẽ được tối ưu hóa ở cấp độ tối ưu hóa 3 và để lại một mình ở cấp độ tối ưu hóa 0.