Berbagai jenis profil target di Azure Quantum

Perangkat Quantum masih merupakan teknologi yang muncul dan sayangnya tidak semuanya dapat menjalankan setiap program Q#. Dengan demikian, Anda perlu mengingat beberapa batasan saat Anda mengembangkan program kuantum. Jenis profil target menentukan kemampuan perangkat kuantum yang Anda target gunakan dengan program Q# Anda. Microsoft Quantum Development Kit (QDK) memiliki serangkaian jenis profil yang berbeda target , yang bersama-sama mendukung semua kemampuan perangkat kuantum saat ini yang tersedia di Azure Quantum.

Artikel ini membahas berbagai jenis target profil di Azure Quantum, batasannya, dan cara mengonfigurasinya di QDK.

Profil target dan batasannya

Saat ini, Azure Quantum dan QDK mengelola profil yang berbedatarget, tergantung pada kemampuan mereka untuk menjalankan program representasi perantara kuantum (QIR).

  • Unrestricted: Profil ini dapat menjalankan program apa pun QIR , dan dengan demikian program Q# apa pun, dalam batas memori untuk simulator atau jumlah qubit untuk komputer kuantum fisik.
  • Base: Profil ini dapat menjalankan program Q# apa pun yang tidak memerlukan penggunaan hasil dari pengukuran kubit untuk mengontrol alur program. Dalam program Q# yang ditargetkan untuk QPU semacam ini, nilai jenis Result tidak mendukung perbandingan kesetaraan.
  • Adaptive RI: Profil ini memiliki kemampuan terbatas untuk menggunakan hasil dari pengukuran kubit untuk mengontrol alur program. Dalam program Q# yang ditargetkan untuk QPU semacam ini, Anda dapat membandingkan nilai jenis Result sebagai bagian dari kondisi dalam if pernyataan operasi, memungkinkan pengukuran pertengahan sirkuit.
  • Adaptive RIF: Profil ini memiliki kemampuan yang sama dengan Adaptive RI profil, tetapi juga mendukung operasi floating point.

Membuat dan menjalankan program untuk profil Unrestrictedtarget

Unrestricted target profil dapat menjalankan semua program Q#, sehingga Anda dapat menulis kode Q# tanpa perlu mempertimbangkan pembatasan fungsionalitas. Azure Quantum tidak menyediakan perangkat targets aktual yang mendukung profil ini. Namun, Anda dapat menjalankan Unrestricted program Q# yang memiliki profil ini pada simulator yang disediakan dengan QDK.

Mengonfigurasi profil Unrestrictedtarget

Jika Anda tidak mengatur QIRtarget profil secara manual, pengkompilasi secara otomatis mengatur target profil untuk Anda. Pengkompilasi memilih profil paling ketat yang masih memungkinkan program Anda berjalan pada perangkat target Azure Quantum yang Anda pilih.

Untuk mengatur QIRtarget profil secara manual ke Tidak Dibatasi, pilih salah satu opsi berikut:

  • Jika Anda menyiapkan proyek Q#, tambahkan perintah berikut ke file proyek qsharp.json Anda:

    {
      "targetProfile": "unrestricted"
    }
    
  • Jika Anda bekerja dalam .qs file yang bukan bagian dari proyek Q#, atur target profil langsung dalam kode Q# Anda. Untuk melakukannya, sertakan @EntryPoint(Unrestricted) tepat sebelum operasi titik masuk dalam program Anda, bahkan ketika operasi tersebut adalah default Main.

  • Di Python, panggil qdk.init metode untuk mengatur target profil.

    from qdk import init, TargetProfile
    
    init(target_profile=TargetProfile.Unrestricted) 
    

Membuat dan menjalankan program untuk profil Basetarget

Base target profil 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, Anda tidak dapat menjalankan operasi berikut FlipQubitOnZero pada Basetarget:

    @EntryPoint(Base)
    operation FlipQubitOnZero() : Unit {
        use q = Qubit();
        if M(q) == Zero {
            X(q);
        }
    }

Operasi FlipQubitOnZero gagal ketika Anda menjalankan kode ini pada Basetarget karena perangkat target tidak dapat menggunakan hasil pengukuran kubit untuk melakukan logika bersyarat saat algoritma kuantum berjalan. Jika Anda berencana untuk menjalankan algoritma pada Basetarget perangkat, pastikan bahwa kode Anda tidak berisi blok untuk ifpencabangan bersyarat yang bergantung pada qubit terukur untuk mengevaluasi kondisi logis.

Mengonfigurasi profil Basetarget

Untuk mengatur QIRtarget profil secara manual ke Base, pilih salah satu opsi berikut:

  • Jika Anda menyiapkan proyek Q#, tambahkan perintah berikut ke file proyek qsharp.json Anda:

    {
      "targetProfile": "base"
    }
    
  • Jika Anda bekerja dalam .qs file yang bukan bagian dari proyek Q#, atur target profil langsung dalam kode Q# Anda. Untuk melakukannya, sertakan @EntryPoint(Base) tepat sebelum operasi titik masuk dalam program Anda, bahkan ketika operasi tersebut adalah default Main.

  • Di Python, panggil qdk.init metode untuk mengatur target profil.

    from qdk import init, TargetProfile
    
    init(target_profile=TargetProfile.Base) 
    

