Một chương trình lượng tử đi qua máy tính như thế nào?

Khi nói về máy tính lượng tử, người ta thường tập trung vào những khái niệm như chồng chập, rối lượng tử hay cổng lượng tử. Tuy nhiên, một chương trình lượng tử không tự nhiên biến thành kết quả chỉ bằng vài dòng mã. Nó phải đi qua nhiều lớp trung gian, trong đó có lớp mô tả thuật toán, trình biên dịch, bộ điều khiển phần cứng, quá trình đo và bước xử lý dữ liệu sau cùng. Mỗi lớp có một nhiệm vụ riêng, đồng thời tạo ra những giới hạn mà người viết chương trình cần hiểu.

Quy trình này cũng cho thấy máy tính lượng tử không phải một chiếc máy tính cổ điển nhanh hơn trong mọi công việc. Một hệ thống lượng tử thường làm việc cùng máy tính cổ điển: máy tính cổ điển chuẩn bị tham số, gửi mạch lệnh, điều phối thí nghiệm, thu thập kết quả rồi phân tích dữ liệu. Phần lượng tử đảm nhận một số phép biến đổi đặc thù trên trạng thái qubit, còn phần cổ điển vẫn giữ vai trò quan trọng trong gần như toàn bộ quy trình.

Từ bài toán đến mạch lượng tử

Điểm bắt đầu không phải là một qubit cụ thể mà là một bài toán được diễn đạt theo cách phù hợp với mô hình lượng tử. Người phát triển có thể muốn mô phỏng một hệ vật lý, tìm cấu hình có chi phí thấp, phân tích một cấu trúc dữ liệu hoặc kiểm tra một phương pháp tối ưu hóa. Mỗi mục tiêu đòi hỏi cách mã hóa thông tin và cách đọc kết quả khác nhau.

Trong mô hình phổ biến hiện nay, dữ liệu được biểu diễn bằng các qubit. Một qubit có thể được chuẩn bị ở một trạng thái cơ sở, chẳng hạn trạng thái thường được ký hiệu là 0, hoặc ở một trạng thái kết hợp của hai trạng thái cơ sở. Các cổng lượng tử sau đó biến đổi trạng thái này. Một chương trình lượng tử, xét ở mức khái niệm, là chuỗi thao tác được sắp xếp theo thời gian trên một hoặc nhiều qubit.

Người lập trình không nhất thiết phải điều khiển trực tiếp tín hiệu vật lý tác động lên qubit. Họ thường sử dụng một ngôn ngữ hoặc thư viện lập trình để mô tả mạch. Mạch có thể gồm thao tác khởi tạo, các cổng tác động lên từng qubit, cổng tương tác giữa nhiều qubit và phép đo. Cách mô tả trừu tượng này giúp chương trình dễ viết hơn, nhưng cũng khiến nó phụ thuộc vào khả năng của phần cứng đích.

Trình biên dịch làm gì với mạch lượng tử?

Một mạch được viết ở cấp độ thuật toán thường chưa thể gửi thẳng đến thiết bị. Trình biên dịch lượng tử phải chuyển mạch đó thành dạng phù hợp với kiến trúc cụ thể. Công việc này có thể bao gồm rút gọn chuỗi cổng, thay thế cổng không được phần cứng hỗ trợ bằng tổ hợp cổng cơ bản, sắp xếp lại thứ tự thao tác và ánh xạ các qubit logic vào những qubit vật lý đang có.

Khái niệm qubit logic và qubit vật lý rất quan trọng. Qubit logic là đơn vị mà thuật toán muốn sử dụng, còn qubit vật lý là phần tử thực sự được tạo ra và điều khiển trong thiết bị. Trong các hệ thống hiện tại, quan hệ giữa hai khái niệm này không phải lúc nào cũng là một-một. Một thuật toán có thể cần nhiều qubit vật lý để biểu diễn một qubit logic bền vững hơn, đặc biệt khi các kỹ thuật bảo vệ và sửa lỗi được triển khai ở mức sâu hơn.

Ngay cả khi chưa xét đến sửa lỗi đầy đủ, việc ánh xạ qubit cũng đã là một bài toán thực tế. Không phải mọi qubit vật lý đều tương tác trực tiếp với nhau. Nếu một cổng hai qubit yêu cầu hai vị trí không có liên kết, trình biên dịch có thể phải chèn các thao tác đổi vị trí logic. Những thao tác bổ sung làm mạch dài hơn, tăng số lần điều khiển và có thể làm kết quả nhạy cảm hơn với nhiễu.

