Aracılığıyla paylaş


Kaynak tahmin aracıyla büyük programlar için çalışma sürelerini iyileştirme

Bu makalede, büyük programlar için çalışma sürelerini iyileştirmek için Q# kullanmayı öğreneceksiniz.

Kaynak tahmin aracını çalıştırma hakkında bilgi için bkz. Kaynak tahmin aracısını çalıştırmanın farklı yolları.

Önkoşullar

VS Code'da Python kullanmak istiyorsanız, aşağıdakileri de yapmanız gerekir:

  • VS Code'da Python ve Jupyter uzantılarının en son sürümlerini yükleyin.

  • Python kitaplığının en son sürümünü qdk yükleyin.

    python -m pip install --upgrade qdk
    

Q# programlarla manuel önbelleğe alma

Kaynak tahmin aracına bir kaynak tahmin işi gönderdiğinizde, kaynak tahmin aracı tahminleri hesaplamak için kuantum programınızın tamamını değerlendirir. Programınız Q# aynı işlemi, örneğin çok yinelemeli bir döngüde birçok kez çağırırsa, kaynak tahmin işi çalışma süresi çok uzun olabilir. Bu tür programların uzun çalışmasını azaltmak için, maliyetleri hesaplamak ve önbelleğe almak için işlemi bir kez çalıştırabilir ve ardından önbelleğe alınan verileri işleme yapılan sonraki çağrılarda kullanabilirsiniz. Bu teknik el ile önbelleğe alma olarak adlandırılır.

Kaynak tahmin aracı target , el ile önbelleğe alma gerçekleştirmek için iki Q# işlevi destekler: BeginEstimateCaching ve EndEstimateCaching. BeginEstimateCaching işlevi aşağıdaki girişleri alır:

Giriş parametresi Türü Description
name Dize Maliyetleri önbelleğe almak istediğiniz kod parçasının benzersiz adı
variant Int Aynı kod parçası için maliyetin değişkenini gösterir

Not

İki özel işlemdir BeginEstimateCaching ve EndEstimateCaching kaynak tahmin aracı için iç işlemlerdir. Programınız Q# bu işlemlerden birini içeriyorsa, programınız diğer simülatörde veya donanımda targetsçalışamaz.

Örneğin, programınızda birçok kez çağrılan Q# adlı bir ExpensiveOperation işleminiz olduğunu varsayalım. Toplam kaynak tahmini çalışma süresini azaltmak için çalıştırılacak ExpensiveOperation maliyet tahminini önbelleğe alın:

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

İşlev BeginEstimateCaching, programınız tarafından her çağrıldığında ExpensiveOperation çağırma işlemi gerçekleşir. İlk kez çağrıldığında BeginEstimateCaching, true döndürülür ve ExpensiveOperation için maliyet verilerini biriktirmeye başlar. Bu, kodunuzun pahalı kod parçasının yürütülmesine devam etmesine neden olur. Çağrıldığında EndEstimateCaching , maliyet verileri gelecekteki kullanım için depolanır ve programınızın genel maliyetine eklenir.

İkinci kez çağrıldığında ExpensiveOperation (ve daha sonra), kaynak tahmin aracı depolanan (önbelleğe alınmış) maliyet verilerini bulur, bunu programın genel maliyetine ekler ve döndürür false. Bu, kaynak tahmin aracının pahalı kod parçasının sonraki çalıştırmalarını atlamasına neden olur. Önbelleğe alma işleminin düzgün çalışması için EndEstimateCaching öğesini koşulun sonuna yerleştirin ve BeginEstimateCaching ile EndEstimateCaching arasında yer alan bölgeleri iç içe geçirin.

bağımsız değişkeni, SingleVariant() ilk çalıştırmasında toplanan maliyet verilerinin ExpensiveOperation kod parçasının sonraki tüm çalıştırmalarında yeniden kullanılabilmesini gösterir. Her zaman böyle olmayabilir. Örneğin, kodunuzun bir değişkeninin ctek ve çift değerleri için farklı maliyetleri varsa, bir variant değer sağlayabilirsiniz:

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

Bu durumda, c'un tek ve çift değerleri için önbellek farklıdır. Başka bir deyişle, çift değerler için c toplandığında, bu veriler yalnızca çift değerler için c tekrar kullanılır ve aynı durum tek değerler için c de geçerlidir.

Not

Kaynak tahmin aracıyla çalışırken sorunlarla karşılaşırsanız Sorun giderme sayfasına bakın veya ile iletişime geçin AzureQuantumInfo@microsoft.com.