Caveat Emptor:สิ่งต่อไปนี้มีความลำเอียงอย่างมากในการวิจัยของฉันและมุมมองด้าน QC สิ่งนี้ไม่ได้เป็นฉันทามติทั่วไปของสนามและอาจมีการส่งเสริมตนเองบางอย่าง
ปัญหาของการแสดง 'hello world' ของการคำนวณควอนตัมก็คือเรายังคงห่างไกลจากคอมพิวเตอร์ควอนตัมอย่าง Leibnitz หรือ Babbage นั้นมาจากคอมพิวเตอร์ปัจจุบันของคุณ ในขณะที่เรารู้ว่าพวกเขาควรใช้งานในทางทฤษฎี แต่ไม่มีวิธีมาตรฐานในการสร้างคอมพิวเตอร์ควอนตัมทางกายภาพ ผลข้างเคียงของสิ่งนั้นคือไม่มีรูปแบบการเขียนโปรแกรมเดี่ยวของการคำนวณควอนตัม หนังสือเรียนเช่น Nielsen et al. จะแสดงไดอะแกรม 'วงจรควอนตัม' แต่ภาษาเหล่านี้อยู่ห่างจากภาษาการเขียนโปรแกรมอย่างเป็นทางการ: พวกเขาจะได้รับ 'มือโบกมือ' เล็กน้อยในรายละเอียดเช่นการควบคุมแบบดั้งเดิมหรือการจัดการกับผลลัพธ์อินพุต / เอาต์พุต / การวัด
สิ่งที่เหมาะกับฉันที่สุดในการวิจัยของฉันในฐานะนักวิทยาศาสตร์คอมพิวเตอร์การเขียนโปรแกรมภาษาและเพื่อให้ได้ QC ที่ตรงข้ามกับนักวิทยาศาสตร์คอมพิวเตอร์คนอื่น ๆ ก็คือการใช้แบบจำลอง QC ที่ง่ายที่สุดที่ฉันเจอมานั่นทำทุกอย่าง
โปรแกรมคำนวณควอนตัมที่ง่ายที่สุดที่ฉันได้เห็นว่ามีองค์ประกอบที่จำเป็นทั้งหมดคือโปรแกรมสามคำสั่งขนาดเล็กในรูปแบบการเขียนโปรแกรมควอนตัมที่ง่ายที่สุดที่ฉันเคยเจอ ฉันใช้มันเหมือนคุณเป็น 'สวัสดีชาวโลก' เพื่อทำความเข้าใจพื้นฐาน
อนุญาตให้ฉันให้ข้อมูลสรุปแบบย่อที่ง่ายของThe Calculus แคลคูลัสโดย Danos และคณะ 1 ที่อยู่บนพื้นฐานของมันขึ้นอยู่กับคอมพิวเตอร์ควอนตัมทางเดียว2 : qubit จะถูกทำลายเมื่อวัด แต่การวัดจะส่งผลกระทบต่อ qubits อื่น ๆ ทั้งหมดที่เข้าไปพัวพันกับมัน มันมีประโยชน์ทางทฤษฎีและการปฏิบัติมากกว่าคอมพิวเตอร์ควอนตัม 'ตามวงจร' ที่รับรู้โดยชิปโทนิค แต่นั่นคือการอภิปรายที่แตกต่างกัน
พิจารณาคอมพิวเตอร์ควอนตัมที่มีเพียงห้าคำสั่ง: N, E, M, X และ Z "ภาษาแอสเซมบลี" นั้นคล้ายกับคอมพิวเตอร์ทั่วไปของคุณหลังจากดำเนินการหนึ่งคำสั่งมันจะไปยังคำสั่งต่อไปในลำดับ แต่ละคำสั่งใช้ตัวระบุ qubit เป้าหมายเราใช้เพียงตัวเลขที่นี่และข้อโต้แย้งอื่น ๆ
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'
โปรแกรมข้างต้นจึงสร้างอุปกรณ์เสริมเชื่อมต่อกับอินพุตควิบิตวัดอินพุตและขึ้นอยู่กับผลการวัดทำการทำงานบนอุปกรณ์เสริม ผลลัพธ์คือตอนนี้ qubit 2 มีสถานะของ qubit 1 หลังจากการดำเนินการHadamard
ด้านบนเป็นไปตามธรรมชาติในระดับที่ต่ำจนคุณไม่ต้องการเขียนโค้ดด้วยตนเอง ประโยชน์ของแคลคูลัสการวัดคือมันแนะนำ 'pattern' แมโครมาเรียงกันบางชนิดที่ให้คุณเขียนอัลกอริธึมที่ใหญ่กว่าเช่นเดียวกับรูทีนย่อย คุณเริ่มต้นด้วยรูปแบบการเรียนการสอน 1 รายการและขยายรูปแบบที่ใหญ่ขึ้นจากที่นั่น
แทนที่จะเป็นลำดับคำสั่งเหมือนแอสเซมเบลอร์มันเป็นเรื่องธรรมดาที่จะเขียนโปรแกรมลงในรูปของกราฟ:
input .........
\--> ( E ) ---> (M:0) v
(N) ---> ( ) ------------> (X) ---> output
ที่ลูกศรเต็มเป็นการพึ่งพา qubit และลูกศรประคือการพึ่งพา 'สัญญาณ'
ต่อไปนี้เป็นตัวอย่าง Hadamard เดียวกับที่แสดงในเครื่องมือการเขียนโปรแกรมขนาดเล็กตามที่ฉันจินตนาการว่า 'โปรแกรมเมอร์ควอนตัม' จะใช้
แก้ไข: (เพิ่มความสัมพันธ์กับคอมพิวเตอร์ 'คลาสสิค') คอมพิวเตอร์คลาสสิคยังคงมีประสิทธิภาพจริงๆในสิ่งที่พวกเขาทำได้ดีที่สุดและด้วยวิสัยทัศน์ก็คือคอมพิวเตอร์ควอนตัมจะถูกใช้ในการโหลดอัลกอริทึมบางตัวคล้ายกับคอมพิวเตอร์ปัจจุบัน GPU ดังที่คุณได้เห็นข้างต้นซีพียูจะควบคุมคอมพิวเตอร์ควอนตัมโดยส่งกระแสคำสั่งและอ่านผลการวัดจากบูลีน 'สัญญาณ' วิธีนี้ทำให้คุณมีการแยกการควบคุมแบบคลาสสิกอย่างเข้มงวดโดย CPU และสถานะควอนตัมและผลกระทบต่อคอมพิวเตอร์ควอนตัม
ตัวอย่างเช่นฉันจะใช้หน่วยประมวลผลร่วมควอนตัมของฉันในการคำนวณบูลีนสุ่มหรือ cointoss คอมพิวเตอร์แบบคลาสสิคนั้นถูกกำหนดไว้แล้วดังนั้นมันจึงกลับมาเป็นตัวเลขสุ่มที่ดี คอมพิวเตอร์ควอนตัมนั้นมีความเป็นไปได้โดยเนื้อแท้ แต่สิ่งที่ฉันต้องทำเพื่อให้ได้ 0 หรือ 1 แบบสุ่มคือการวัดควอบิตที่สมดุลเท่ากัน การสื่อสารระหว่าง CPU และ 'QPU' จะมีลักษณะดังนี้:
qrand() N 1; M 1 0;
==> | CPU | ------------> | QPU | ==> { q1 } , []
start()
| | ------------> | | ==> { } , [q1: 0]
read(q1)
| | ------------> | |
q1: 0
0 | | <----------- | |
<==
{ ... }
หน่วยความจำควอนตัมของ QPU อยู่ที่ไหนที่มี qubits และ[...]
เป็นหน่วยความจำแบบคลาสสิก (สัญญาณ) ที่มีบูลีน
- Danos และคณะ แคลคูลัสการวัด ฉบับที่ arXiv (2007) quant-PH
- Raussendorf และ Briegel คอมพิวเตอร์ควอนตัมทางเดียว จดหมายทบทวนทางกายภาพ (2001) ฉบับที่ 86 (22) pp. 5188-5191