Vì vậy, cùng một thuật toán có thể cho hiệu quả khác nhau trên những thiết bị khác nhau. Một mạch ngắn trên kiến trúc có kết nối phù hợp có thể trở nên dài hơn đáng kể trên kiến trúc khác. Đây là lý do việc đánh giá chương trình lượng tử không chỉ dựa vào số lượng cổng trong mô tả ban đầu, mà còn phải xem xét cách mạch được biên dịch thành các thao tác thực tế.

Thiết bị không nhận các cổng lượng tử theo nghĩa trừu tượng

Sau khi biên dịch, các cổng lượng tử phải được chuyển thành tín hiệu điều khiển phù hợp với công nghệ phần cứng. Máy tính lượng tử có thể dựa trên những nền tảng vật lý khác nhau, chẳng hạn mạch siêu dẫn, ion bị bẫy hoặc các hệ thống khác đang được nghiên cứu và phát triển. Mỗi nền tảng có cách tạo, giữ và tác động lên trạng thái lượng tử riêng.

Ở lớp này, một cổng trong mô hình lập trình không còn chỉ là ký hiệu toán học. Nó được thực hiện bằng chuỗi xung, tín hiệu hoặc thao tác vật lý có các tham số cụ thể. Bộ điều khiển phải định thời những tín hiệu đó, phối hợp nhiều kênh và hạn chế những tác động ngoài ý muốn lên các qubit lân cận. Thiết bị cũng cần duy trì điều kiện môi trường thích hợp, bởi trạng thái lượng tử có thể bị ảnh hưởng bởi nhiễu, dao động và tương tác không mong muốn.

Không nên hiểu điều này theo nghĩa mọi phép tính lượng tử đều diễn ra trong một hộp kín tách biệt hoàn toàn với máy tính thông thường. Trái lại, hệ thống điều khiển cổ điển thường rất phức tạp. Nó có thể đảm nhận việc phát tín hiệu, đồng bộ thời gian, đọc dữ liệu và phản hồi theo kết quả đo. Trong một số quy trình, phần cổ điển còn cập nhật tham số của mạch sau mỗi vòng chạy để chuẩn bị cho vòng tiếp theo.

Vì sao phải chạy cùng một mạch nhiều lần?

Một điểm dễ gây nhầm lẫn là kết quả của chương trình lượng tử thường không phải một giá trị duy nhất xuất hiện sau một lần chạy. Khi đo, trạng thái lượng tử được chuyển thành dữ liệu cổ điển theo một kết quả cụ thể. Nếu mạch được thực hiện lại nhiều lần trong những điều kiện tương tự, các kết quả có thể phân bố theo những tần suất khác nhau.

Chẳng hạn, một mạch có thể tạo ra trạng thái trong đó nhiều kết quả đo có khả năng xuất hiện. Người nghiên cứu sẽ chạy mạch nhiều lần, mỗi lần thường được gọi là một lượt đo hoặc một mẫu, rồi đếm số lần từng kết quả xuất hiện. Từ phân bố này, họ ước tính đại lượng mà thuật toán quan tâm. Số lượt chạy cần thiết phụ thuộc vào bài toán, độ nhiễu và mức độ chính xác mong muốn.

Việc lặp lại không chỉ là cách “lấy trung bình” một cách đơn giản. Các kết quả có thể bị ảnh hưởng bởi sai số đọc, dao động của thiết bị và những thay đổi trong quá trình vận hành. Do đó, quy trình thực nghiệm thường cần các phép đo hiệu chuẩn hoặc những mạch đối chứng để hiểu thiết bị đang tạo ra sai lệch như thế nào. Dữ liệu thu được sau đó có thể được xử lý nhằm giảm một phần ảnh hưởng của nhiễu, nhưng việc xử lý này không biến kết quả thành dữ liệu hoàn hảo.

Vòng lặp lai giữa máy tính cổ điển và lượng tử

Nhiều chương trình lượng tử hiện nay được tổ chức thành vòng lặp lai. Máy tính cổ điển bắt đầu bằng việc chọn một bộ tham số. Các tham số đó được đưa vào một mạch lượng tử, mạch được chạy nhiều lần và kết quả đo được dùng để tính một hàm mục tiêu. Sau đó, thuật toán cổ điển điều chỉnh tham số rồi gửi một mạch mới đến thiết bị. Vòng lặp tiếp tục cho đến khi đạt điều kiện dừng phù hợp.

