Aracılığıyla paylaş


PgoAutoSweep

PgoAutoSweep geçerli profil sayacı bilgilerini bir dosyaya kaydeder ve ardından sayaçları sıfırlar. Çalışan programdaki tüm profil verilerini iyileştirme derlemesinde daha sonra kullanmak üzere bir .pgc dosyaya yazmak için profil destekli iyileştirme eğitimi sırasında işlevini kullanın.

Sözdizimi

void PgoAutoSweep(const char* name);    // ANSI/MBCS
void PgoAutoSweep(const wchar_t* name); // UNICODE

Parametreler

ad
Kaydedilen .pgc dosya için tanımlayıcı bir dize.

Açıklamalar

Uygulama yürütme sırasında herhangi bir noktada profil verilerini kaydetmek ve sıfırlamak için uygulamanızdan çağrı PgoAutoSweep yapabilirsiniz. İzlenen bir derlemede, PgoAutoSweep geçerli profil oluşturma verilerini yakalar, bir dosyaya kaydeder ve profil sayaçlarını sıfırlar. Bu, yürütülebilir dosyanızın belirli bir noktasında pgosweep komutunu çağırmanın eşdeğeridir. İyileştirilmiş bir derlemede PgoAutoSweep , bir operasyon yoktur.

Kaydedilen profil sayacı verileri, base_name-adlı bir dosyaya yerleştirilir!value.pgc; burada base_name yürütülebilir dosyanın temel adıdır, ad öğesine geçirilen PgoAutoSweepparametredir ve değer, dosya adı çakışmalarını önlemek için genellikle monoton olarak artan bir sayı olan benzersiz bir değerdir.

.pgc tarafından PgoAutoSweep oluşturulan dosyalar, iyileştirilmiş yürütülebilir dosya oluşturmak için kullanılacak bir .pgd dosyada birleştirilmelidir. Birleştirmeyi gerçekleştirmek için pgomgr komutunu kullanabilirsiniz.

İyileştirme derlemesi sırasında birleştirilmiş .pgd dosyanın adını bağlayıcıya geçirmek için PGD=filename bağımsız değişkenini /USEPROFILE bağlayıcısı seçeneğine veya kullanım dışı /PGD bağlayıcısı seçeneğini kullanabilirsiniz. Dosyaları base_name.pgd adlı bir dosyayla birleştirirseniz.pgc, bağlayıcı bu dosya adını varsayılan olarak aldığından, komut satırında dosya adını belirtmeniz gerekmez.

İşlev, PgoAutoSweep izlemeli derleme oluşturulduğunda belirtilen iş parçacığı güvenliği ayarını korur. Varsayılan ayarı kullanırsanız veya /GENPROFILE veya /FASTGENPROFILE bağlayıcı seçeneği için NOEXACT bağımsız değişkenini belirtirseniz, çağrısı PgoAutoSweep iş parçacığı güvenli değildir. EXACT bağımsız değişkeni, iş parçacığı açısından güvenli ve daha doğru, ancak daha yavaş, izlemeli yürütülebilir dosya oluşturur.

Gereksinimler

Yordam Gerekli başlık
PgoAutoSweep <pgobootrun.h>

Yürütülebilir dosya, bağlı kitaplıklarda pgobootrun.lib dosyasını içermelidir. Bu dosya Visual Studio yüklemenize, desteklenen her mimari için VC kitaplıkları dizinine eklenir.

Örnek

Aşağıdaki örnek, yürütme sırasında farklı noktalarda iki .pgc dosya oluşturmak için kullanırPgoAutoSweep. birincisi 3'e eşit olana kadar count çalışma zamanı davranışını açıklayan verileri, ikincisi ise uygulama sonlandırmadan hemen öncesine kadar bu noktadan sonra toplanan verileri içerir.

// pgoautosweep.cpp
// Compile by using: cl /c /GL /W4 /EHsc /O2 pgoautosweep.cpp
// Link to instrument: link /LTCG /genprofile pgobootrun.lib pgoautosweep.obj
// Run to generate data: pgoautosweep
// Merge data by using command line pgomgr tool:
// pgomgr /merge pgoautosweep-func1!1.pgc pgoautosweep-func2!1.pgc pgoautosweep.pgd
// Link to optimize: link /LTCG /useprofile pgobootrun.lib pgoautosweep.obj

#include <iostream>
#include <windows.h>
#include <pgobootrun.h>

void func2(int count)
{
    std::cout << "hello from func2 " << count << std::endl;
    Sleep(2000);
}

void func1(int count)
{
    std::cout << "hello from func1 " << count << std::endl;
    Sleep(2000);
}

int main()
{
    int count = 10;
    while (count--)
    {
        if (count < 3)
            func2(count);
        else
        {
            func1(count);
            if (count == 3)
            {
                PgoAutoSweep("func1");
            }
        }
    }
    PgoAutoSweep("func2");
}

Geliştirici komut isteminde, şu komutu kullanarak kodu bir nesne dosyasına derleyin:

cl /c /GL /W4 /EHsc /O2 pgoautosweep.cpp

Ardından şu komutu kullanarak eğitim için bir izlemeli derleme oluşturun:

link /LTCG /genprofile pgobootrun.lib pgoautosweep.obj

Eğitim verilerini yakalamak için izlemeli yürütülebilir dosyayı çalıştırın. çağrısı PgoAutoSweep tarafından veri çıkışı pgoautosweep-func1!1.pgc ve pgoautosweep-func2!1.pgc adlı dosyalara kaydedilir. Programın çıktısı şu şekilde görünmelidir:

hello from func1 9
hello from func1 8
hello from func1 7
hello from func1 6
hello from func1 5
hello from func1 4
hello from func1 3
hello from func2 2
hello from func2 1
hello from func2 0

pgomgr komutunu çalıştırarak kaydedilen verileri bir profil eğitim veritabanıyla birleştirin:

pgoautosweep-func1!1.pgc pgoautosweep-func2!1.pgc

Bu komutun çıktısı şuna benzer:

Microsoft (R) Profile Guided Optimization Manager 14.13.26128.0
Copyright (C) Microsoft Corporation. All rights reserved.

Merging pgoautosweep-func1!1.pgc
pgoautosweep-func1!1.pgc: Used  3.8% (22304 / 589824) of total space reserved.  0.0% of the counts were dropped due to overflow.
Merging pgoautosweep-func2!1.pgc
pgoautosweep-func2!1.pgc: Used  3.8% (22424 / 589824) of total space reserved.  0.0% of the counts were dropped due to overflow.

Artık iyileştirilmiş bir derleme oluşturmak için bu eğitim verilerini kullanabilirsiniz. İyileştirilmiş yürütülebilir dosyayı oluşturmak için şu komutu kullanın:

link /LTCG /useprofile pgobootrun.lib pgoautosweep.obj

Microsoft (R) Incremental Linker Version 14.13.26128.0
Copyright (C) Microsoft Corporation.  All rights reserved.

Merging pgoautosweep!1.pgc
pgoautosweep!1.pgc: Used  3.9% (22904 / 589824) of total space reserved.  0.0% of the counts were dropped due to overflow.
  Reading PGD file 1: pgoautosweep.pgd
Generating code

0 of 0 ( 0.0%) original invalid call sites were matched.
0 new call sites were added.
294 of 294 (100.00%) profiled functions will be compiled for speed
348 of 1239 inline instances were from dead/cold paths
294 of 294 functions (100.0%) were optimized using profile data
16870 of 16870 instructions (100.0%) were optimized using profile data
Finished generating code

Ayrıca bkz.

Profil Temelli İyileştirmeler
pgosweep