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
- Versi terbaru Visual Studio Code atau buka VISUAL Code di Web.
- Versi terbaru ekstensi Azure Quantum Development Kit. Untuk detail penginstalan, lihat Menginstal QDK di Visual Studio Code.
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.
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 iterasi. 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
. Hal 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 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 .c
Dengan kata lain, data yang dikumpulkan untuk nilai c
genap hanya digunakan kembali untuk nilai c
genap , 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.