Profil temelli iyileştirmeler

Profil destekli iyileştirme (PGO), iyileştiricinin .exe veya .dll dosyasının test çalıştırmalarından verileri kullandığı yürütülebilir dosyanın tamamını iyileştirmenize olanak tanır. Veriler, programın üretim ortamındaki olası performansını temsil eder.

Profil destekli iyileştirmeler yalnızca x86, x64 veya ARM64 yerel hedefleri için kullanılabilir. Ortak dil çalışma zamanında çalışan yürütülebilir dosyalar için profil destekli iyileştirmeler kullanılamaz. Karma yerel ve yönetilen kod içeren bir derleme oluştursanız bile (/clr derleyici seçeneğini kullanarak), yalnızca yerel kodda profil destekli iyileştirmeyi kullanamazsınız. IDE'de bu seçeneklerin ayarlandığı bir proje derlemeye çalışırsanız derleme hatası oluşur.

Not

Profil oluşturma test çalıştırmalarından toplanan bilgiler /Ob, /Os veya /Ot belirtirseniz geçerli olacak iyileştirmeleri geçersiz kılar. Daha fazla bilgi için bkz . /Ob (Satır içi İşlev Genişletme) ve /Os, /Ot (Küçük Kodu Tercih Et, Hızlı Kodu Tercih Et).

Uygulamanızı iyileştirme adımları

Profil destekli iyileştirmeyi kullanmak için uygulamanızı iyileştirmek için şu adımları izleyin:

  • /GL ile bir veya daha fazla kaynak kodu dosyası derleyin.

    /GL ile oluşturulan her modül, çalışma zamanı davranışını yakalamak için profil destekli iyileştirme testi çalıştırmaları sırasında incelenebilir. Profil destekli iyileştirme derlemesindeki her modülün /GL ile derlenmiş olması gerekmez. Ancak, yalnızca /GL ile derlenen modüller izlenir ve daha sonra profil destekli iyileştirmeler için kullanılabilir.

  • /LTCG ve /GENPROFILE veya /FASTGENPROFILE kullanarak bağlantı.

    hem /LTCG hem de /GENPROFILE veya /FASTGENPROFILE kullanıldığında, izlenen uygulama çalıştırıldığında bir .pgd dosya oluşturulur. Test çalıştırması verileri dosyaya .pgd eklendikten sonra, sonraki bağlantı adımına giriş olarak kullanılabilir (iyileştirilmiş görüntü oluşturulur). /GENPROFILE belirtirken, isteğe bağlı olarak bir PGD=dosya adı bağımsız değişkeni ekleyerek dosya için .pgd bilinmeyen bir ad veya konum belirtebilirsiniz. /LTCG ve /GENPROFILE veya /FASTGENPROFILE bağlayıcı seçeneklerinin birleşimi, kullanım dışı /LTCG:PGINSTRUMENT bağlayıcı seçeneğinin yerini alır.

  • Uygulamanın profilini oluşturun.

    Profili oluşturulmuş exe oturumu her sona erdiğinde veya profili oluşturulmuş DLL kaldırıldığında bir appname!N.pgc dosya oluşturulur. Dosya .pgc , belirli bir uygulama testi çalıştırması hakkında bilgi içerir. appname uygulamanızın adıdır ve N , dizindeki diğer appname!N.pgc dosyaların sayısına göre artırılan 1 ile başlayan bir sayıdır. Test çalıştırması iyileştirmek istediğiniz bir senaryoyu temsil etmiyorsa dosyayı silebilirsiniz .pgc .

    Bir test çalıştırması sırasında, şu anda açık .pgc olan dosyanın kapatılmasını ve pgosweep yardımcı programıyla yeni .pgc bir dosya oluşturulmasını zorlayabilirsiniz (örneğin, bir test senaryosunun sonu uygulama kapatma ile çakışmadığında).

    Uygulamanız, çağrının noktasındaki profil verilerini dosya olarak yakalamak için PgoAutoSweep adlı bir .pgc PGO işlevini de doğrudan çağırabilir. Bu, dosyalarınızdaki .pgc yakalanan verilerin kapsadığı kod üzerinde daha iyi denetim sahibi olmanıza yardımcı olabilir. Bu işlevin nasıl kullanılacağına ilişkin bir örnek için PgoAutoSweep belgelerine bakın.

    İzlemeli derlemenizi oluşturduğunuzda, veri toplama işlemi varsayılan olarak iş parçacığı güvenli olmayan modda yapılır ve bu daha hızlıdır ancak kesin olmayabilir. /GENPROFILE veya /FASTGENPROFILE için EXACT bağımsız değişkenini kullanarak, iş parçacığı güvenli modda veri toplamayı belirtebilirsiniz; bu daha kesin, ancak daha yavaştır. Bu seçenek, kullanım dışı bırakılan PogoSafeMode ortam değişkenini veya izlemeli derlemenizi oluştururken kullanım dışı /POGOSAFEMODE bağlayıcı seçeneğini ayarlarsanız da kullanılabilir.

  • /LTCG ve /USEPROFILE kullanarak bağlantı.

    İyileştirilmiş görüntüyü oluşturmak için hem /LTCG hem de /USEPROFILE bağlayıcı seçeneklerini kullanın. Bu adım, dosyaya .pgd giriş olarak gerçekleştirilir. /USEPROFILE belirttiğinizde, isteğe bağlı olarak bir PGD=filename bağımsız değişkeni ekleyerek dosya için .pgd varsayılan olmayan bir ad veya konum belirtebilirsiniz. Bu adı, kullanım dışı /PGD bağlayıcısı seçeneğini kullanarak da belirtebilirsiniz. /LTCG ve /USEPROFILE birleşimi, kullanım dışı bırakılan /LTCG:PGOPTIMIZE ve /LTCG:PGUPDATE bağlayıcı seçeneklerinin yerini alır.

