Jenis profil target di Azure Quantum

Artikel ini membahas berbagai jenis target profil yang tersedia di penyedia komputasi kuantum di Azure Quantum. Saat ini, karena tahap pengembangan awal lapangan, perangkat kuantum memiliki beberapa keterbatasan dan persyaratan untuk program yang berjalan di atasnya.

Unit Pemrosesan Kuantum (QPU): profil yang berbeda dan batasannya

Quantum Processing Unit (QPU) adalah prosesor fisik atau simulasi yang berisi sejumlah kubit yang saling terhubung yang dapat dimanipulasi ke algoritma kuantum komputasi. Ini adalah komponen sentral dari komputer kuantum atau simulator kuantum.

Perangkat kuantum masih merupakan teknologi yang berkembang, dan tidak semuanya dapat menjalankan semua kode Q#. Dengan demikian, Anda perlu mengingat beberapa batasan saat mengembangkan program untuk yang berbeda targets. Saat ini, Azure Quantum dan QDK mengelola tiga profil berbeda untuk QPU:

  • Full: Profil ini dapat menjalankan program Q# apa pun dalam batas memori untuk simulator atau jumlah qubit untuk komputer kuantum fisik.
  • No Control Flow: Profil ini dapat menjalankan program Q# apa pun yang tidak memerlukan penggunaan hasil dari pengukuran qubit untuk mengontrol alur program. Dalam program targetQ# yang ditujukan untuk QPU semacam ini, nilai jenis Result tidak mendukung perbandingan kesetaraan.
  • Basic Measurement Feedback: Profil ini memiliki kemampuan terbatas untuk menggunakan hasil dari pengukuran qubit untuk mengontrol alur program. Dalam program targetQ# yang ditujukan untuk QPU semacam ini, Anda dapat membandingkan nilai jenis Result sebagai bagian dari kondisi if dalam pernyataan dalam operasi, memungkinkan pengukuran pertengahan sirkuit. Blok kondisional yang sesuai mungkin tidak berisi pernyataan return atau set.

Membuat dan menjalankan aplikasi untuk Full profil targets

Full profil targets dapat menjalankan program Q# apa pun, yang berarti Anda dapat menulis program tanpa batasan fungsionalitas. Azure Quantum belum menyediakan target profil ini.

Membuat dan menjalankan aplikasi untuk No Control Flow profil targets

No Control Flow profil targets dapat menjalankan berbagai aplikasi Q#, dengan batasan bahwa mereka tidak dapat menggunakan hasil dari pengukuran qubit untuk mengontrol alur program. Lebih khusus lagi, nilai jenis Result tidak mendukung perbandingan kesetaraan.

Misalnya, operasi ini tidak dapat dijalankan pada No Control Flowtarget:

    operation SetQubitState(desired : Result, q : Qubit) : Result {
        if (desired != M(q)) {
            X(q);
        }
    }

Mencoba menjalankan operasi ini pada No Control Flowtarget akan gagal karena mengevaluasi perbandingan antara dua hasil (desired != M(q)) untuk mengontrol alur komputasi dengan if pernyataan. Ini akan berlaku untuk semua jenis percabangan bersyar, seperti elif pernyataan dan else .

Catatan

Saat ini, Anda tidak dapat mengirimkan program kuantum yang menerapkan operasi pada qubit yang telah diukur dalam No Control Flowtargets, bahkan jika Anda tidak menggunakan hasilnya untuk mengontrol alur program. Artinya, No Control Flowtargets jangan izinkan pengukuran pertengahan sirkuit.

Misalnya, kode berikut tidak dapat dijalankan pada No Control Flowtarget:

operation MeasureQubit(q : Qubit) : Result { 
   return M(q); 
}

operation SampleMeasuredQubit(q : Qubit) : Result {
    H(MeasureQubit(q));
    return M(MeasureQubit(q));
}

Saat ini, ini No Control Flowtargets tersedia untuk Azure Quantum:

Membuat dan menjalankan aplikasi untuk Basic Measurement Feedback profil targets

Basic Measurement Feedback profil targets dapat menjalankan berbagai aplikasi Q#, dengan batasan bahwa Anda hanya dapat membandingkan nilai jenis Result sebagai bagian dari kondisi dalam if pernyataan dalam operasi. Jenis profil ini menandakan peningkatan atas No Control Flow profil, tetapi masih tunduk pada beberapa batasan.

Basic Measurement Feedback profil targets memungkinkan operasi kondisional berbasis pengukuran dan pengukuran pertengahan sirkuit, yang berarti bahwa qubit dapat diukur secara selektif pada titik selain pernyataan akhir program kuantum, dan output pengukuran dapat digunakan dalam operasi lain. Pengukuran pertengahan sirkuit memungkinkan beberapa pengukuran pada titik mana pun di seluruh program kuantum. Informasi kuantum dari qubit yang diukur runtuh ke keadaan klasik (nol atau satu), tetapi qubit yang tidak diukur mempertahankan status kuantumnya.

Dalam Q# saat mengukur kubit, nilai jenis Result dikembalikan. Jika Anda ingin menggunakan hasil ini dalam pernyataan bersyarah, Anda harus langsung membandingkan dalam pernyataan kondisi. Blok kondisional yang sesuai mungkin tidak berisi pernyataan return atau set.

Misalnya, kode Q# berikut akan diizinkan dalam Basic Measurement Feedbacktarget:

operation MeasureQubit(q : Qubit) : Result { 
    return M(q); 
}

operation SetToZero(q : Qubit) : Unit {
     if MeasureQubit(q) == One { X(q); )
}

Namun, kode yang sama dengan evaluasi Boolean yang dipindahkan tidak akan diizinkan:

operation BeOne(q : Qubit) : Bool {
     return M(q) == One;
}

operation SetToZeroUsingBeOne(q : Qubit) : Unit {
     if BeOne(q) { X(q); }
}

SetQubitState Operasi di No Control Flow dapat digunakan selamatargetBasic Measurement FeedbackAnda tidak menyertakan pernyataan atau set apa pun return dalam if pernyataan . Ini akan berlaku untuk semua jenis percabangan bersyar, seperti elif pernyataan dan else . Misalnya, operasi berikut tidak dapat digunakan dalam Basic Measurement Feedbacktarget:

    operation SetQubitState(desired : Result, q : Qubit) : Result {
    if desired != M(q) {
        X(q);
        return M(q);
    }
}

Saat ini, ini Basic Measurement Feedbacktargets tersedia untuk Azure Quantum: