Udostępnij za pośrednictwem


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

Zobacz też

Informacje

Narzędzia kompilacji C/C++