İyileştirilmiş yürütülebilir dosyayı oluşturmak ve daha sonra daha iyileştirilmiş bir görüntü oluşturmak için ek profil oluşturmanın yararlı olacağını belirlemek bile mümkündür. İzlemeli görüntü ve .pgd dosyası kullanılabilir durumdaysa, aynı /LTCG ve /USEPROFILE bağlayıcı seçeneklerini kullanarak ek test çalıştırmaları yapabilir ve daha .pgd yeni dosyayla en iyi duruma getirilmiş görüntüyü yeniden oluşturabilirsiniz.

Not

Hem hem de .pgc .pgd dosyalar ikili dosya türleridir. Bir kaynak denetim sisteminde depolanıyorsa, metin dosyalarına yapılabilecek otomatik dönüştürmelerden kaçının.

PGO tarafından gerçekleştirilen iyileştirmeler

Profil destekli iyileştirmeler şu denetimleri ve iyileştirmeleri içerir:

  • Satır içi - Örneğin, A işlevi sık sık B işlevini çağırırsa ve B işlevi nispeten küçükse, A işlevinde profil destekli satır içi B işlevi iyileştirmeleri.

  • Sanal Çağrı Tahmini - Bir sanal çağrı veya işlev işaretçisi aracılığıyla yapılan başka bir çağrı belirli bir işlevi sık sık hedeflerse, profil destekli bir iyileştirme sık hedeflenen işleve koşullu olarak yürütülen bir doğrudan çağrı ekleyebilir ve doğrudan çağrı satır içine alınabilir.

  • Kayıt Ayırma - Profil verilerine göre iyileştirme, daha iyi kayıt ayırması sağlar.

  • Temel Blok İyileştirme - Temel blok iyileştirmesi, belirli bir çerçeve içinde zamansal olarak yürütülen yaygın olarak yürütülen temel blokların aynı sayfa kümesine (yerellik) yerleştirilmesine olanak tanır. Kullanılan sayfa sayısını en aza indirir ve bu da bellek yükünü en aza indirir.

  • Boyut/Hız İyileştirme - Programın en fazla yürütme zamanını harcadığı işlevler hız için iyileştirilebilir.

  • İşlev Düzeni - Çağrı grafiğine ve profili oluşturulmuş çağıran/çağıran davranışına bağlı olarak, aynı yürütme yolu boyunca olma eğiliminde olan işlevler aynı bölüme yerleştirilir.

  • Koşullu Dal İyileştirme - Değer yoklamalarıyla, profil destekli iyileştirmeler switch deyimindeki belirli bir değerin diğer değerlerden daha sık kullanılıp kullanılmadiğini bulabilir. Bu değer daha sonra switch deyiminden çekilebilir. Aynı şey, iyileştiricinin ... öğesini sıraladığı if...elseelse yönergeleriyle ifde yapılabilir, böylece hangi bloğun if daha sık doğru olduğuna bağlı olarak veya else bloğu önce yerleştirilir.

  • Geçersiz Kod Ayırma - Profil oluşturma sırasında çağrılmamış kod, bölüm kümesinin sonuna eklenen özel bir bölüme taşınır. Bu bölümü etkin bir şekilde sık kullanılan sayfalardan uzak tutar.

  • EH Kod Ayrımı - EH kodu yalnızca olağanüstü bir şekilde yürütülür, genellikle ayrı bir bölüme taşınabilir. Profil destekli iyileştirmeler özel durumların yalnızca istisnai koşullarda gerçekleştiğini saptayabildiğinde taşınır.

  • Bellek İç Bilgileri - bir iç öğesinin genişletilip genişletilmeyeceği, sık çağrılıp çağrılmadığına bağlıdır. Bir iç de, taşımaların veya kopyaların blok boyutuna göre iyileştirilebilir.

Sonraki adımlar

Profil destekli iyileştirmelerde kullanabileceğiniz bu ortam değişkenleri, işlevler ve araçlar hakkında daha fazla bilgi edinin:

Profil destekli iyileştirmeler için ortam değişkenleri
Bu değişkenler, test senaryolarının çalışma zamanı davranışını belirtmek için kullanılmıştır. Artık kullanım dışı bırakıldılar ve yeni bağlayıcı seçenekleriyle değiştirildiler. Bu belge, ortam değişkenlerinden bağlayıcı seçeneklerine nasıl geçiş yapılacağını gösterir.

PgoAutoSweep
Ayrıntılı dosya verileri yakalama denetimi sağlamak .pgc için uygulamanıza ekleyebileceğiniz bir işlev.

pgosweep
Tüm profil verilerini dosyaya .pgc yazan, dosyayı kapatan .pgc ve yeni .pgc bir dosya açan bir komut satırı yardımcı programı.

pgomgr
Dosyaya bir veya daha fazla .pgc dosyadan .pgd profil verileri ekleyen bir komut satırı yardımcı programı.

Nasıl yapılır: Birden çok PGO profilini tek bir profilde birleştirme
pgomgr kullanımı örnekleri.

Ayrıca bkz.

Ek MSVC derleme araçları