Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Profil destekli iyileştirme (PGO), yürütülebilir dosyanın tamamını iyileştirmenize olanak tanır. İyileştirici, .exe veya .dll dosyasının test çalıştırmalarından verileri kullanır. Veriler, programın üretim ortamındaki olası performansını temsil eder.
Not
SPGO (Örnek Profili Kılavuzlu İyileştirme), araçsal ekleme yerine donanım CPU’sunun Windows Performans Sayaçlarını kullanan alternatif bir yaklaşımdır. SPGO, araç eklenmiş bir derleme gerektirmez - mevcut bir sürüm ikili dosyasının profilini xperf kullanarak çıkarabilirsiniz. Daha fazla bilgi için bkz: MSVC'de Örnek Profil Kılavuzlu Optimizasyonuna Giriş ve Örnek Profil Kılavuzlu Optimizasyon (SPGO) öğreticisi.
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
Profilleme testi çalıştırmalarından toplanan bilgiler, /Ob, /Os veya /Ot belirtirseniz aksi takdirde geçerli olacak eniyileş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.
Derleyici, çalışma zamanı davranışını yakalamak için profil destekli iyileştirme testi çalıştırmaları sırasında /GL ile oluşturulan her modülü inceler. /GL ile profil destekli bir iyileştirme derlemesindeki her modülü derlemeniz gerekmez. Ancak yalnızca /GL ile derlenen modüller enstrümante edilir ve daha sonra profil yönlendirmeli eniyileştirmeler için kullanılabilir.
/LTCG ve /GENPROFILE veya /FASTGENPROFILE kullanarak bağlantı sağlayın.
Hem /LTCG hem de /GENPROFILE veya /FASTGENPROFILE kullandığınızda, araçlanan uygulama çalıştığında bir
.pgddosyası oluşturur. Test çalıştırması verileri dosyaya.pgdeklendikten sonra, bunu sonraki bağlantı adımına giriş olarak kullanabilirsiniz (iyileştirilmiş görüntü oluşturulur). /GENPROFILE belirttiğinizde, isteğe bağlı olarak bir PGD=dosya adı bağımsız değişkeni ekleyerek dosya için.pgdbilinmeyen 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 alınan bir EXE oturumu her sona erdiğinde veya profili alınan bir DLL bellekten boşaltıldığında, işlem bir
appname!N.pgcdosyası oluşturur. Dosya.pgc, belirli bir uygulama testi çalıştırması hakkında bilgi içerir. appname uygulamanızın adı, N ise 1 ile başlayan bir sayıdır. Dizindeki diğerappname!N.pgcdosyaların sayısına göre artar. Test çalıştırması iyileştirmek istediğiniz bir senaryoyu temsil etmiyorsa dosyayı silebilirsiniz.pgc.Bir test çalıştırması sırasında,
.pgcyardımcı programını kullanarak (örneğin, bir test senaryosunun sonu uygulama kapatma ile çakışmadığında) açık olan.pgcdosyanın kapatılmasını ve yeni bir dosya oluşturulmasını zorlayabilirsiniz.Uygulamanız, çağrı noktasındaki profil verilerini bir dosyası olarak yakalamak için doğrudan
.pgcişlevini çağırabilir. Bu, dosyalarınızdaki.pgcyakalanan 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, fakat doğru sonuçlar vermeyebilir. EXACT bağımsız değişkenini /GENPROFILE veya /FASTGENPROFILE için kullanarak, daha kesin ancak daha yavaş olan iş parçacığı güvenli modda veri toplamayı belirtebilirsiniz. Bu seçenek, devre dışı bırakılan PogoSafeMode ortam değişkenini veya izlemeli derlemenizi oluşturduğunuzda devre dışı bırakılan /POGOSAFEMODE bağlayıcı seçeneğini ayarlarsanız da kullanılabilir.
/LTCG ve /USEPROFILE kullanarak bağlantı sağlayın.
İ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,
.pgddosyayı girdi olarak kullanır. /USEPROFILE belirttiğinizde, isteğe bağlı olarak bir PGD=dosya adı bağımsız değişkeni ekleyerek dosya için.pgdbilinmeyen bir ad veya konum belirtebilirsiniz. Bu adı, kullanım dışı /PGD bağlayıcısı seçeneğini kullanarak da belirtebilirsiniz. /LTCG ve /USEPROFILE bağlayıcı seçeneklerinin 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 daha fazla profil oluşturmanın yararlı olacağını belirlemek bile mümkündür. Araç eklenmiş görüntü ve ilgili .pgd dosyası mevcutsa, aynı .pgd ve /USEPROFILE bağlayıcı seçeneklerini kullanarak ek test çalıştırmaları yapabilir ve daha yeni dosyasını kullanarak optimize edilmiş görüntüyü yeniden oluşturabilirsiniz.
Not
Hem .pgc hem de .pgd dosyaları ikili dosya türleridir. Bunları bir kaynak denetim sisteminde depolarsanız, 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:
İç içe yerleştirme - Örneğin, A işlevi B işlevini sık sık çağırıyorsa ve B işlevi görece küçükse, profil güdümlü eniyileştirmeler B işlevini A işlevinin içine yerleştirir.
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ı optimizasyon, optimizasyon aracının
if...elseöğelerini, hangi bloğun daha sık true olduğuna bağlı olarakifya daelsebloğunu önce yerleştirecek şekilde sıralayabildiğiif...elseyönergeleriyle de yapılabilir.Geçersiz Kod Ayrımı - Profil temelli iyileştirme, profil oluşturma sırasında çağrılmamış kodu bölüm kümesinin sonundaki özel bir bölüme taşır. Bu bölümü etkin bir şekilde sık kullanılan sayfalardan uzak tutar.
EH Kod Ayrımı - EH kodu yalnızca istisnai durumlarda çalıştırıldığı için genellikle ayrı bir bölüme taşınabilir. Profil güdümlü iyileştirmeler, istisnaların yalnızca istisnai koşullarda meydana geldiğini belirlediklerinde onun yerini değiştirir.
Bellek İçsel İşlevleri - Bir içsel işlevin genişletilip genişletilmeyeceği, sık çağrılıp çağrılmadığına bağlıdır. Bir içsel, 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 edinmek için aşağıdaki kaynaklara bakın:
Profil destekli iyileştirmeler için ortam değişkenleri
Bu değişkenler test senaryolarının çalışma zamanı davranışını belirtir. 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
Uygulamanıza, ayrıntılı dosya veri yakalamayı kontrol sağlamak için ekleyebileceğiniz bir işlev.
pgosweep
Bir komut satırı yardımcı programı, tüm profil verilerini .pgc dosyasına yazar, .pgc dosyasını kapatır ve yeni bir .pgc dosyası açar.
pgomgr
Bir veya daha fazla .pgc dosyasından .pgd dosyasına profil verilerini 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.
Örnek Profil Rehberli Optimizasyon (SPGO) eğitimi
Enstrümantasyon yerine CPU donanım performans sayaçlarını kullanın. Araçlandırılmış derleme gerekmez; mevcut sürüm ikili dosyanızın profilini xperf ile çıkarın.