Quando un progetto rilascia le sue applicazioni per GPU solitamente non sono ottimizzate, non sfruttano cioè tutte le potenzialità della vostra scheda grafica, del vostro computer. In seguito gli sviluppatori raccolgono informazioni sui risultati e gli input degli specialisti e a volte degli utenti per migliorare le performance del client, ma all'inizio è abbastanza semplice personalizzare BOINC per ottenere maggiori velocità di calcolo in pochi passaggi. Vi spiegheremo come in questo articolo.
Tratteremo di un caso pratico, l'applicazione per GPU ATI/AMD del progetto POEM@home e aggioneremo le informazioni man mano che il client si evolverà.
La caratteristica più comune delle applicazioni per GPU appena nate è quella di non sfruttare tutta la potenza di calcolo a disposizione. La soluzione tipica è quella di istruire BOINC ad eseguire più WU contemporaneamente stando però attenti a mettere a disposizione dell'applicazione una sufficiente potenza CPU: questo si ottiene scrivendo delle apposite istruzioni su un file app_info.xml che BOINC leggerà all'avvio. Procediamo per ordine.
Requisiti Hardware e Software
Molti dei requisiti sono ovvi, vediamo comunque i più comuni.
- Una scheda video "compatibile" con BOINC. Si possono utilizzare le GPU nVidia o le ATI, a singola o doppia precisione, con supporto OpenCL o meno, ma non tutti i progetti supportano tutte queste varianti quindi è necessario informarsi su questo portale o sui siti web dei progetti stessi.
- Driver aggiornati per la scheda video (per alcuni progetti l'ultimo aggiornamento dei driver funziona peggio che i precedenti, ma è raro che ciò accada e va verificato caso per caso sul sito del progetto nell'eventualità di problemi di elaborazione).
- Versione BOINC aggiornata; a volte è necessario utilizzare versioni ancora in fase di sviluppo, non stabili.
Nel caso di POEM@home, per ora limitatamente alle schede ATI, è necessaria almeno una GPU HD4xxx (serie 4000), i driver scaricabili dal
sito AMD, la versione BOINC 7.0.3 (la 0.2 da dei problemi di validazione WU su alcuni progetti) scaricabile dal
sito ufficiale di BOINC. Ovviamente dovrete scegliere di scaricare le versioni compatibili con il vostro sistema (OS, GPU).
Elaborazione standard
Partiamo dal presupposto, è il caso più semplice in effetti, che vogliate elaborare su un unico progetto con applicazioni GPU, e che non vi interessi elaborare le sue eventuali applicazioni per CPU (la CPU la utilizzerete, ma solo come supporto alla GPU).
- Collegatevi al progetto tramite il BOINC manager o tramite un gestore progetti (ad esempio BAM)
- Andate alla pagina del vostro account sul progetto e impostate le vostre preferenze per ricevere solo lavoro corrispondente alla vostra GPU
- Dalla pagina del vostro account cliccate su PREFERENZE PER QUESTO PROGETTO --> MODIFICA LE PREFERENZE
- USA LA CPU -> NO
- USA LA GPU ATI -> SI o NO in base alla vostra GPU (su alcuni progetti questa voce è tradotta male ed in effetti è identica alla precedente: sappiate che se c'è una doppia richiesta per l'uso della CPU allora la seconda voce si riferisce alle GPU ATI)
- USA LA GPU NVIDIA -> SI o NO in base alla vostra GPU
- Configurate BOINC per elaborare con il 100% della CPU a disposizione ed anche con la GPU (alcuni di questi valori possono anche essere modificati in seguito ma queste sono le impostazioni consigliate per eseguire dei buoni test sull'applicazione)
- BOINC in visualizzazione avanzata --> menu STRUMENTI --> menu PREFERENZE DI ELABORAZIONE --> scheda USO DEL PROCESSORE
- Spuntate USA LA GPU ANCHE QUANDO IL COMPUTER E' IN USO
- Modificate il valore SUI SISTEMI MULTIPROCESSORE, USA AL MASSIMO IL 100% DEI PROCESSORI
- Modificate il valore USA AL MASSIMO IL 100% DELLA CPU
- Sospendete gli altri eventuali progetti che fanno uso della GPU; non che sia obbligatorio ma è preferibile per testare la nuova applicazione
- Dalla scheda PROGETTI aggiornate il vostro progetto fino a che non vi invia delle WU da elaborare
A questo punto tutto dovrebbe funzionare correttamente: BOINC dovrebbe elaborare una sola WU alla volta (o due se la vostra GPU è doppia, come ad esempio la 4870x2 o la 5970 della ATI, o se ne avete ovviamente due). Potete lasciare che la WU termini per valutarne i tempi di elaborazione e verificare che il vostro sistema sia stabile.
Raccogliere dati sulle prestazioni
Al fine di ottimizzare l'uso della vostra GPU su una particolare applicazione di un progetto è molto importante avere dei dati sulle sue prestazioni:
- Tempo di elaborazione (può essere ricavato dal BOINC Manager stesso, finchè la WU non viene inviata al server del progetto, oppure sulla pagina del vostro account personale su quel progetto)
- Percentuale di utilizzo della CPU: si può ricavare nel caso di OS Windows con il programma "Gestione attività di Windows" alla scheda "Prestazioni". Altri OS hanno certamente utility simili.
- Percentuale di utilizzo della GPU: solitamente il software che viene venduto con la scheda grafica vi può offrire queste informazioni. Ad esempio l'ATI CATALYST fornisce queste informazioni alla scheda ATI OVERDRIVE.
Ci sono comunque molti software in rete che analizzano approfonditamente le prestazioni di CPU e GPU: un esempio è il
PROCESS EXPLORER per OS Windows.
Ottimizzare l'elaborazione: aumentare le WU contemporaneamente in esecuzione
E' verosimile che otterrete dei valori di percentuale di utilizzo della GPU decisamente inferiori al 100%: se è così allora è probabile che aumentando il numero di WU contemporaneamente in elaborazione questa percentuale aumenti con il risultato che le WU ci metteranno di più a completarsi (ovvio, non hanno più l'esclusiva) ma il numero totale di WU/giorno, e quindi il RAC, aumenterà anche considerevolmente. Un esempio pratico:
- progetto: POEM@home
- scheda video: ATI HD4870x2 (quindi 2 WU in contemporanea)
- tempo di elaborazione medio: 5700s (mediamente 1 WU ogni 2850s)
- percentuale utilizzo GPU: 63% (per ognuna delle 2 GPU)
- percentuale utilizzo CPU: 25% (1 core di un Q6600, ognuna delle 2 WU si prende quindi 0,5 core della CPU)
Vediamo ora come migliorare le prestazioni del vostro PC. Se l'elaborazione con GPU sta funzionando correttamente potete lasciarla terminare o annullarla.
- Chiudete BOINC.
- Aprite la cartella del progetto; tenete presente che è una cartella nascosta e dovrete essere in grado di visualizzarla. Nel caso di POEM@home questa cartella è la seguente: C:\ProgramData\BOINC\projects\boinc.fzk.de_poem\.
- Create un nuovo file di testo (su OS Windows il "Blocco note" è più che sufficiente) e salvatelo dandogli il nome di app_info.xml. Se utilizzate OS Windows state attenti all'estensione del file: per essere certi di ottenere un .XML invece che un .TXT disabilitate dal pannello di controllo la funzione che nasconde le estensioni per i file di tipo conosciuto.
- Aprite nuovamente il file inseriteci i parametri della vostra applicazione secondo quando indicato nella wiki di BOINC. Nel caso specifico di POEM@home e di GPU ATI, limitatamente alla prima versione dell'applicazione, copiateci dentro il seguente testo (ndr: non sono riuscito ad inserire questo codice nell'articolo per cui allego un file app_info.txt che potete scaricare e poi rinominare cambiando l'estensione da .txt in .xml, oppure copiatene il testo. Complicato ma funziona).
- Questa versione del file è ancora abbastanza standard infatti verrà elaborata una WU per ogni GPU presente e ad ogni WU verrà riservato il 50% di core della CPU. Applicate ora le vostre modifiche seguendo queste indicazioni:
- count = 1: questo parametro indica il numero di WU elaborate contemporaneamente per ogni GPU presente. Se la GPU è unica e il valore è 1 allora verrà elaborata una sola WU. Se la GPU è unica e il valore è 0.50 allora verranno elaborate contemporaneamente 2 WU (per 0.33 saranno 3, per 0.25 saranno 4 e così via). Se la GPU è doppia e il valore è 1 allora verranno elaborate 2 WU, se è 0.50 saranno 4 e così via. Va da se che per aumentare il numero di WU contemporaneamente in esecuzione è necessario diminuire il valore del parametro count.
- avg_ncpus = 0.50; max_ncpus = 0.50 (per semplicità tenete uguali i due valori): questo parametro indica la percentuale di core CPU che verrà riservata per l'applicazione (non quella che verrà veramente utilizzata). Per sapere quanta CPU viene riservata per le applicazioni GPU bisogna moltiplicare il numero impostato per il numero di WU GPU contemporaneamente in esecuzione, poi dividere per il numero di core del proprio PC. Se il valore è 0.50, si eseguono 2 WU GPU e si dispone di un quadcore (4 core) allora (0.50x2)/4=0.25 cioè il 25% della propria CPU (cioè 1 core) verrà riservato al progetto GPU. ATTENZIONE: se il numero di core riservato al progetto risulterà inferiore a 1 allora BOINC non riserverà nessun core, di fatto annullando i vostri sforzi di ottimizzazione. Aumentando il numero di WU GPU in esecuzione è ragionevole aumentare anche i core riservati ad essa, ma questo NON significa aumentare il valore dei parametri ncpus in quanto BOINC fa da solo i calcoli necessari. Vedi approfondimento più in basso.
- Salvate il file e riavviate BOINC.
Torniamo all'esempio pratico precedente. Il target è quello di raddoppiare il numero di WU in elaborazione:
-
Modificato il parametro count = 0.5 (le WU dovrebbero quindi essere 4, ricordando che la GPU è doppia)
-
Lasciato invariati i parametri ncpus = 0.50. Visto che ogni WU sfruttava effettivamente il 50% di un core, ora con 4 WU mi aspetto di avere 2 core utilizzati. Un valore di ncpus=0.50 mi riserva appunto (0.50x4)=2 core che su un quadcore fanno il 50% della CPU
Con queste modifiche si ottengono i seguenti valori di elaborazione:
- progetto: POEM@home
- scheda video: ATI HD4870x2 (quindi 4 WU in contemporanea)
- tempo di elaborazione medio: 9000s (mediamente 1 WU ogni 2250s)
- percentuale utilizzo GPU: 85% (per ognuna delle 2 GPU)
- percentuale utilizzo CPU: 50% (2 core di un Q6600, ognuna delle 4 WU si prende quindi 0,5 core della CPU)
Il miglioramento è netto, 21% di resa in più a scapito di 1 core della CPU. E' ragionevole che diminuendo il valore del parametro count = 0.25 si otterranno 8 WU contemporaneamente in esecuzione e una maggiore saturazione della GPU a scapito questa volta dei restanti 2 core della CPU.
Ovviamente c'è un limite alla saturazione della GPU, al numero di core CPU a disposizione e probabilmente all'aumentare del numero di WU GPU in elaborazione gli aumenti prestazionali saranno sempre meno evidenti (invece la CPU è sempre più intasata).
Comportamento di BOINC in riferimento alla CPU
Il BOINC manager segue le indicazioni del file app_info.xml e riserva un certo numero di core alle applicazioni GPU, lasciando i restanti core liberi di essere utilizzati dalle altre applicazioni. Se in riferimento all'esempio precedente io dovessi abilitare l'elaborazione di altri progetti CPU vedrei che partono solamente 2 WU (quadcore Q6600 con 2 core riservati).
Lo stesso identico risultato si ottiene modificando l'impostazione di BOINC "SUI SISTEMI MULTIPROCESSORE, USA AL MASSIMO IL 100% DEI PROCESSORI" e portandola al 50% solo che agendo in questo modo BOINC riserva i core sempre, non solo quando si stanno elaborando WU per la GPU.
Come si può ottimizzare l'uso della CPU:
- Se si nota che l'elaborazione delle WU GPU è troppo lenta quando altre applicazioni solo CPU girano in contemporanea (questo confronto può essere fatto ad esempio dai dati degli altri utenti sul sito del progetto) allora probabilmente vanno riservati più core alla GPU: si risolve aumentando il valore dei parametri ncpus.
- Se si nota che l'uso della CPU è inferiore a quanto previsto allora si può provare a diminuire il numero di core riservati alla GPU diminuendo il valore dei parametri ncpus.
In entambi i casi va ricordato che BOINC arrotonda il numero di core da riservare all'intero più piccolo. Se ad esempio ho ncpus=0.50 e 2 WU GPU in elaborazione avrò 0.50x2=1 core riservato. Un valore ncpus=0.60 in questo caso sarebbe inutile in quanto BOINC arrotonderebbe 0.60x2=1.2 a 1 e riserverebbe sempre 1 solo core. Al contrario un valore ncpus=0.40 vanificherebbe ogni sforzo di ottimizzazione perché BOINC arrotonderebbe 0.40x2=0.8 a 0 e non riserverebbe nessun core all GPU quindi molto probabilmente le WU procederebbero molto lentamente perché la CPU è impegnata da altri progetti quando la GPU lo richiede.
Indicazioni pratiche specifiche per il progetto POEM@home
Cosa bisogna in pratica fare con questo progetto? Vediamo i passi da effettuare:
- Verificate i requisiti hardware e software indicati in precedenza (specificatamente aggiornate i driver video e la versione di BOINC)
- Mettetevi in condizioni di elaborare in modo standard (passi descritti in precedenza)
- Create (o scaricate) il file app_info.xml, copiatelo nella cartella indicata ed iniziate ad elaborare solo POEM@home per GPU, senza altre WU in esecuzione
- Verificate l'effettivo utilizzo della CPU (dovrebbe essere di circa un 50% di core per ogni WU GPU), la percentuale di utilizzo della GPU e il tempo di elaborazione
- Chiudete BOINC, provate a raddoppiare il numero di WU in esecuzione contemporanea modificando il parametro count=0.50, riavviate BOINC
- Procedete così verificando le prestazioni e aumentando il numero di WU in esecuzione contemporanea fino a valori soddisfacenti (che possono essere diversi a seconda dell'utente: occupazione della GPU, temperatura GPU, core CPU liberi, RAC, etc...)