Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Profile-Guided Optimization (PGO) to technika optymalizacji kompilatora, która używa danych profilowania środowiska uruchomieniowego do tworzenia bardziej wydajnego kodu natywnego. W przypadku korzystania z PGO kompilator zmienia kolejność kodu na podstawie sposobu działania aplikacji, co skutkuje lepszym wykorzystaniem pamięci podręcznej instrukcji, mniejszym rozmiarem kodu i szybszym wykonywaniem.
Ważna
Aplikacje klasyczne korzystające z pakietu Zestaw SDK do aplikacji systemu Windows korzystają ze standardowego przepływu pracy MSVC PGO. W przeciwieństwie do aplikacji platformy UWP aplikacje klasyczne nie wymagają ręcznego kopiowania pgort140.dll do pakietu aplikacji — biblioteka środowiska uruchomieniowego PGO jest dostępna za pośrednictwem standardowego środowiska uruchomieniowego C/C++.
Jak działa PGO
PGO to proces trzyetapowy:
- Instrument — twórz aplikację z włączoną instrumentacją. Kompilator wstawia sondy, które rejestrują sposób wykonywania kodu.
-
Profilowanie — uruchom instrumentowaną aplikację i przećwicz najważniejsze scenariusze. Dane profilowania są zapisywane w
.pgcplikach. - Optymalizacja — ponowne kompilowanie aplikacji przy użyciu danych profilowania. Kompilator optymalizuje układ kodu, inline’owanie oraz rozgałęzienia na podstawie rzeczywistego zachowania programu podczas działania.
Przewodnik krok po kroku
1. Konfigurowanie pod kątem wydania
Ustaw konfigurację rozwiązania na Release (lub inną konfigurację, która generuje zoptymalizowany kod). PGO nie przynosi żadnych korzyści w przypadku kompilacji debugowych.
2. Włącz optymalizację całego programu
We właściwościach projektu przejdź do pozycji C/C++>Optimization i sprawdź, czy włączono optymalizację całego programu (/GL).
3. Zinstrumentuj kompilację
Przejdź do Linker>Optymalizacja i ustaw opcję Generowanie kodu w czasie konsolidacji na Optymalizacja sterowana profilowaniem — Instrumentacja (/LTCG:PGInstrument).
Skompiluj rozwiązanie. Plik .pgd jest generowany wraz z danymi wyjściowymi kompilacji.
4. Uruchamianie aplikacji i zbieranie danych profilu
Uruchom aplikację i przećwiczyć scenariusze, które chcesz zoptymalizować — uruchamianie, nawigację, przetwarzanie danych lub dowolny przepływ pracy krytyczny dla wydajności. Podczas uruchamiania aplikacji użyj narzędzia (dołączonego pgosweep.exe do zestawu narzędzi MSVC), aby zebrać dane profilowania:
pgosweep.exe MyApp.exe MyApp!Scenario1.pgc
Możesz zebrać wiele plików .pgc dla różnych scenariuszy.
5. Połącz dane profilu (opcjonalnie)
Domyślnie wszystkie .pgc pliki umieszczone obok .pgd pliku są scalane automatycznie podczas kroku optymalizacji. Aby nadać różnym scenariuszom różną wagę, użyj narzędzia pgomgr.exe:
pgomgr.exe -merge:3 MyApp!CoreScenario.pgc MyApp.pgd
Daje to uruchomieniu CoreScenario trzykrotnie wyższy priorytet niż pozostałym uruchomieniom.
6. Optymalizowanie kompilacji
Wróć do Konsolidator>Optymalizacja i ustaw opcję Generowanie kodu w czasie konsolidacji na Optymalizacja sterowana profilowaniem — optymalizacja (/LTCG:PGOptimize).
Skompiluj ponownie rozwiązanie. Linker automatycznie scala wszystkie pliki .pgc i generuje zoptymalizowany plik binarny na podstawie danych profilujących.
Porady dotyczące skutecznego PGO
- Profiluj realistyczne scenariusze. Jakość optymalizacji PGO zależy od tego, jak reprezentatywne są przebiegi profilowania. Przetestuj ścieżki wykonywania kodu, z których użytkownicy będą rzeczywiście korzystać.
- Połącz wiele uruchomień. Zbieranie danych profilowania z kilku różnych scenariuszy użycia w celu pokrycia szerokiego zakresu ścieżek kodu.
- Ponowne profilowanie, gdy kod ulegnie znacznej zmianie. Dane profilu stają się nieaktualne, gdy wprowadzasz poważne zmiany w bazie kodu. Okresowo ponownie instrumentuj i profiluj.
- Mierzenie wpływu. Porównaj czas uruchamiania, przepływność i użycie pamięci przed i po PGO, aby sprawdzić, czy optymalizacja jest opłacalna.