Konfigurowanie optymalizacji z pomocą profilu w Visual Studio

Pomoc w zakresie optymalizacji z pomocą profilu została wprowadzona w AGDE w wersji 22.2.71.

Znajdowanie ustawień PGO

Otwórz ustawienia projektu w Eksploratorze rozwiązań.

Menu właściwości eksploratora rozwiązań Visual Studio dla bieżącego projektu.

Rysunek 1. Okno Eksplorator rozwiązań Visual Studio.

Sprawdź, czy w sekcji Platforma jest ustawiona konfiguracja Androida (na przykład Android-arm64-v8a).

W panelu po lewej stronie wybierz Configuration Właściwości > General (Właściwości konfiguracji > Ogólne). Poszukaj grupy usług o nazwie PGO.

Okno właściwości projektu z zaznaczonymi właściwościami ogólnymi i ustawieniami PGO

Rysunek 2. Okno Właściwości projektu

Włącz kompilacje obsługiwane przez PGO w projekcie

Dodaj do projektu nową konfigurację o nazwie Instrumentowane. Opiera się ona na konfiguracji używanej podczas programowania. Powinna to być tradycyjna kompilacja zoptymalizowana (możesz nadal mieć włączone dodatkowe funkcje debugowania, o ile zachowasz ustawienia optymalizacji kompilatora).

W oknie dialogowym na stronie Property kliknij Menedżer konfiguracji...

Górna część okna usługi, w której widoczne są menu Konfiguracja aktywnego rozwiązania i Platforma oraz przycisk Menedżer konfiguracji.

Ilustracja 3. Okno Menedżera konfiguracji

W oknie menedżera konfiguracji wybierz menu Aktywna konfiguracja rozwiązania i kliknij <Nowy...>.

Okno Menedżera konfiguracji z otwartym menu Konfiguracja aktywnego rozwiązania i wyróżnioną opcją Nowy.

Rysunek 4. Tworzenie nowej konfiguracji kompilacji

...i utwórz nową konfigurację PGO-Instrumented.

Okno konfiguracji nowego rozwiązania z tworzeniem nowej konfiguracji kompilacji przeprowadzanej przez PGO na podstawie istniejącej konfiguracji kompilacji wersji

Rysunek 5. Okno „Nowa konfiguracja rozwiązania”

Aby włączyć tworzenie w trybie PGO i wygenerować profil gry, wybierz Instrumentowane z listy opcji ustawienia Tryb optymalizacji opartej na profilu.

Okno Właściwości projektu z otwartą sekcją Ustawienia ogólne, z widocznymi ustawieniami PGO i trybem Optymalizacja pod kątem profilu ustawionym na Instrumentowane.

Rysunek 6. Okno Właściwości projektu z wyróżnionymi ustawieniami PGO.

W przypadku ustawienia Profile wskazówek na temat optymalizacji profilu wpisz ścieżkę do folderu, w którym na urządzeniu z Androidem ma być zapisany nieprzetworzony plik wyjściowy profilu. Zwykle powinna ona mieć postać /data/data/<package name>/cache/, gdzie <package name> to pełna nazwa pakietu APK, np. com.google.sample.tunnel.

Więcej informacji o tym, jak to działa, znajdziesz w dokumentacji Clang.

Zapisywanie na urządzeniu danych profilu z instrumentów PGO

Dane PGO są zwykle zapisywane na urządzeniu przez system instrumentacji PGO po zakończeniu procesu. Na Androidzie aplikacje nie znikają – zawsze są zamykane. Oznacza to, że domyślna funkcja „zapisu na dysku” nigdy nie jest aktywowana, przez co aplikacja musi zapisywać dane PGO ręcznie.

Aby zapisać dane profilu, musisz samodzielnie wywołać funkcję __llvm_profile_write_file w aplikacji. Ten symbol jest dostępny tylko wtedy, gdy budujesz konstrukcję instruowaną przez PGO. Aby ułatwić sobie deklarowanie __llvm_profile_write_file, zalecamy użycie poniższego wzorca.

#ifdef PGO_INSTRUMENT
extern "C" int __llvm_profile_write_file(void);
#else
extern "C" int __llvm_profile_write_file(void) { return 0; }
#endif

Wywołanie tej funkcji powoduje zapisanie danych profilu w określonym wcześniej folderze.

Przeprowadzanie uruchomienia profilu

Aby wygenerować profil, uruchom na urządzeniu docelowym pakiet APK utworzony za pomocą narzędzia PGO. Gdy poprawisz kod i wywołasz wywołanie funkcji __llvm_profile_write_file, aplikacja zapisze dane profilu w pamięci.

Na tym etapie skopiuj profile z powrotem z urządzenia, aby kompilator mógł je wykorzystać.

Przygotowywanie danych profilu do użycia przez kompilator

W izolowanym przypadku narzędzie wiersza poleceń llvm-profdata wysyłane w ramach kodu Clang/LLVM w pakiecie NDK Androida służy do przygotowywania plików danych profilu do wykorzystania przez kompilator podczas optymalizacji kompilacji pod kątem profilu.

AGDE wykonuje ten krok automatycznie, scalając wszystkie pliki danych profilu dodane do projektu i korzystając z nich, gdy ustawienie Tryb optymalizacji wspomaganej przez profil na stronach właściwości projektu jest ustawione na Zoptymalizowany.

Tworzenie projektu z włączoną optymalizacją krok po kroku

Po przechwyceniu profili i dodaniu ich do projektu kompilator może używać tych danych do optymalizacji kompilacji.

Utwórz nową konfigurację projektu dla kompilacji zoptymalizowanej pod kątem PGO, aby kompilować w tym trybie tylko wtedy, gdy jest to potrzebne.

Okno konfiguracji nowego rozwiązania zawierające konfigurację kompilacji na podstawie kompilacji wersji, ale tym razem z nową nazwą konfiguracji kompilacji.

Rysunek 7. Tworzenie nowej konfiguracji kompilacji zoptymalizowanej pod kątem PGO

Na stronach właściwości projektu ustaw Tryb optymalizacji z pomocą profilu na Zoptymalizowany.

Okno Właściwości projektu z otwartą sekcją Ustawienia ogólne, z widocznymi ustawieniami PGO i trybem Optymalizacja pod kątem profilu na Zoptymalizowany

Rysunek 8. Ustawianie trybu optymalizacji PGO (Zoptymalizowany)

Skopiuj pliki z urządzenia i dodaj je do projektu w Eksploratorze rozwiązań. Te pliki danych profilu są pobierane przez kompilator, gdy następnym razem będziesz tworzyć konfigurację zoptymalizowaną pod kątem PGO, i używane do dostrajania sposobu, w jaki kompilator optymalizuje kod.

Pliki danych profilu możesz skopiować do projektu z urządzenia za pomocą ADB lub za pomocą Eksploratora urządzeń z Androidem.

Stosowanie optymalizacji opartej na profilu poza AGDE

Jeśli używasz systemu kompilacji, który nie jest obsługiwany przez AGDE, może być konieczne bezpośrednie edytowanie kompilacji. Dokumentacja Clang zawiera informacje na temat wymaganych przełączników – -fprofile-generate i -fprofile-use.

Jeśli w swojej grze używasz silnika oprogramowania pośredniczącego, sprawdź w dokumentacji danej wyszukiwarki, jak włączyć PGO (jeśli ta funkcja jest obsługiwana).