Visual Studio에서 프로필 기반 최적화 구성

프로필 기반 최적화 지원은 AGDE 버전 22.2.71에서 도입되었습니다.

PGO 설정 찾기

Solution Explorer(솔루션 탐색기)에서 프로젝트 설정을 엽니다.

현재 프로젝트의 Visual Studio Solution Explorer(솔루션 탐색기) 속성 메뉴

그림 1: Visual Studio Solution Explorer(솔루션 탐색기) 창

플랫폼이 Android 구성(예: Android-arm64-v8a)으로 설정되어 있는지 확인합니다.

왼쪽 패널에서 Configuration Properties > General(구성 속성 > 일반)을 선택합니다. PGO라는 속성 그룹을 찾습니다.

General(일반) 속성이 표시되고 PGO 설정이 강조 표시된 프로젝트 속성 대화상자

그림 2: 프로젝트 속성 대화상자

프로젝트에서 PGO 계측 빌드 사용 설정

프로젝트에 Instrumented(계측됨)라는 새 구성을 추가합니다. 이는 기존의 최적화된 빌드이며 테스트를 위해 개발 중에 사용하는 구성을 기반으로 합니다. 컴파일러 최적화 설정을 유지하는 한 추가 디버깅 기능을 계속 사용 설정할 수 있습니다.

Property Pages(속성 페이지) 대화상자에서 Configuration Manager…(구성 관리자)를 클릭합니다.

활성 솔루션 구성 및 플랫폼 드롭다운과 구성 관리자 버튼이 표시된 속성 페이지 대화상자 상단

그림 3: Configuration Manager(구성 관리자) 대화상자

Configuration Manager(구성 관리자) 대화상자에서 Active solution configuration(활성 솔루션 구성) 드롭다운을 선택하고 <New…>(<새로 만들기...>)를 선택합니다.

활성 솔루션 구성 드롭다운이 열려 있고 새로 만들기 옵션이 강조 표시된 구성 관리자 대화상자

그림 4: 새 빌드 구성 만들기

새로운 PGO 계측 구성을 만듭니다.

기존 출시 빌드 구성을 기반으로 새 PGO 계측 빌드 구성을 만드는 새 솔루션 구성 대화상자

그림 5: New Solution Configuration(새 솔루션 구성) 대화상자

게임 프로필을 생성할 수 있도록 PGO 계측 모드에서 빌드를 사용 설정하려면 Profile-Guided Optimization Mode(프로필 기반 최적화 모드) 설정의 옵션 목록에서 Instrumented(계측됨)를 선택합니다.

PGO 설정이 표시되고 프로필 기반 최적화 모드가 Instrumented(계측됨)로 설정되었으며 일반 설정으로 열린 프로젝트 속성 대화상자

그림 6: PGO 설정이 강조 표시된 프로젝트 속성 대화상자

Profile Guided Optimization Profiles(프로필 기반 최적화 프로필) 설정의 경우 Android 기기에서 원시 출력 프로필 데이터 파일을 쓸 폴더의 경로를 입력합니다. 일반적으로 이 값은 /data/data/<package name>/cache/와 같아야 합니다. 여기서 <package name>은 APK의 전체 패키지 이름입니다(예: com.google.sample.tunnel).

작동 방식에 관한 자세한 내용은 Clang 문서를 참고하세요.

PGO 계측 프로필 데이터를 기기에 쓰기

PGO 데이터는 일반적으로 프로세스가 종료될 때 PGO 계측 시스템에서 기기에 작성합니다. Android에서는 앱을 나가는 것이 아니라 앱이 항상 종료됩니다. 즉, 기본 '디스크에 쓰기' 기능이 트리거되지 않으므로 앱에서 PGO 데이터를 수동으로 써야 합니다.

앱에서 __llvm_profile_write_file을 명시적으로 호출하여 프로필 데이터를 작성해야 합니다. 이 기호는 PGO 계측 빌드를 빌드할 때만 사용할 수 있습니다. 이를 더 쉽게 하려면 __llvm_profile_write_file을 정방향 선언할 때 다음 패턴을 사용하는 것이 좋습니다.

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

이 함수를 호출하면 이전에 지정한 폴더에 프로필 데이터가 작성됩니다.

프로필 실행 수행

프로필을 생성하려면 대상 기기에서 PGO 계측으로 빌드된 APK를 실행하세요. 만족스럽게 코드를 실행하고 __llvm_profile_write_file 함수 호출을 트리거한 후에 앱에서 프로필 데이터를 저장소에 씁니다.

이 시점에서는 컴파일러가 사용할 수 있도록 기기에서 프로필을 다시 복사합니다.

컴파일러에서 사용할 프로필 데이터 준비

개별적으로 사용하는 경우 Android NDK에서 Clang/LLVM의 일부로 제공되는 명령줄 도구 llvm-profdata는 빌드의 프로필 기반 최적화 중에 컴파일러에서 사용할 프로필 데이터 파일을 준비하는 데 사용됩니다.

AGDE는 프로젝트에 추가한 프로필 데이터 파일을 병합하고 프로젝트 속성 페이지의 Profile-Guided Optimization Mode(프로필 기반 최적화 모드) 설정이 Optimized(최적화됨)로 설정될 때 이를 사용하여 이 단계를 자동으로 실행합니다.

프로필 기반 최적화를 사용 설정하여 프로젝트 빌드

이제 프로필을 캡처하여 프로젝트에 추가했으므로 컴파일러가 이 데이터를 사용하여 빌드 최적화를 미세 조정할 수 있습니다.

PGO 최적화 빌드의 새 프로젝트 구성을 만들어 필요할 때 이 모드로만 빌드하도록 합니다.

출시 빌드를 기반으로 빌드 구성을 생성하는 새 솔루션 구성 대화상자, 이번에는 PGO-Optimized가 새 빌드 구성 이름으로 사용됨

그림 7: 새로운 PGO 최적화 빌드 구성 만들기

프로젝트 속성 페이지의 Profile-Guided Optimization Mode(프로필 기반 최적화 모드) 설정을 Optimized(최적화됨)로 설정합니다.

PGO 설정이 표시되고 프로필 기반 최적화 모드가 Optimized(최적화됨)로 설정되었으며 일반 설정으로 열린 프로젝트 속성 대화상자

그림 8: PGO 최적화 모드를 Optimized(최적화됨)로 설정

기기에서 파일을 복사하고 솔루션 탐색기에서 프로젝트에 추가합니다. 이러한 프로필 데이터 파일은 다음에 PGO 최적화 구성을 빌드할 때 컴파일러에 의해 선택되며 컴파일러가 코드를 최적화하는 방법을 미세 조정하는 데 사용됩니다.

ADB를 사용하거나 Android Device Explorer를 사용하여 기기에서 프로필 데이터 파일을 프로젝트로 복사할 수 있습니다.

AGDE 외부에서 프로필 기반 최적화 사용

AGDE에서 지원하지 않는 빌드 시스템을 사용하는 경우 빌드를 직접 수정해야 할 수도 있습니다. Clang 문서에서는 필요한 스위치(-fprofile-generate-fprofile-use)를 다룹니다.

게임에 미들웨어 엔진을 사용하는 경우 엔진 문서를 참조하여 PGO를 사용 설정하는 방법(지원되는 경우)을 확인하세요.