targets yang didukung untuk profil Basetarget

Untuk saat ini, Azure Quantum menyediakan akses ke hal berikut Basetargets:

Provider Simulator Unit Pengolahan Kuantum (QPU)
IonQ ionq.simulator ionq.qpu.*
Rigetti rigetti.sim.* rigetti.qpu.*

Untuk mempelajari selengkapnya tentang penyedia ini di Azure Quantum, lihat penyedia IonQ dan penyedia Rigetti.

Membuat dan menjalankan program untuk profil Adaptive RItarget

Adaptive RI target profil dapat menjalankan berbagai aplikasi Q# yang lebih luas daripada Base profil, tetapi masih memiliki beberapa batasan. Tidak seperti Basetarget profil, Adaptive RItargets mendukung pengukuran sirkuit menengah.

Dengan pengukuran pertengahan sirkuit, Anda dapat secara selektif mengukur qubit pada titik mana pun dalam program kuantum, bukan hanya akhir. Anda kemudian dapat menggunakan hasil pengukuran untuk operasi lain dalam program Anda, seperti percabangan bersyarat dengan blok if. Qubit yang Anda ukur di tengah sirkuit runtuh ke status klasik (nol atau satu), tetapi qubit yang tidak diukur tetap dalam keadaan kuantum mereka.

Saat Anda mengukur qubit dalam Q#, nilai jenis Result dikembalikan. Jika Anda ingin menggunakan hasil ini dalam pernyataan bersyarat, Anda harus melakukan perbandingan langsung dalam pernyataan kondisi. Blok kondisional yang sesuai mungkin tidak berisi pernyataan return atau set.

Misalnya, kode Q# berikut diizinkan dalam :Adaptive RItarget

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

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

Mengonfigurasi profil Adaptive RItarget

Untuk mengatur QIRtarget profil secara manual ke Adaptive RI, pilih salah satu opsi berikut:

  • Jika Anda menyiapkan proyek Q#, tambahkan perintah berikut ke file proyek qsharp.json Anda:

    {
      "targetProfile": "adaptive_ri"
    }
    
  • Jika Anda bekerja dalam .qs file yang bukan bagian dari proyek Q#, atur target profil langsung dalam kode Q# Anda. Untuk melakukannya, sertakan @EntryPoint(Adaptive_RI) tepat sebelum operasi titik masuk dalam program Anda, bahkan ketika operasi tersebut adalah default Main.

  • Di Python, panggil qdk.init metode untuk mengatur target profil.

    from qdk import init, TargetProfile
    
    init(target_profile=TargetProfile.Adaptive_RI) 
    

targets yang didukung untuk profil Adaptive RItarget

Untuk saat ini, Quantinuum adalah satu-satunya penyedia di Azure Quantum yang memiliki Adaptive RItargets.

  • Emulator:quantinuum.sim.h2-1e dan quantinuum.sim.h2-2e
  • QPU:quantinuum.qpu.h2-1 dan quantinuum.qpu.h2-2

Untuk informasi selengkapnya tentang penawaran Quantinuum di Azure Quantum, lihat Emulator Quantinuum.

Membuat dan menjalankan program untuk profil Adaptive RIFtarget

Adaptive RIF target profil memiliki semua kemampuan dari profil Adaptive RI, tetapi juga mendukung program Q# yang berisi perhitungan titik apung.

Misalnya, kode Q# berikut diizinkan dalam :Adaptive RIFtarget

@EntryPoint(Adaptive_RIF)
operation DynamicFloat() : Double {
    use q = Qubit();
    H(q);
    mutable f = 0.0;
    if M(q) == One {
        f = 0.5;
    }
    Reset(q);
    return f;
}

Mengonfigurasi profil Adaptive RIFtarget

Untuk mengatur QIRtarget profil secara manual ke Adaptive RIF, pilih salah satu opsi berikut:

  • Jika Anda menyiapkan proyek Q#, tambahkan perintah berikut ke file proyek qsharp.json Anda:

    {
      "targetProfile": "adaptive_rif"
    }
    
  • Jika Anda bekerja dalam .qs file yang bukan bagian dari proyek Q#, atur target profil langsung dalam kode Q# Anda. Untuk melakukannya, sertakan @EntryPoint(Adaptive_RIF) tepat sebelum operasi titik masuk dalam program Anda, bahkan ketika operasi tersebut adalah default Main.

  • Di Python, panggil qdk.init metode untuk mengatur target profil.

    from qdk import init, TargetProfile
    
    init(target_profile=TargetProfile.Adaptive_RIF) 
    

targets yang didukung untuk profil Adaptive RIFtarget

Untuk saat ini, Azure Quantum tidak memiliki Adaptive RIFtargets. Namun, Anda dapat menjalankan program untuk Adaptive RIFtargets pada simulator lokal di QDK.