Cara mengoptimalkan menjalankan program besar dengan Estimator Sumber Daya

Dalam artikel ini, Anda mempelajari cara mengoptimalkan waktu eksekusi saat menjalankan program besar Q# dengan Azure Quantum Resource Estimator.

Untuk informasi tentang cara menjalankan Estimator Sumber Daya, lihat Berbagai cara untuk menjalankan Estimator Sumber Daya.

Prasyarat

Jika Anda ingin menggunakan Python di Visual Studio Code, Anda juga memerlukan hal berikut:

  • Instal versi terbaru ekstensi Python, dan Jupyter untuk Visual Studio Code.

  • Paket Azure Quantum qsharp terbaru.

    python -m pip install --upgrade qsharp 
    

Cara menangani program besar Q#

Ketika Anda mengirimkan pekerjaan estimasi sumber daya ke Estimator Sumber Daya, program kuantum dievaluasi sepenuhnya untuk mengekstrak perkiraan sumber daya. Jika Anda ingin memperkirakan sumber daya Q# operasi yang dipanggil berkali-kali, misalnya, dalam perulangan dengan banyak iterasi, eksekusi pekerjaan estimasi sumber daya mungkin memakan waktu lama. Salah satu cara untuk mengurangi waktu eksekusi yang lama adalah dengan menjalankan operasi sekali, menghitung dan menyimpan biayanya, dan menggunakan data pada panggilan berikutnya. Teknik ini disebut penembolokan manual.

Estimator target Sumber Daya mendukung dua Q# fungsi untuk melakukan penembolokan manual: BeginEstimateCaching(name: String, variant: Int): Bool dan EndEstimateCaching(): Unit. BeginEstimateCaching fungsi mengambil sebagai input name yang merupakan nama unik fragmen kode yang ingin Anda cache biayanya, dan bilangan bulat variant yang membedakan varian biaya yang berbeda untuk fragmen yang sama.

Catatan

Dua operasi BeginEstimateCaching khusus dan EndEstimateCaching merupakan operasi intrinsik untuk Estimator Sumber Daya. Mereka tidak didukung oleh eksekusi targetslain .

Misalnya, Anda memiliki operasi yang Q# disebut ExpensiveOperation yang disebut berkali-kali dalam perulangan. Anda dapat menggunakan penembolokan untuk mengurangi waktu estimasinya:

operation ExpensiveOperation(c: Int, b : Bool): Unit {
    if BeginEstimateCaching("MyNamespace.ExpensiveOperation", SingleVariant()) {
        // Code block to be cached
        EndEstimateCaching();
    }
}

Ketika ExpensiveOperation digunakan berulang kali, BeginEstimateCaching dipanggil setiap kali. Ketika BeginEstimateCaching dipanggil untuk pertama kalinya, ia mengembalikan true dan memulai akumulasi data biaya. Ini menyebabkan kode dilanjutkan dengan eksekusi fragmen kode yang mahal. Ketika EndEstimateCaching dipanggil, data biaya disimpan untuk penggunaan di masa mendatang dan dimasukkan ke dalam biaya keseluruhan program.

Ketika ExpensiveOperation dipanggil untuk kedua kalinya (dan selanjutnya), Estimator Sumber Daya menemukan data biaya yang disimpan (di-cache), menggabungkannya ke dalam biaya keseluruhan program dan mengembalikan false. Ini menyebabkan fragmen kode yang mahal dilewati oleh karena itu Estimator Sumber Daya menjalankan program lebih cepat. EndEstimateCaching harus ditempatkan di akhir kondisi, dan wilayah yang diapit dapat disarangkan BeginEstimateCaching-EndEstimateCaching .

SingleVariant() menunjukkan bahwa data biaya yang dikumpulkan pada eksekusi pertama dapat digunakan kembali dalam semua eksekusi berikutnya dari fragmen kode. Ini mungkin tidak selalu terjadi. Misalnya, jika kode Anda memiliki biaya yang berbeda untuk nilai ganjil dan genap dari variabel 'c', Anda dapat memberikan variant nilai:

operation ExpensiveOperation(c: Int, b : Bool): Unit {
    if BeginEstimateCaching("MyNamespace.ExpensiveOperation", c % 2) {
        // Some code
        EndEstimateCaching();
    }
}

Dalam hal ini, cache berbeda untuk nilai ganjil dan genap dari c. Dengan kata lain, data yang dikumpulkan untuk nilai c genap hanya digunakan kembali untuk nilai cgenap , dan hal yang sama berlaku untuk nilai ganjil dari c.

Catatan

Jika Anda mengalami masalah saat bekerja dengan Estimator Sumber Daya, lihat halaman Pemecahan Masalah, atau hubungi AzureQuantumInfo@microsoft.com.

Langkah berikutnya