Azure Quantum'da hedef profil türleri

Bu makalede, Azure Quantum'daki kuantum bilgi işlem sağlayıcılarında kullanılabilen farklı target profil türleri açıklanmaktadır. Şu anda, alanın erken geliştirme aşamasından dolayı, kuantum cihazlarının üzerinde çalışan programlar için bazı sınırlamaları ve gereksinimleri vardır.

Kuantum İşleme Birimleri (QPU): farklı profiller ve bunların sınırlamaları

Kuantum İşleme Birimi (QPU), kuantum algoritmalarını hesaplamak için değiştirilebilen birbirine bağlı bir dizi kubit içeren fiziksel veya sanal bir işlemcidir. Kuantum bilgisayarın veya kuantum simülatörünün merkezi bileşenidir.

Kuantum cihazları hala yeni ortaya çıkan bir teknolojidir ve bunların tümü Q# kodunu çalıştıramayabilir. Bu nedenle, farklı targetsiçin programlar geliştirirken bazı kısıtlamaları göz önünde bulundurmanız gerekir. Şu anda Azure Quantum ve QDK, QPU'lar için üç farklı profili yönetmektedir:

  • Full: Bu profil, simülatörler için bellek sınırları veya fiziksel kuantum bilgisayarlar için kubit sayısı içinde herhangi bir Q# programını çalıştırabilir.
  • No Control Flow: Bu profil, program akışını denetlemek için kubit ölçümlerinden elde edilecek sonuçların kullanılmasını gerektirmeyen herhangi bir Q# programını çalıştırabilir. Bu tür QPU için ed bir Q# programı targetiçinde, türündeki Result değerler eşitlik karşılaştırmasını desteklemez.
  • Basic Measurement Feedback: Bu profil, program akışını denetlemek için kubit ölçümlerinin sonuçlarını sınırlı bir şekilde kullanabilir. Bu tür QPU için ed bir Q# programı targetiçinde, işlemlerdeki deyimlerin içindeki if koşulların bir parçası olarak tür Result değerlerini karşılaştırabilir ve devre ortası ölçümüne olanak sağlayabilirsiniz. Karşılık gelen koşullu bloklar veya set deyimleri içermeyebilirreturn.

Profil için Full uygulama oluşturma ve çalıştırma targets

Full profil targets herhangi bir Q# programını çalıştırabilir, başka bir deyişle işlev kısıtlamaları olmadan program yazabilirsiniz. Azure Quantum henüz bu profili sağlamamaktadır target .

Profil için No Control Flow uygulama oluşturma ve çalıştırma targets

No Control Flow profil targets , program akışını denetlemek için kubit ölçümlerinin sonuçlarını kullanamama kısıtlaması ile çok çeşitli Q# uygulamaları çalıştırabilir. Daha açık belirtmek gerekirse, tür Result değerleri eşitlik karşılaştırmayı desteklemez.

Örneğin, bu işlem üzerinde No Control Flowtargetçalıştırılamaz:

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

Hesaplama akışını bir deyimiyle if denetlemek için iki sonuç (desired != M(q)) arasında bir karşılaştırmayı değerlendirdiğinden bu işlemi üzerinde No Control Flowtarget çalıştırmaya çalışmak başarısız olur. Bu, ve else deyimleri gibi elif her tür koşullu dallanma için geçerli olacaktır.

Not

Şu anda, program akışını denetlemek için sonuçları kullanmasanız bile ile ölçülen No Control Flowtargetskubitlere işlem uygulayan kuantum programları gönderemezsiniz. Yani, No Control Flowtargets orta devre ölçümlerine izin verme.

Örneğin, aşağıdaki kod üzerinde No Control Flowtargetçalıştırılamaz:

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

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

Şu anda bunlar No Control Flowtargets Azure Quantum için kullanılabilir:

Profil için Basic Measurement Feedback uygulama oluşturma ve çalıştırma targets

Basic Measurement Feedbackprofil targets çok çeşitli Q# uygulamaları çalıştırabilir ve yalnızca işlemlerdeki deyimlerdeki koşulların if bir parçası olarak tür Result değerlerini karşılaştırabilirsiniz. Bu profil türü, profiller üzerinde No Control Flow bir gelişme olduğunu varsayalım, ancak yine de bazı sınırlamalara tabidir.

Basic Measurement Feedback profil targets , ölçüm tabanlı koşullu işlemlere ve orta devre ölçümlerine olanak sağlar; başka bir deyişle kubitler bir kuantum programının son deyimi dışında bir noktada seçmeli olarak ölçülebilir ve ölçümün çıkışı diğer işlemlerde kullanılabilir. Orta devre ölçümü, kuantum programının herhangi bir noktasında birden çok ölçüme olanak tanır. Ölçülen kubitlerin kuantum bilgileri klasik duruma (sıfır veya bir) daraltılır, ancak ölçülmeyen kubitler kuantum durumlarını korur.

Q# dilinde kubit ölçülürken tür Result değeri döndürülür. Bu sonucu bir koşullu deyimde kullanmak istiyorsanız, koşullu deyimde doğrudan karşılaştırmanız gerekir. Karşılık gelen koşullu bloklar veya set deyimleri içermeyebilirreturn.

Örneğin, içinde aşağıdaki Q# koduna Basic Measurement Feedbacktargetizin verilir:

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

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

Ancak, taşınan Boole değerlendirmesiyle aynı koda izin verilmez :

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

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

deyimine SetQubitState veya setreturn deyimini if eklemediğiniz sürece içindeki No Control Flow işlemi kullanılabilirBasic Measurement Feedbacktarget. Bu, ve else deyimleri gibi elif her tür koşullu dallanma için geçerli olacaktır. Örneğin, aşağıdaki işlem içinde Basic Measurement Feedbacktargetkullanılamaz:

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

Şu anda bunlar Basic Measurement Feedbacktargets Azure Quantum için kullanılabilir: