Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pengoptimalan yang dipandu profil (PGO) memungkinkan Anda mengoptimalkan seluruh file yang dapat dieksekusi. Pengoptimal menggunakan data dari eksekusi pengujian file .exe atau .dll. Data mewakili kemungkinan performa program di lingkungan produksi.
Catatan
SPGO (Sample Profile-Guided Optimization) adalah pendekatan alternatif yang menggunakan Windows Performance Counters pada CPU perangkat keras, alih-alih instrumentasi. SPGO tidak memerlukan kompilasi berinstrumentasi - Anda dapat memprofilkan biner rilis yang sudah ada dengan menggunakan xperf. Untuk informasi selengkapnya, lihat Introducing Sample Profile Guided Optimization in MSVC dan tutorial Sample Profile-Guided Optimization (SPGO).
Pengoptimalan yang dipandu profil hanya tersedia untuk target asli x86, x64, atau ARM64. Pengoptimalan yang dipandu profil tidak tersedia untuk file yang dapat dieksekusi yang berjalan pada runtime bahasa umum. Bahkan jika Anda menghasilkan rakitan dengan kode asli dan terkelola campuran (dengan menggunakan opsi pengompilasi /clr ), Anda tidak dapat menggunakan pengoptimalan yang dipandu profil hanya pada kode asli. Jika Anda mencoba membuat kompilasi proyek dengan opsi ini yang sudah disetel dalam IDE, akan mengakibatkan kesalahan build.
Catatan
Informasi yang dikumpulkan dari uji coba pembuatan profil mengesampingkan pengoptimalan yang jika tidak demikian akan berlaku jika Anda menentukan /Ob, /Os, atau /Ot. Untuk informasi selengkapnya, lihat /Ob (Ekspansi Fungsi Sebaris) dan /Os, /Ot (Mendukung Kode Kecil, Mendukung Kode Cepat).
Langkah-langkah untuk mengoptimalkan aplikasi Anda
Untuk menggunakan pengoptimalan yang dipandu profil, ikuti langkah-langkah berikut untuk mengoptimalkan aplikasi Anda:
Kompilasi satu atau beberapa file kode sumber dengan /GL.
Pengompilasi memeriksa setiap modul yang dibangun dengan /GL selama pengujian pengoptimalan yang dipandu profil untuk menangkap perilaku run-time. Anda tidak perlu mengompilasi setiap modul dalam build pengoptimalan berbasis profil dengan /GL. Namun, hanya modul yang dikompilasi dengan /GL yang diinstrumentasikan dan nantinya tersedia untuk pengoptimalan yang dipandu profil.
Tautkan dengan menggunakan /LTCG dan /GENPROFILE atau /FASTGENPROFILE.
Saat Anda menggunakan /LTCG dan /GENPROFILE atau /FASTGENPROFILE, aplikasi berinstrumen
.pgdmembuat file saat dijalankan. Setelah data uji-jalan ditambahkan ke.pgdfile, Anda dapat menggunakannya sebagai input ke langkah tautan berikutnya (membuat gambar yang dioptimalkan). Saat Anda menentukan /GENPROFILE, Anda dapat secara opsional menambahkan argumen PGD=nama file untuk menentukan nama atau lokasi nondefault untuk file tersebut.pgd. Kombinasi opsi linker /LTCG dan /GENPROFILE atau /FASTGENPROFILE menggantikan opsi linker /LTCG:PGINSTRUMENT yang tidak digunakan lagi.Profilkan aplikasi.
Setiap kali sesi EXE yang diprofilkan berakhir, atau DLL yang diprofilkan dilepas dari memori, proses membuat file
appname!N.pgc. File.pgcberisi informasi tentang eksekusi pengujian aplikasi tertentu. appname adalah nama aplikasi Anda, dan N adalah angka yang dimulai dengan 1. Ini bertambah berdasarkan jumlah fileappname!N.pgclain dalam direktori. Anda dapat menghapus.pgcfile jika uji coba tidak mewakili skenario yang ingin Anda optimalkan.Selama uji coba, Anda dapat memaksa penutupan file yang saat ini terbuka
.pgcdan pembuatan file baru.pgcdengan menggunakan utilitas pgosweep (misalnya, ketika akhir skenario pengujian tidak bertepatan dengan pematian aplikasi).Aplikasi Anda juga dapat langsung memanggil fungsi PGO, PgoAutoSweep, untuk mengambil data profil di titik panggilan sebagai sebuah berkas
.pgc. Ini dapat memberikan Anda kontrol yang lebih halus atas kode yang dicakup oleh data yang diambil dalam file.pgcAnda. Untuk contoh cara menggunakan fungsi ini, lihat dokumentasi PgoAutoSweep .Saat Anda membuat build yang diberi instrumentasi, secara bawaan, pengumpulan data dilakukan dalam mode yang tidak aman dengan thread, yang lebih cepat tetapi mungkin kurang tepat. Dengan menggunakan argumen EXACT ke /GENPROFILE atau /FASTGENPROFILE, Anda dapat menentukan pengumpulan data secara aman dalam mode multi-utas, yang lebih tepat tapi lebih lambat. Opsi ini juga tersedia jika Anda mengatur variabel lingkungan PogoSafeMode yang tidak digunakan lagi, atau opsi penghubung /POGOSAFEMODE yang tidak digunakan lagi, saat Anda membuat build berinstrumentasi.
Tautkan dengan menggunakan /LTCG dan /USEPROFILE.
Gunakan opsi linker /LTCG dan /USEPROFILE untuk membuat gambar yang dioptimalkan. Langkah ini mengambil
.pgdfile sebagai input. Saat Anda menentukan /USEPROFILE, Anda dapat secara opsional menambahkan argumen PGD=nama file untuk menentukan nama atau lokasi nondefault untuk file tersebut.pgd. Anda juga dapat menentukan nama ini dengan menggunakan opsi linker /PGD yang tidak digunakan lagi. Kombinasi opsi linker /LTCG dan /USEPROFILE menggantikan opsi linker /LTCG:PGOPTIMIZE dan /LTCG:PGUPDATE yang tidak digunakan lagi.
Bahkan, Anda dapat membuat berkas eksekusi yang telah dioptimalkan, lalu kemudian menyadari bahwa pemrofilan tambahan akan berguna untuk menghasilkan citra yang lebih optimal. Jika gambar berinstrumen dan filenya .pgd tersedia, Anda dapat melakukan lebih banyak uji coba dan membangun kembali gambar yang dioptimalkan dengan file yang lebih .pgd baru dengan menggunakan opsi linker /LTCG dan /USEPROFILE yang sama.
Catatan
File .pgc dan .pgd keduanya adalah jenis file biner. Jika Anda menyimpannya dalam sistem kontrol sumber, hindari transformasi otomatis yang mungkin dibuat ke file teks.
Pengoptimalan yang dilakukan oleh PGO
Pengoptimalan yang dipandu profil mencakup pemeriksaan dan peningkatan ini:
Inlining - Misalnya, jika fungsi A sering memanggil fungsi B, dan fungsi B relatif kecil, optimasi berbasis profil akan menyisipkan fungsi B secara sebaris ke dalam fungsi A.
Spekulasi Panggilan Virtual - Jika panggilan virtual, atau panggilan lain melalui penunjuk fungsi, sering menargetkan fungsi tertentu, pengoptimalan berpanduan profil dapat menyisipkan panggilan langsung yang dijalankan secara kondisional ke fungsi yang sering ditargetkan, dan panggilan langsung dapat di-inline-kan.
Alokasi Register - Pengoptimalan berdasarkan data profil menghasilkan alokasi register yang lebih baik.
Pengoptimalan Blok Dasar - Pengoptimalan blok dasar memungkinkan blok dasar yang sering dieksekusi secara temporer dalam bingkai tertentu untuk ditempatkan di kumpulan halaman yang sama (lokalitas). Ini meminimalkan jumlah halaman yang digunakan, yang meminimalkan overhead memori.
Pengoptimalan Ukuran/Kecepatan - Fungsi di mana program menghabiskan waktu eksekusi terbanyak dapat dioptimalkan untuk kecepatan.
Tata Letak Fungsi - Berdasarkan grafik panggilan dan perilaku pemanggil/callee yang di-profil, fungsi yang cenderung berada di sepanjang jalur eksekusi yang sama ditempatkan di bagian yang sama.
Pengoptimalan Cabang Bersyarat - Dengan pemeriksaan nilai, pengoptimalan yang dipandu profil dapat menemukan apakah nilai tertentu dalam pernyataan pengalihan digunakan lebih sering daripada nilai lain. Nilai ini kemudian dapat ditarik keluar dari pernyataan switch. Pengoptimalan yang sama dapat dilakukan dengan
if...elseinstruksi di mana pengoptimal dapat memesanif...elsesehinggaifblok atauelseditempatkan terlebih dahulu, tergantung pada blok mana yang lebih sering benar.Pemisahan Kode Mati - Pengoptimalan yang dipandu profil memindahkan kode yang tidak dipanggil selama pembuatan profil ke bagian khusus di akhir set bagian. Ini secara efektif mencegah bagian ini muncul di halaman yang sering diakses.
Pemisahan Kode EH - Karena kode EH hanya dijalankan dalam keadaan terkecuali, sering kali dapat dipindahkan ke bagian terpisah. Pengoptimalan yang dipandu profil memindahkannya ketika mereka menentukan bahwa pengecualian hanya terjadi pada kondisi yang luar biasa.
Intrinsik Memori - Apakah suatu intrinsik akan diekspansi atau tidak bergantung pada seberapa sering intrinsik tersebut dipanggil. Intrinsik juga dapat dioptimalkan berdasarkan ukuran blok pemindahan atau salinan.
Langkah berikutnya
Untuk mempelajari selengkapnya tentang variabel, fungsi, dan alat lingkungan ini yang dapat Anda gunakan dalam pengoptimalan yang dipandu profil, lihat sumber daya berikut:
Variabel lingkungan untuk pengoptimalan yang dipandu profil
Variabel ini menentukan perilaku run-time skenario pengujian. Mereka sekarang tidak digunakan lagi dan digantikan oleh opsi linker baru. Dokumen ini memperlihatkan kepada Anda cara berpindah dari variabel lingkungan ke opsi linker.
PgoAutoSweep
Fungsi yang dapat Anda tambahkan ke aplikasi untuk menyediakan kontrol pengambilan data file yang lebih terperinci.
pgosweep
Utilitas baris perintah yang menulis semua data profil ke .pgc file, menutup .pgc file, dan membuka file baru .pgc .
pgomgr
Utilitas baris perintah yang menambahkan data profil dari satu atau beberapa .pgc file ke .pgd file.
Cara: Menggabungkan beberapa profil PGO ke dalam satu profil
Contoh penggunaan pgomgr.
Contoh tutorial Pengoptimalan Profile-Guided (SPGO)
Gunakan penghitung kinerja perangkat keras CPU alih-alih instrumentasi. Tidak memerlukan build berinstrumentasi - lakukan profiling pada biner rilis Anda yang sudah ada dengan xperf.