Lập trình cho máy tính lượng tử (P1)

Dzũng Nguyễn
Edumall Engineering
4 min readMar 31, 2019

Máy tính lượng tử không còn là concept lý thuyết nữa, đó hoàn toàn là thực thể vật lý và quan trọng là chúng ta có thể làm chủ được thông qua việc lập trình nó.

Chuỗi blog này không đi sâu vào các khái niệm hàn lâm ở khía cạnh vật lý & toán học của lý thuyết & tính toán lượng tử mà focus vào việc lập trình ứng dụng trên máy tính lượng tử. Tất cả những gì bạn cần là một chút kiến thức về lập trình, prefer là JavaScript, một chút kiến thức về phân tích thiết kế thuật toán (Big-O), một chút kiến thức toán học về xử lý bit, lượng giác và trên hết là sự tò mò, hứng thú với công nghệ mới ở vị thế của một người tiên phong.

Hãy bắt đầu với các concept cơ bản của máy tính lượng tử trước khi đi vào lập trình.

Quantum logic

QPU là gì?

Chúng ta thường nghĩ rằng máy tính lượng tử là của tương lai, thay thế cho máy tính truyền thống với sức mạnh tính toán phi thường. Thực tế, có nhiều vấn đề máy tính lượng tử giải quyết không tốt hơn so với máy tính truyền thống. Đó đơn giản chỉ là mở rộng khả năng giải quyết những bài toán chuyên biệt mà máy tính truyền thống không thể.

Nói cách khác, hãy coi việc thực thi các đoạn mã được lập trình để giải quyết các bài toán chuyên biệt đó là trên đơn vị xử lý lượng tử — Quantum Processing Unit, giống như việc có nhiều đơn vị xử lý chuyên biệt trên máy tính như: xử lý dấu phẩy động, đồ hoạ real time … do CPU sẽ chịu trách nhiệm điều hướng tới.

Ngôn ngữ lập trình cho máy tính lượng tử

Năm 2019, đã có một vài prototypes của QPU được IBM phát triển. Các chương trình nhỏ trong tính toán lượng tử cũng có thể được giả lập để chạy trên máy tính truyền thống.

Để việc lập trình trên máy tính lượng tử là khả thi, có khả năng áp dụng được cả trên QPU cũng như các trình giả lập, các engineer có thể lập trình bằng các ngôn ngữ sau:

  • QASM: Ngôn ngữ assembly lượng tử (quantum assembly). Ngôn ngữ có thể chạy trực tiếp trên phần cứng cũng như simulator do IBM phát triển.
  • Python: Qiskit là library nguồn mở cho tính toán lượng tử. Library này cũng hoàn toàn tương thích cả phần cứng cũng như các engine giả lập của IBM.
  • JavaScript: QCEngine là trình giả lập tính toán lượng tử dùng ngôn ngữ JavaScript mã nguồn mở, cho phép chúng ta có thể chạy các đoạn mã trực tiếp trên browser.

Hãy bắt đầu việc lập trình trên máy tính lượng tử sử dụng 3 ngôn ngữ nói trên, các bạn có thể truy cập URL: http://machinelevel.com/qc/oreilly/.

Hình 2: Trình giả lập lập trình tính toán lượng tử

Các thành phần của QC simulator

Trên simulator, ngoài text editor để code, chúng ta có thể thấy có 3 thành phần khác:

  • Trình thể hiện mạch lượng tử (Quantum circuit): biểu diễn mạch lượng tử sau khi biên dịch chương trình
  • Màn hình thể hiện đầu ra (output console): show text được in ra bởi dòng lệnh qc.print()
  • Trình thể hiện kí hiệu vòng tròn trạng thái (State cirle-notation visulizer): biễu diễn qubits của chương trình sau biên dịch
Hình 3: Các thành phần cơ bản trên QC simulator

Debugging

Với simulator ở trên, việc debug không phải vấn đề gì đó quá khó khăn: Mỗi dòng code khi được thực thi sẽ làm cho cấu hình qubits bên trong QPU thay đổi. Để inspect được từng bước một giá trị của qubits ra sao, bạn hãy click chuột vào breakpoint mà sẽ được thể hiện bằng gạch sọc màu cam trên Trình biểu diễn mạch lượng tử — Quantum circuit visualizer giống như ví dụ ở hình dưới đây:

Hình 4: Debugging trên QC simulator

Tập lệnh QPU

Để có thể hiểu được QPU xử lý thế nào, chúng ta nên tìm hiểu xem tập lệnh của QPU gồm có các thành phần gì, do Trình thể hiện mạch điện tử ở đây đơn giản là show ra tổ hợp các chỉ dẫn cho QPU sau khi biên dịch.

Hình 5.1: Tập lệnh QPU (1)
Hình 5.2: Tập lệnh QPU (2)
Hình 5.3: Tập lệnh QPU (3)
Hình 5.4: Tập lệnh QPU (4)
Hình 5.5: Tập lệnh QPU (5)

To be continued …

--

--