Caveat Emptor: những điều sau đây thiên vị rất nhiều về nghiên cứu và quan điểm của riêng tôi về lĩnh vực QC. Điều này không cấu thành sự đồng thuận chung của lĩnh vực này và thậm chí có thể chứa một số tự quảng cáo.
Vấn đề của việc hiển thị một 'thế giới xin chào' của điện toán lượng tử là về cơ bản chúng ta vẫn còn cách xa máy tính lượng tử như Leibnitz hoặc Babbage từ máy tính hiện tại của bạn. Mặc dù chúng ta biết làm thế nào họ nên vận hành trên lý thuyết, không có cách tiêu chuẩn nào thực sự xây dựng một máy tính lượng tử vật lý. Một tác dụng phụ của điều đó là không có mô hình lập trình duy nhất của điện toán lượng tử. Sách giáo khoa như Nielsen et al. sẽ hiển thị cho bạn sơ đồ 'mạch lượng tử', nhưng khác với các ngôn ngữ lập trình chính thức: chúng có một chút 'vẫy tay' trên các chi tiết như điều khiển cổ điển hoặc xử lý kết quả đầu vào / đầu ra / đo lường.
Điều phù hợp với tôi nhất trong nghiên cứu của tôi với tư cách là một nhà khoa học máy tính ngôn ngữ lập trình, và để đưa ý kiến của QC đến với nhà khoa học máy tính khác, là sử dụng mô hình QC đơn giản nhất mà tôi gặp phải.
Chương trình điện toán lượng tử đơn giản nhất mà tôi đã thấy có chứa tất cả các yếu tố thiết yếu là một chương trình ba hướng dẫn nhỏ trong mô hình lập trình lượng tử đơn giản nhất mà tôi đã gặp. Tôi sử dụng nó như bạn sẽ là một 'thế giới xin chào' để có được những điều cơ bản.
Cho phép tôi đưa ra bản tóm tắt đơn giản hóa nhanh chóng về Tính toán đo lường của Danos et al. 1 dựa trên máy tính lượng tử một chiều 2 : một qubit bị phá hủy khi đo, nhưng đo nó ảnh hưởng đến tất cả các qubit khác bị vướng vào nó. Nó có một số lợi ích về mặt lý thuyết và thực tiễn so với các máy tính lượng tử 'dựa trên mạch' như được nhận ra bởi chip quang tử, nhưng đó là một cuộc thảo luận khác.
Hãy xem xét một máy tính lượng tử chỉ có năm hướng dẫn: N, E, M, X và Z. "Ngôn ngữ lắp ráp" của nó tương tự như máy tính thông thường của bạn, sau khi thực hiện một lệnh, nó sẽ chuyển sang hướng dẫn tiếp theo trong chuỗi. Mỗi hướng dẫn có một định danh qubit mục tiêu, chúng tôi chỉ sử dụng một số ở đây và các đối số khác.
N 2 # create a new quantum bit and identify it as '2'
E 1 2 # entangle qubits '1' and '2', qubit 1 already exists and is considered input
M 1 0 # measure qubit '1' with an angle of zero (angle can be anything in [0,2pi]
# qubit '1' is destroyed and the result is either True or False
# operations beyond this point can be dependent on the signal of '1'
X 2 1 # if the signal of qubit '1' is True, execute the Pauli-X operation on qubit '2'
Do đó, chương trình trên tạo ra một ancilla, làm vướng víu với qubit đầu vào, đo đầu vào và tùy thuộc vào kết quả đo thực hiện một thao tác trên ancilla. Kết quả là qubit 2 hiện chứa trạng thái của qubit 1 sau khi hoạt động của Hadamard .
Ở trên tự nhiên ở mức thấp đến mức bạn sẽ không muốn mã hóa nó. Lợi ích của phép tính đo lường là nó giới thiệu 'mẫu', một số loại macro có thể kết hợp cho phép bạn soạn các thuật toán lớn hơn như bạn làm với các chương trình con. Bạn bắt đầu với các mẫu 1 hướng dẫn và phát triển các mẫu lớn hơn từ đó.
Thay vì một chuỗi lệnh giống như trình biên dịch chương trình, người ta cũng thường viết chương trình dưới dạng biểu đồ:
input .........
\--> ( E ) ---> (M:0) v
(N) ---> ( ) ------------> (X) ---> output
trong đó mũi tên đầy đủ là phụ thuộc qubit và mũi tên chấm là phụ thuộc 'tín hiệu'.
Sau đây là ví dụ Hadamard tương tự được thể hiện trong một công cụ lập trình nhỏ như tôi tưởng tượng một 'lập trình viên lượng tử' sẽ sử dụng.
chỉnh sửa: (thêm quan hệ với máy tính 'cổ điển') Máy tính cổ điển vẫn thực sự hiệu quả trong những gì chúng làm tốt nhất, và do đó, tầm nhìn là máy tính lượng tử sẽ được sử dụng để giảm tải một số thuật toán, tương tự như cách máy tính hiện tại giảm tải đồ họa cho GPU. Như bạn đã thấy ở trên, CPU sẽ điều khiển máy tính lượng tử bằng cách gửi cho nó một luồng lệnh và đọc lại kết quả đo từ các 'tín hiệu' boolean. Bằng cách này, bạn có sự phân tách chặt chẽ giữa điều khiển cổ điển bởi CPU và trạng thái lượng tử và các hiệu ứng trên máy tính lượng tử.
Ví dụ, tôi sẽ sử dụng bộ đồng xử lý lượng tử của mình để tính toán một boolean hoặc cointoss ngẫu nhiên. Máy tính cổ điển mang tính quyết định, vì vậy nó rất tệ trong việc trả về một số ngẫu nhiên tốt. Mặc dù vậy, máy tính lượng tử vốn đã có xác suất, tất cả những gì tôi phải làm để có được 0 hoặc 1 ngẫu nhiên là đo ra một qubit cân bằng như nhau. Giao tiếp giữa CPU và 'QPU' sẽ trông giống như thế này:
qrand() N 1; M 1 0;
==> | CPU | ------------> | QPU | ==> { q1 } , []
start()
| | ------------> | | ==> { } , [q1: 0]
read(q1)
| | ------------> | |
q1: 0
0 | | <----------- | |
<==
Trường hợp { ... }
là bộ nhớ chứa qubit lượng tử của QPU và [...]
là cổ điển (tín hiệu) bộ nhớ của nó có chứa các phép toán luận.
- Danos và cộng sự. Phép tính. arXiv (2007) tập. định lượng
- Raussendorf và Briegel. Một máy tính lượng tử một chiều. Thư đánh giá vật lý (2001) tập. 86 (22) trang 5188-5191