Cách làm này cho phép phần lượng tử thực hiện một số biến đổi mà phần cổ điển khó mô phỏng trực tiếp, trong khi máy tính cổ điển vẫn xử lý nhiệm vụ tối ưu hóa và điều phối. Tuy nhiên, nó cũng tạo ra chi phí truyền dữ liệu, thời gian chờ và yêu cầu ổn định giữa nhiều lần chạy. Nếu mỗi vòng lặp phải chờ lâu hoặc kết quả đo quá nhiễu, việc tìm kiếm tham số có thể trở nên khó khăn.

Đối với người phát triển, điều đó có nghĩa là thiết kế thuật toán không thể tách rời khỏi cách triển khai. Một công thức đẹp trên giấy chưa chắc tạo thành chương trình hữu ích nếu cần quá nhiều lần đo, quá nhiều cổng hoặc một loại tương tác mà phần cứng không hỗ trợ. Khả năng quan sát và kiểm soát toàn bộ vòng lặp thường quan trọng không kém việc lựa chọn thuật toán ban đầu.

Đánh giá một chương trình lượng tử cần nhìn vào đâu?

Thời gian chạy là một tiêu chí, nhưng không phải tiêu chí duy nhất. Cần xem xét độ sâu của mạch, số lượng qubit được sử dụng, số cổng hai qubit, khả năng kết nối giữa các qubit, số lần lặp đo và mức độ ổn định của kết quả. Một mạch ít qubit nhưng có nhiều thao tác phức tạp có thể khó triển khai hơn một mạch lớn hơn nhưng có cấu trúc phù hợp.

Cũng cần phân biệt kết quả của mô phỏng với kết quả từ thiết bị thật. Trình mô phỏng có thể cho phép kiểm tra logic của mạch trong điều kiện lý tưởng hoặc với mô hình nhiễu được chọn trước. Thiết bị thật lại chịu những đặc tính riêng của phần cứng, nên chương trình cần được kiểm thử và hiệu chỉnh trong môi trường thực tế. Khoảng cách giữa hai loại kết quả là thông tin quan trọng về độ trưởng thành của cả thuật toán lẫn hệ thống.

Một quy trình đáng tin cậy thường bắt đầu bằng việc kiểm tra mạch nhỏ, theo dõi kết quả trung gian và thay đổi từng yếu tố thay vì đưa ngay một chương trình lớn vào vận hành. Cách tiếp cận này giúp xác định vấn đề nằm ở ý tưởng thuật toán, bước biên dịch, thiết bị điều khiển hay khâu phân tích dữ liệu. Nó cũng tránh việc gán mọi sai lệch cho “tính chất lượng tử” mà bỏ qua những lỗi kỹ thuật có thể phát hiện được.

Từ quy trình kỹ thuật đến cách nhìn thực tế

Hiểu một chương trình lượng tử đi qua máy tính như thế nào giúp đặt những tuyên bố về công nghệ vào đúng bối cảnh. Một kết quả nổi bật không chỉ đến từ số lượng qubit được công bố. Nó còn liên quan đến chất lượng kết nối, khả năng điều khiển, độ chính xác của phép đo, cách biên dịch và số lần lặp cần thiết để rút ra kết luận.

Quan trọng hơn, quy trình này cho thấy máy tính lượng tử là một hệ thống liên ngành. Toán học cung cấp mô hình, khoa học máy tính tổ chức thuật toán và trình biên dịch, vật lý tạo ra nền tảng qubit, còn kỹ thuật điều khiển biến các phép toán trừu tượng thành tín hiệu có thể vận hành. Không có lớp nào tự mình quyết định toàn bộ giá trị của thiết bị.

Trong tương lai, khi phần cứng được cải thiện và các kỹ thuật bảo vệ thông tin lượng tử tiến bộ, ranh giới giữa mạch logic và thao tác vật lý có thể được che giấu tốt hơn với người lập trình. Dù vậy, các nguyên tắc cơ bản vẫn còn nguyên: bài toán phải được chuyển thành mạch, mạch phải phù hợp với kiến trúc, thiết bị phải được điều khiển và kết quả phải được đo lặp rồi phân tích cẩn thận. Nắm được chuỗi bước đó là nền tảng để đánh giá máy tính lượng tử bằng tiêu chí kỹ thuật thay vì chỉ dựa vào những hình ảnh giàu tính biểu tượng về công nghệ này.