Procedura dettagliata: utilizzo dell'ottimizzazione guidata da profilo (PGO)
Aggiornamento: novembre 2007
In questa procedura dettagliata viene illustrato come utilizzare le ottimizzazioni guidate da profilo (PGO, profile-guided optimization) per scenari che spaziano dalle semplici implementazioni utilizzando i menu di generazione PGO disponibili nell'ambiente di sviluppo integrato (IDE, Integrated development Environment) di Visual Studio a scenari più avanzati che richiedono configurazioni personalizzate. In questa procedura dettagliata vengono inoltre illustrate le tecniche che consentono di utilizzare gli strumenti della riga di comando PGO per personalizzare il processo di raccolta e di unione dei dati di profilo. Per informazioni generali, vedere Ottimizzazioni guidate da profilo (PGO).
Generazione di un'applicazione utilizzando tramite PGO
Nell'esempio di scenario riportato di seguito viene illustrato come creare una semplice applicazione tramite PGO.
Generazione tramite PGO nell'IDE
L'ottimizzazione PGO può essere applicata a qualsiasi progetto di Visual C++ nativo. Nelle seguenti procedure viene illustrato l'utilizzo dell'ottimizzazione PGO con un'applicazione Win32.
Per creare un progetto Win32
Scegliere Nuovo dal menu File, quindi Progetto. Verrà visualizzata la finestra di dialogo Nuovo progetto.
Nel riquadro Tipi progetto selezionare il nodo Visual C++, quindi nel riquadro Modelli selezionare Progetto Win32.
Nella casella Nome immettere PGODemo.
Scegliere OK. Verrà visualizzata la Creazione guidata applicazione Win32.
Mantenere tutte le impostazioni predefinite. Fare clic su Fine.
Per generare un progetto PGODemo tramite PGO
Nella barra degli strumenti Standard fare clic sulla casella combinata Configurazioni soluzione, quindi selezionare la configurazione Release.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo del progetto PGODemo. Nel menu di scelta rapida del progetto scegliere Ottimizzazione PGO, quindi Strumento.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo del progetto PGODemo. Nel menu di scelta rapida del progetto, scegliere Ottimizzazione PGO, quindi Esegui applicazione instrumentata/ottimizzata per avviare l'applicazione.
Nota: È possibile avviare l'applicazione instrumentata anche scegliendo Avvia oppure Avvia senza eseguire debug dal menu Debug.
Ripetere il passaggio 3 per sperimentare l'applicazione instrumentata utilizzando scenari diversi. Alla chiusura di un'applicazione instrumentata, nella directory di output del progetto viene creato un file PGC che contiene i dati di profilo relativi all'avvenuta esecuzione.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo del progetto PGODemo. Nel menu di scelta rapida del progetto scegliere Ottimizzazione PGO, quindi Ottimizza.
Generazione tramite PGO dalla riga di comando
Si supponga di voler creare un'applicazione myapp.exe dai file di origine S1,…,Sn, utilizzando l'ottimizzazione PGO. Il primo passaggio consiste nell'assicurarsi di compilare i file di origine S1,…,Sn utilizzando l'opzione /GL del compilatore.
È inoltre necessario specificare le opzioni di ottimizzazione desiderate. Si supponga di scegliere l'opzione /O2. Si noti che la compilazione di un'applicazione con l'ottimizzazione PGO senza opzioni di ottimizzazione, ad esempio utilizzando /Od, determinerà la visualizzazione di un avviso, nonché il passaggio automatico alla compilazione per LTCG. Dalla riga di comando il primo passaggio potrebbe essere il seguente:
Per compilare i file di origine con l'opzione /GL
cl.exe /c /GL /O2 S1.cpp … Sn.cpp
link /ltcg:pgi S1.obj … Sn.obj /out:myapp.exe
Nel passaggio 2 viene creata un'immagine instrumentata PGO di myapp.exe, nonché un file myapp.pgd che corrisponde al file di database di profilo che verrà utilizzato dal compilatore per creare la versione finale ottimizzata di myapp.exe. Il nome predefinito del file .pgd è il nome dell'applicazione, mentre il percorso predefinito è il percorso di output.
L'opzione /pgd del linker nel passaggio precedente consente di modificare il nome predefinito del file PGD generato per l'applicazione. È possibile utilizzare l'opzione /pgd nel seguente modo:
Per creare un'immagine instrumentata utilizzando /LTCG:PGI e /PGD
- link /ltcg:pgi /pgd:mypgd.pgd S1.obj … Sn.obj /out:myapp.exe
A questo punto è possibile sperimentare l'applicazione myapp.exe instrumentata utilizzando gli scenari di profiling. Per ogni scenario eseguito verrà creato un file PGC.
Nota: |
---|
Se si esegue più di un'immagine di myapp.exe contemporaneamente dallo stesso percorso, verrà creato un solo file PGC, il quale verrà scritto sul disco solo dopo la chiusura di tutte le istanze. |
Nota: |
---|
Il percorso predefinito per i file PGC è il percorso dell'eseguibile. Questo percorso può essere modificato impostando la variabile di ambiente VCPROFILE_PATH prima di eseguire gli scenari di profiling. Ad esempio, impostare VCPROFILE_PATH=<percorso>, quindi eseguire l'immagine instrumentata di myapp.exe |
A questo punto è possibile generare l'applicazione myapp.exe con ottimizzazione PGO.
Per creare un'immagine ottimizzata utilizzando /LTCG:PGO e /PGD
- link /ltcg:pgo /pgd:mypgd.pgd S1.obj … Sn.obj /out:myapp.exe
Nota: |
---|
Prima di eseguire il passaggio 1, è necessario raccogliere tutti i file PGC creati durante lo scenario di prova nella stessa cartella del file di database di profilo (PGD). |
Unione personalizzata dei dati di profilo
Si supponga di avere due principali scenari di cliente per un'applicazione. Il primo scenario è molto più importante del secondo in quanto utilizzato frequentemente dai clienti.
Nella procedura che segue verrà illustrato come utilizzare l'ambiente di sviluppo di Visual Studio e gli strumenti della riga di comando per dare maggiore peso ad alcuni dati di profilo durante il processo di unione nel file PGD.
Unione dei dati di profilo nell'IDE
Per creare un progetto Win32
Scegliere Nuovo dal menu File, quindi Progetto. Verrà visualizzata la finestra di dialogo Nuovo progetto.
Nel riquadro Tipi progetto selezionare il nodo Visual C++, quindi nel riquadro Modelli selezionare Progetto Win32.
Nella casella Nome immettere PGODemo.
Scegliere OK. Verrà visualizzata la Creazione guidata applicazione Win32.
Mantenere tutte le impostazioni predefinite. Fare clic su Fine.
Per generare un progetto PGODemo con dati di profilo uniti nell'IDE
Nella barra degli strumenti standard fare clic sulla casella combinata Configurazioni soluzione, quindi selezionare la configurazione Release.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto PGODemo. Scegliere Ottimizzazione PGO dal menu di scelta rapida, quindi Strumento.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto PGODemo. Scegliere Ottimizzazione PGO dal menu di scelta rapida, quindi Esegui applicazione instrumentata. L'applicazione verrà avviata. Si noti che è possibile avviare l'applicazione instrumentata anche scegliendo Avvia o Avvia senza eseguire debug dal menu Debug.
Ripetere il passaggio 3 due volte, una volta per ciascuno scenario di cliente. Nella directory di output verranno creati due file PGC, ovvero PGODemo!1.pgc e PGODemo!2.pgc.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto PGODemo. Fare clic su Proprietà per visualizzare la pagina delle proprietà di PGODemo.
In Proprietà di configurazione fare clic su Eventi di generazione, quindi su Evento di pre-collegamento. Nella casella Riga di comando digitare il seguente comando:
"$(VCInstallDir)bin\pgomgr.exe" -merge:2 $(OutDir)\$(ProjectName)!1.pgc $(OutDir)\$(ProjectName).pgd
Nota: In questo passaggio verrà utilizzato il file pgomgr.exe per unire il file PGODemo!1.pgc in un passaggio distinto prima di avviare il linker per la generazione dell'applicazione ottimizzata finale. Il linker chiamerà di nuovo pgomgr.exe durante il passaggio successivo per unire il file PGODemo!2.pgc ma con il peso predefinito di 1.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto PGODemo. Scegliere Ottimizzazione PGO dal menu di scelta rapida, quindi Ottimizza.
Unione dei dati di profilo dalla riga di comando
Di seguito viene illustrato l'utilizzo degli strumenti della riga di comando per eseguire l'unione personalizzata dei dati di profilo.
Per generare dati di profilo uniti dalla riga di comando
cl.exe /c /GL /O2 S1.cpp … Sn.cpp
link /ltcg:pgi S1.obj … Sn.obj /out:myapp.exe
I due passaggi precedenti consentiranno di creare l'applicazione myapp.exe instrumentata.
La sperimentazione dell'applicazione myapp.exe instrumentata utilizzando due differenti scenari determinerà la creazione di due diversi file .PGC: myapp!1.pgc e myapp!2.pgc.
Per dare maggior peso al primo scenario, utilizzare pgomgr.exe nel modo seguente:
Pgomgr –merge:2 myapp!1.pgc myapp.pgd
Eseguire il comando link per creare l'applicazione ottimizzata finale nel seguente modo:
link /ltcg:pgo /pgd:myapp.pgd /out:myapp.exe
myapp!2.pgc verrà unito con il peso predefinito di 1.
Aggiornamento PGO
Nei due scenari precedenti è stata utilizzata l'opzione /ltcg:pgo del linker per creare l'applicazione ottimizzata finale dopo aver compilato e sperimentato la versione instrumentata. Durante l'utilizzo dell'opzione /ltcg:pgo, il linker esegue alcuni controlli per assicurarsi che non siano state apportate modifiche ai file di input (file oggetto, librerie e così via) utilizzati per compilare l'applicazione instrumentata. In altre parole, per utilizzare l'opzione /ltcg:pgo, tutti i file di input passati al linker devono essere uguali a quelli passati nel passaggio dell'opzione /ltcg:pgi.
Modifiche accidentali apportate ai file di origine dopo la generazione dell'applicazione instrumentata e del file PGD possono influire notevolmente sulla generazione del codice PGO e sulle decisioni di ottimizzazione.
Si supponga che, dopo aver generato l'applicazione instrumentata, aver creato i dati di profilo e aver generato l'applicazione ottimizzata PGO, si sia scoperto di aver dimenticato di aggiornare il numero di versione dell'applicazione oppure si sia rilevato un errore futile che richiede una correzione di modesta entità che non influisce in modo drastico sul flusso nell'applicazione. Per questo scenario è possibile utilizzare l'opzione /ltcg:pgu, che consente di disattivare l'esecuzione dei controlli normalmente previsti con l'opzione /ltcg:pgo. In questo modo è possibile modificare, ricompilare o perfino aggiungere nuovi file all'applicazione tra la generazione PGI e la generazione PGU.
Nella procedura riportata di seguito verrà illustrato l'utilizzo dell'ambiente di sviluppo di Visual Studio e degli strumenti della riga di comando con l'opzione /ltcg:pgu.
Aggiornamento nell'IDE
Per generare PGODemo con l'opzione /LTCG:PGU nell'IDE
Nella barra degli strumenti standard fare clic sulla casella combinata Configurazioni soluzione, quindi selezionare la configurazione Release.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto PGODemo. Scegliere Ottimizzazione PGO dal menu di scelta rapida, quindi fare clic su Strumento.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto PGODemo. Scegliere Ottimizzazione PGO dal menu di scelta rapida, quindi fare clic su Esegui applicazione instrumentata/ottimizzata. L'applicazione verrà avviata. Si noti che è possibile avviare l'applicazione instrumentata anche scegliendo l'opzione Avvia debug o Avvia senza eseguire debug dal menu Debug.
In questo passaggio è possibile apportare qualsiasi modifica a qualsiasi file di origine. Come detto in precedenza, le modifiche che influiscono in modo drastico sul comportamento dell'applicazione possono causare gravi problemi di prestazioni. In generale, le modifiche da apportare sono di modesta entità, ad esempio, correzioni di piccoli errori o modifiche ai file di risorsa.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto PGODemo. Scegliere Ottimizzazione PGO dal menu di scelta rapida, quindi fare clic su Aggiorna. Verranno ricompilati solo i file modificati, quindi verrà avviato il linker con l'opzione /ltcg:pgu, che accetta i file modificati, anziché l'opzione /ltcg:pgo.
Nota: Verranno visualizzati degli avvisi per ciascuna funzione che non dispone dei dati di profilo e per ciascuna funzione modificata che invalida i dati di profilo raccolti durante il passaggio di prova. Nella barra degli strumenti Standard fare clic sulla casella combinata Configurazioni soluzione, quindi selezionare la configurazione Release.
Nota: Se, al passaggio 5, si fa clic con il pulsante destro del mouse sul file di risorsa modificato in Esplora soluzioni e si sceglie Compila, verranno eliminati tutti file correlati all'ottimizzazione PGO presenti nella cartella di output, in quanto il sistema del progetto esegue una generazione pulita quando si passa da una generazione PGO a una normale.
Aggiornamento dalla riga di comando
Di seguito viene illustrato l'utilizzo degli strumenti della riga di comando per eseguire l'aggiornamento PGO.
Per generare utilizzando l'opzione /LTCG:PGU della riga di comando
cl.exe /c /GL /O2 S1.cpp … Sn.cpp
link /ltcg:pgi S1.obj … Sn.obj /out:myapp.exe
I due passaggi precedenti consentiranno di creare l'applicazione myapp.exe instrumentata.
Sperimentare l'applicazione myapp.exe instrumentata.
link /ltcg:pgo /pgd:myapp.pgd /out:myapp.exe
Nel passaggio 4 verrà creata l'applicazione myapp.exe ottimizzata. Si supponga di aver trovato un piccolo errore nel file Sm.cpp. È possibile correggere l'errore e compilare solo il file Sm.cpp nel seguente modo:
cl /c /GL /O2 Sm.cpp
Utilizzare quindi l'opzione /ltcg:pgu per compilare l'applicazione ottimizzata utilizzando i vecchi dati di profilo creati al passaggio 3.
link /ltcg:pgu /pgd:myapp.pgd /out:myapp.exe
Configurazioni PGO personalizzate
In questo scenario verrà descritto come creare configurazioni PGO personalizzate per generare soluzioni con più progetti. Una DLL verrà aggiunta alla soluzione e collegata all'applicazione PGODemo. Verranno create due configurazioni, PGIRelease e PGORelease, che verranno utilizzate per generare l'intera soluzione anziché utilizzare le opzioni di menu dell'ottimizzazione PGO per generare un prodotto alla volta.
Per creare configurazioni PGO personalizzate
Scegliere Nuovo dal menu File, quindi Progetto. Verrà visualizzata la finestra di dialogo Nuovo progetto.
Nel riquadro Tipi progetto selezionare il nodo Visual C++, quindi nel riquadro Modelli selezionare Progetto Win32.
Nella casella Nome immettere PGODemo.
Scegliere OK. Verrà visualizzata la Creazione guidata applicazione Win32.
Mantenere tutte le impostazioni predefinite. Fare clic su Fine.
A questo punto si dispone di una soluzione e di un progetto denominati PGODemo. Il passaggio successivo consiste nel creare un progetto DLL.
In Esplora soluzioni fare clic con il pulsante destro del mouse sulla soluzione, quindi scegliere Aggiungi. Scegliere quindi Nuovo progetto. Verrà visualizzata la finestra di dialogo Nuovo progetto.
Nel riquadro Tipi progetto selezionare il nodo Visual C++, quindi nel riquadro Modelli selezionare Progetto Win32.
Nella casella Nome immettere PGODemoDLL.
Scegliere OK. Verrà visualizzata la Creazione guidata applicazione Win32.
Nella pagina Impostazioni applicazione, selezionare il tipo di applicazione DLL e fare clic su Fine.
A questo punto si dispone di un progetto DLL denominato PGODemoDLL.
In Esplora soluzioni fare doppio clic sul progetto PGODemoDLL, quindi su PGODemoDLL.cpp e aggiungere il seguente codice:
__declspec(dllexport) void HelloMessage(void) { MessageBox(NULL, L"hello", L"PGODemoDLL", MB_OK); }
In Esplora soluzioni fare doppio clic sul progetto PGODemo, quindi su PGODemo.cpp e aggiungere la seguente dichiarazione prima della definizione della funzione _tWinMain:
__declspec(dllimport) void HelloMessage(void);
In _tWinMain aggiungere il seguente codice prima del ciclo di messaggi principale:
HelloMessage();
In Esplora soluzioni fare clic con il pulsante destro del mouse sulla soluzione PDODemo e scegliere Dipendenze progetto. Verrà visualizzata la finestra di dialogo Dipendenze progetto.
Nella pagina Dipendenze selezionare PGODemo nella casella combinata Progetti. Selezionare PGODemoDLL nell'elenco Dipendente da.
Verranno quindi create le configurazioni PGIRelease e PGORelease.
In Esplora soluzioni fare clic con il pulsante destro del mouse sulla soluzione, quindi scegliere Gestione configurazione. Selezionare il progetto PGODemo nella casella combinata Configurazione, quindi scegliere <Nuovo …>. Verrà visualizzata la finestra di dialogo Nuova configurazione progetto.
Nella casella di modifica Nome configurazione progetto digitare PGIRelease e selezionare Release nella casella combinata Copia impostazioni da. Assicurarsi che la casella di controllo Crea nuove configurazioni soluzione sia selezionata.
Ripetere lo stesso passaggio per il progetto PGODemoDLL e per aggiungere la configurazione PGIRelease al progetto. Questa volta, assicurarsi che la casella di controllo Crea nuove configurazioni soluzione sia deselezionata.
Ripetere il passaggio 16 per entrambi i progetti per creare la configurazione PGORelease. Assicurarsi che vengano anche copiate le impostazioni dalla configurazione Release. Chiudere la finestra di dialogo Gestione configurazione.
A questo punto sono state create due configurazioni, PGIRelease e PGORelease.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto PGODemo e scegliere Proprietà. Nella casella combinata Configurazione selezionare la configurazione PGIRelease. Nella pagina Proprietà di configurazione, fare clic su Generale. Fare clic sulla casella combinata Ottimizzazione intero programma e selezionare l'opzione Ottimizzazione PGO – Strumento. Fare clic su Applica per salvare le modifiche apportate.
Nella casella combinata Configurazione selezionare la configurazione PGORelease. Nella pagina Proprietà di configurazione, fare clic su Generale. Fare clic sulla casella combinata Ottimizzazione intero programma e selezionare l'opzione Ottimizzazione PGO – Ottimizza. Fare clic su Applica per salvare le modifiche apportate.
Ripetere i passaggi 18 e 19 per le configurazioni PGIRelease e PGORelease per il progetto PGODemoDLL.
Verrà ora modificata la Directory intermedia per la configurazione PGORelease affinché coincida con la directory di Output per la configurazione PGIRelease per entrambi i progetti.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto PGODemo e scegliere Proprietà. Nella casella combinata Configurazione selezionare la configurazione PGORelease. Nella pagina delle proprietà di Configurazione fare clic su Generale. Nella Directory intermedia digitare $(SolutionDir)PGIRelease. Fare clic su Applica e chiudere la finestra di dialogo.
Ripetere il passaggio 21 per il progetto PGODemoDLL.
Verrà quindi aggiunto il percorso di PGODemoDLL alla variabile di ambiente path dell'applicazione PGODemo.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto PGODemo e scegliere Proprietà. Nella casella combinata Configurazione selezionare la configurazione PGIRelease. Nella pagina Proprietà di configurazione, fare clic su Debug. In Ambiente digitare la stringa riportata di seguito, quindi fare clic su Applica:
path=%path%;$(SolutionDir)PGODemoDLL\PGIRelease
Nella casella combinata Configurazione selezionare la configurazione PGORelease. Nella pagina delle proprietà di Configurazione fare clic su Debug. Nella casella Ambiente digitare quanto segue:
path=%path%;$(SolutionDir)PGODemoDLL\PGORelease
Fare clic su Applica, quindi scegliere OK per chiudere la finestra di dialogo.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto PGODemo e scegliere Proprietà. Nella casella combinata Configurazione selezionare la configurazione PGORelease. Nella pagina Proprietà di configurazione, fare clic su Linker, quindi su Ottimizzazione. Nella casella di modifica Database PGO sostituire $(TargetDir) con $(IntDir)\.
Ripetere il passaggio per il progetto PGODemoDLL.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto PGODemoDLL e scegliere Proprietà. Nella casella combinata Configurazione selezionare la configurazione PGORelease. Nella pagina Proprietà di configurazione, fare clic su Linker, quindi su Avanzate. Nella casella di modifica Libreria di importazione sostituire $(TargetDir) con $(IntDir)\.
Nella barra degli strumenti Standard fare clic sulla casella combinata Configurazioni soluzione e selezionare la configurazione PGIRelease. In Esplora soluzioni fare clic con il pulsante destro del mouse sulla soluzione e scegliere Genera soluzione.
Verranno generati i bit instrumentati per entrambi i progetti.
Scegliere Avvia debug o Avvia senza eseguire debug dal menu Debug. Verrà avviata l'applicazione PGODemo. Alla chiusura dell'applicazione, verranno creati due file PGC, uno per ciascuna delle due cartelle di output PGODemo\PGIRelease e PGODemoDLL\PGIRelease.
Nella barra degli strumenti standard, fare clic sulla casella combinata Configurazioni soluzione e selezionare la configurazione PGORelease. In Esplora soluzioni fare clic con il pulsante destro del mouse sulla soluzione e scegliere Compila soluzione.
A questo punto si dispone delle immagini ottimizzate PGO nelle cartelle della configurazione PGORelease per entrambi i progetti.
Raccolta personalizzata dei dati di profilo
Il comportamento predefinito per la raccolta personalizzata dei dati di profilo prevede il salvataggio di tutti i dati che descrivono il comportamento dell'applicazione instrumentata dall'avvio fino alla chiusura. Con l'ottimizzazione PGO viene fornito uno strumento denominato PGOSWEEP che consente di personalizzare la raccolta dei dati di profilo. È possibile utilizzare PGOSWEEP per raccogliere dati di profilo per uno specifico intervallo di tempo durante l'esecuzione dello scenario del profilo.
Nella procedura riportata di seguito verrà illustrato l'utilizzo dell'ambiente di sviluppo di Visual Studio e degli strumenti della riga di comando per controllare la raccolta dei dati di profilo.
Per creare un progetto Win32
Scegliere Nuovo dal menu File, quindi Progetto. Verrà visualizzata la finestra di dialogo Nuovo progetto.
Nel riquadro Tipi progetto selezionare il nodo Progetti di Visual C++, quindi nel riquadro Modelli selezionare Progetto Win32.
Nella casella Nome immettere PGODemo.
Scegliere OK. Verrà visualizzata la Creazione guidata applicazione Win32.
Mantenere tutte le impostazioni predefinite. Fare clic su Fine.
Per generare il progetto PGODemo instrumentato nell'IDE
Nella barra degli strumenti Standard fare clic sulla casella combinata Configurazioni soluzione, quindi selezionare la configurazione Release.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto PGODemo. Scegliere Ottimizzazione PGO dal menu di scelta rapida, quindi Strumento.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto PGODemo. Scegliere Ottimizzazione PGO dal menu di scelta rapida, quindi fare clic su Esegui applicazione instrumentata/ottimizzata. L'applicazione verrà avviata. Si noti che è possibile avviare l'applicazione instrumentata anche scegliendo l'opzione Avvia debug o Avvia senza eseguire debug dal menu Debug.
Scegliere Strumenti esterni dal menu Strumenti. Verrà visualizzata la finestra di dialogo Strumenti esterni. Fare clic su Aggiungi. Nella casella di modifica Titolo digitare Pgosweep. Fare clic sul pulsante Sfoglia accanto alla casella di modifica Comando e individuare il percorso dello strumento PGOSWEEP. PGOSWEEP dovrebbe essere installato nella cartella …\VC\bin nella quale è installato Visual Studio. Selezionare la casella di controllo Richiedi argomenti e scegliere OK per chiudere la finestra di dialogo Strumenti esterni.
Scegliere Pgosweep dal menu Strumenti. Verrà visualizzata una finestra di dialogo. Nella casella di modifica Argomenti digitare quanto segue:
$(TargetPath) $(TargetDir)$(TargetName)_custom!1.pgc
Scegliere OK.
Nella finestra principale di PGODemo scegliere Esci dal menu File per terminare l'esecuzione della raccolta dei dati di profilo.
A questo punto, in $(OutDir) saranno presenti due file PGC. PGODemo_custom!1.pgc è il file creato da PGOSWEEP e contiene i dati di profilo dall'inizio dell'esecuzione del profilo fino al momento in cui è stato chiamato PGOSWEEP. Il secondo file è caratterizzato dallo schema di denominazione predefinito PGODemo!1.pgc e contiene i dati di profilo dal momento subito dopo lo sweeping fino alla chiusura dell'applicazione instrumentata.
È molto importante notare che solo i file PGC conformi alla denominazione standard $(NomeProgetto)!n.PGC, dove n è un numero, saranno uniti automaticamente quando si genera l'immagine ottimizzata. Per unire PGODemo_custom!1.pgc, creato al passaggio precedente, sarà necessario aggiungere un passaggio di unione personalizzata. Vedere la sezione Unione personalizzata dei dati di profilo.
Questa procedura consente di controllare la raccolta dei dati di profilo e di ottimizzare l'applicazione in base alle parti più importanti dell'applicazione in fase di esecuzione.
Raccolta dei dati di profilo dalla riga di comando
Di seguito viene illustrato l'utilizzo degli strumenti della riga di comando per eseguire la raccolta personalizzata dei dati di profilo.
Per generare dati di profilo uniti dalla riga di comando
Creare l'eseguibile instrumentato:
cl.exe /c /GL /O2 S1.cpp Sn.cpp link /ltcg:pgi S1.obj Sn.obj /out:myapp.exe
Eseguire l'applicazione myapp.exe instrumentata e, ad un certo punto dell'esecuzione, utilizzare lo strumento pgosweep per raccogliere i dati di profilo:
Pgosweep myapp.exe mycustomdata.pgc
Nota I file PGC non conformi al formato standard dovranno essere uniti manualmente utilizzando lo strumento Pgomgr.
Dopo la chiusura di myapp.exe, verrà creato automaticamente un altro file .PGC (myapp!1.pgc). Assicurarsi di eliminare questo file o di spostarlo in una directory diversa dalla directory di lavoro del linker prima di eseguire quest'ultimo per generare l'applicazione myapp.exe ottimizzata, se non si desidera che venga utilizzato come parte dei dati di profilo.
Unire mycustomdata.pgc utilizzando lo strumento Pgomgr:
Pgomgr –merge mycustomdata.pgc myapp.pgd
Eseguire il comando link per creare l'applicazione ottimizzata finale:
link /ltcg:pgo /pgd:myapp
Raccolta personalizzata dei dati di profilo con PgoAutoSweep
È possibile chiamare PgoAutoSweep dall'applicazione per salvare e reimpostare i dati di profilo in qualsiasi momento in fase di esecuzione. Nell'esempio riportato di seguito viene illustrato il funzionamento.
Nell'esempio verranno creati due file PGC. Il primo contiene i dati che descrivono il comportamento in fase di esecuzione fino a quando il conteggio è pari a 3, mentre il secondo contiene i dati raccolti a partire da questo punto fino alla chiusura dell'applicazione.
#include <stdio.h>
#include <windows.h>
#include <pgobootrun.h>
int count = 10;
int g = 0;
void func2(void)
{
printf("hello from func2 %d\n", count);
Sleep(2000);
}
void func1(void)
{
printf("hello from func1 %d\n", count);
Sleep(2000);
}
void main(void)
{
while (count--)
{
if(g)
func2();
else
func1();
if (count == 3)
{
PgoAutoSweep("func1");
g = 1;
}
}
PgoAutoSweep("func2");
}