Optymalizacje sterowane profilem
Profilowana optymalizacja umożliwia optymalizowanie pliku wyjściowego, w którym optymalizator używa danych z przebiegu testowego pliku .exe lub .dll.Dane przedstawiają, jak program jest prawdopodobne wykonywany w środowisku produkcyjnym.
Profilowana optymalizacja jest dostępna tylko dla x86 lub x64 natywnych elementów docelowych.Profilowana optymalizacja nie jest dostępna dla plików wyjściowych, które będą wykonywane w środowisku uruchomieniowym języka wspólnego.Nawet jeśli produkowany jest zestaw z mieszanką kodu natywnego i zarządzanego (skompilowanego z /clr), nie można używać optymalizacji profilowanej tylko z kodem natywnym.Podczas próby skompilowania projektu za pomocą tych opcji ustawionych w IDE, wystąpią błędy kompilacji.
[!UWAGA]
Informacje zebrane podczas profilowania przebiegu testowego zastępują optymalizacje, które normalnie byłyby, jeśli zostanie określony /Ob, /Os, lub /Ot.Aby uzyskać więcej informacji, zobacz /Ob (Rozszerzenie funkcji wbudowanej) i /Os, /Ot (Preferuj mały kod, Preferuj szybki kod).
Poniżej znajduje się przegląd procesów używających profilowanej optymalizacji:
Kompilacja jednego lub więcej plików kodu źródłowego z /GL.
Każdy moduł skompilowany z /GL może być zbadany podczas przebiegu testowego profilowanej optymalizacji, aby przechwytywał zachowania czasu wykonania.Każdy moduł w kompilacji profilowanej optymalizacji nie musi być skompilowany z /GL.Jednak tylko moduły skompilowane z /GL będą instrumentowane i później dostępne dla profilowanej optymalizacji.
Łączenie z /LTCG:PGINSTRUMENT.
/LTCG:PGINSTRUMENT tworzy pusty plik .pgd.Po dodaniu danych do przebiegu testowego do pliku .pgd, dane te mogą służyć, jako dane wejściowe dla następnego łączącego kroku (tworzenie zoptymalizowanego obrazu).Podczas określania /LTCG:PGINSTRUMENT, można opcjonalnie określić /PGD pod nazwą inną niż domyślna lub lokalizację dla pliku .pgd.
Profil aplikacji.
Za każdym razem kiedy sesja profilowana EXE kończy się lub profilowana DLL jest zwalniana, tworzony jest plik nazwa_aplikacji!#.pgc.Plik .pgc zawiera informacje o konkretnych przebiegach testowych aplikacji. # to numer, rozpoczynający się od 1, która zwiększa się na podstawie liczby innych plików nazwa_aplikacji! #.pgc w katalogu.Można usunąć plik .pgc, jeśli przebieg testowy nie reprezentuje scenariusza, który chcesz zoptymalizować.
Podczas przebiegu testowego, można wymusić zamknięcie aktualnie otwartego pliku .pgc i utworzenie nowego pliku .pgc z narzędziem pgosweep (na przykład, gdy koniec testu scenariusza nie pokrywa się z zamknięciem aplikacji).
Można użyć opcji PogoSafeMode podczas profilowania aplikacji.Ta opcja pozwala określić, czy aplikacja jest profilowana w trybie awaryjnym lub w trybie szybkim.Aby uzyskać więcej informacji dotyczących trybów, zobacz PogoSafeMode.
Łączenie z /LTCG:PGOPTIMIZE.
/LTCG:PGOPTIMIZE tworzy zoptymalizowany obraz.Ten krok przyjmuje jako dane wejściowe plik .pgd.Aby uzyskać więcej informacji, zobacz /LTCG:PGOPTIMIZE.
Istnieje nawet możliwość utworzenia zoptymalizowanego pliku wyjściowego i ustalenie później dodatkowego profilowania, aby utworzyć jeszcze bardziej zoptymalizowany obraz.Jeśli instrumentowany obraz i jego plik .pgd są dostępne, można zrobić dodatkowe przebiegi testowe i ponownie skompilować zoptymalizowany obraz z nowszym plikiem .pgd.
Oto lista profilowanych optymalizacji:
Wbudowanie Na przykład, jeśli istnieje funkcja A, która często wywołuję funkcję B, a funkcja B jest stosunkowo niewielka, profilowana optymalizacja funkcja B zostanie wbudowana do funkcji A.
Wirtualne wywołanie spekulacji – Jeśli pewna funkcja jest często wywoływana, przez wirtualne wywołanie lub inne wywołanie za pomocą wskaźnika funkcji, profilowana optymalizacja warunkowo może wstawić - bezpośrednie wywołanie często wywoływanej funkcji i bezpośrednie wywołanie może być wbudowane.
Alokacja rejestru – Optymalizacja z wynikami danych profilu z lepszym przydzielaniem rejestrów.
Podstawowy blok optymalizacji – Podstawowy blok optymalizacji pozwala często wykonywać podstawowe bloki, które są umieszczone w ramce w tym samym zestawie stron (lokalnie).Minimalizuje liczbę używanych stron, co minimalizuje ilość zajętej pamięci.
Optymalizacja rozmiaru/prędkości – Funkcje, gdzie program spędza dużo czasu, mogą zostać zoptymalizowane pod względem prędkości.
Funkcja układu – Na podstawie grafu wywołań i profilowanego zachowania obiektu wywołującego/wywoływanego, funkcje które wydają się być tą samą ścieżką wykonania, są umieszczane w tej samej sekcji.
Warunkowa optymalizacja rozgałęzień – Z sondowaną wartością, profilowana optymalizacja można znaleźć, jeśli dana wartość w instrukcji switch jest używana częściej niż inne wartości. Tę wartość można następnie wyciągnąć z instrukcji switch. To samo można zrobić z instrukcją if/else gdzie optymalizator może uporządkować if/else tak, że albo blok if lub else jest umieszczony pierwszy w zależności, który blok jest częściej ustawiony na true.
Martwa separacja kodu – Kod, który nie jest wywoływany podczas profilowania jest przenoszony do specjalnej sekcji, która jest dołączana na końca zestawu sekcji.To efektywnie utrzymuje tą sekcję poza często używanymi stronami.
Separacja kodu EH – Rzadko wykonywany kod EH, może być często przenoszony do sekcji, gdzie profilowana optymalizacja może określić, które wyjątki występują w wyjątkowych warunkach.
Pamięć wewnętrzna – Ekspansja wewnętrzna może zostać podjęta, jeśli można ustalić, czy wewnętrzna jest wywoływana często.Wewnętrzne mogą być również optymalizowane na podstawie rozmiaru bloku przenoszenia lub kopiowania.
Aby uzyskać dodatkowe informacje, zobacz Walkthrough: Using Profile-Guided Optimizations.
W tej sekcji
Narzędzia do optymalizacji sterowanej profilem
Porady: scalanie wielu profili PGO w jeden profil