View Single Post
Old 15-08-2007, 08:24   #1
blade9722
Senior Member
 
L'Avatar di blade9722
 
Iscritto dal: Jun 2007
Messaggi: 9933
Guida avanzata alla configurazione SLI

Buongiorno a tutti,

come da promessa, la mia guida sulla configurazione della modalità SLI.

Un chiarimento: tutto ciò che descrivo di seguito è importante qualora si voglia configurare un profilo per quelle pochissime applicazioni, come il poco consciuto benchmark Unigine, non direttamente supportate dalla Nvidia. Per l'utente medio, l'unica azione richiesta è di aggiornare il driver Forceware con una certa frequenza

Nota riguardo le schede professionali Quadro: la guida si riferisce all'implementazione dell'SLI nelle schede per il gaming. L'SLI nelle schede professionali è qualcosa di completamente diverso, a cominciare dal fatto che funziona in finestra (quello per il gaming solo in fullscreen). Di fatto non ha nulla in comune, a parte il nome, con l'SLI per il gaming. Purtroppo, non possedendo due schede Quadro, non sono in grado di effettuare alcun test.


Innanzitutto colgo l'occasione per correggere una imprecisione ricorrente su questo forum, secondo cui le applicazioni debbo essere espressamente sviluppate per supportare tale modalità, in maniera del tutto analoga al multi-threading.

Informazione del tutto errata: l'SLI si abilita dal pannello di configurazione allo stesso modo con cui si attiva il filtro antialiasing o anisotropico e non necessita di nessuna programmazione specifica nell'applicazione

Propedeutica a questa guida è la conoscenza base della modalità SLI, cioè come impostare nuovi profili, come attivare gli indicatori visivi, scegliere fra le modalità di default. Suggerisco di leggere attentamente le FAQ del sito Nvidia sull'argomento:
http://www.slizone.com/page/slizone_faq.html per avere una infarinatura di base.

Importante: non leggere le FAQ sul sito Nvidia in italiano perchè non sono aggiornate. Per esempio, riportano ancora che è necessario avere due schede della stessa marca quando non è più così da un paio di annetti.Fare sempre riferimento al sito inglese

Windows XP - DX9

Innanzitutto bisogna individuare il file di configurazione dei profili Nvapps.xml in windows\system32. Nei vari profili la modalità SLI viene identificata da una linea del tipo:
Quote:
<PROPERTY Label="multichip_rendering_mode" Value="2430001" Itemtype="predefined"/>
L'impostazione della modalità dipende dall'ultima cifra della stringa esadecimale, e i valori con i driver più recenti sono:
0 - Auto: SLI mode is selected automatically. Only useful in global settings.
4 - Single: Use a single GPU only (i.e. don't use SLI to improve performance).
2 - SFR: Split Frame Rendering - each GPU is a part of the same image. More compatible than AFR but usually much less efficient.
1 - AFR: Alternate Frame Rendering - two GPUs are rendering a full frame alternately. This is the simplest and most effective way of using SLI.
3 - AFR-SFR: Alternate / Split Frame Rendering - only useful with 4 GPUs (Quad SLI). Combines AFR and SFR to use all 4 GPUs. The only way on non-Vista systems to use Quad SLI.
6 - 3-Way AFR: AFR on max. three GPUs on Vista systems. Uses 2 GPUs on XP systems.
5 - 4-Way AFR: AFR on max. four GPUs on Vista systems. Uses 2 GPUs on XP systems

La modalità "AFR2" selezionabile dal pannello di controllo Nvidia corrisponde alla stringa "2430001"
Attenzione, alcune modalità non vengono correttamente riportate dal pannelle di controllo Nvidia, che invece riporta "GPU singola", ma è solo un problema di visualizzazione nel pannello, il profilo funziona.

Penso che tutti sappiano la differenza fra alternate frame rendering e split frame rendering, ma che molti si siano chiesti quale sia la differenza fra le modalità alternate AFR e AFR2.

La Nvidia ha previsto una serie di flag di compatibilità per configurare correttamente l'alternate frame rendering con le varie applicazioni. Sotto la dicitura AFR2 si nasconde un AFR con alcuni flag settati, quelli corrispondenti alla stringa sopra citata.

Per comprendere il funzionamento di tali profili, prendiamo in esame il 3dmark2006. La linea di configurazione dell'SLI è la seguente:

Quote:
<PROPERTY Label="multichip_rendering_mode" Value="2400001" Itemtype="predefined"/>
e il valore 2400001 non appartiene a quelli di default. Ora, provate a lanciare la scena HDR1, quella del drago nel canyon, e memorizzate il risultato. Dopodichè provate a cambiare la modalità SLI in una di quelle di default. Noterete come in tutti e tre i casi (SFR,AFR,AFR2) le prestazioni siano un disastro. A questo punto vorrete tornare a quella preimpostata da Nvidia, e con enorme sorpresa scoprirete che non potete.
Questo perchè la dicitura è cambiata da "Consigliata da Nvidia" a "Consigliata da Nvidia - [ultima modalità scelta]": nel file Nvapps.xml l'impostazione della Nvidia è ormai stata cancellata. A partire dai driver 175.16 è stato aggiunto un tasto "ripristina" che permette di recuperare l'impostazione



Poco male, pensere, basta ripristinare il valore direttamente con un editor di testo. Anche in questo caso, però non funziona: la modifica viene ignorata. Questo perchè il driver non legge assolutamente il file nvapps.xml. I profili delle applicazioni che vengono letti dal driver sono memorizzati nel registry. Il file nvapps.xml viene letto dal pannello dei profili per modificare il registry. Per caricare il valore nel registry, la procedura è piuttosto laboriosa: bisogna inserire la linea avendo cura di terminare con Itemtype="predefined", dopodichè aprendo il pannello nel profilo ritornerà la scritta "consigliato da Nvidia" nel campo dell'SLI. A questo punto bisogna cliccare su "consigliato da Nvidia" in modo da far apparire "applica" e cliccare su quest'ultimo.
Purtroppo tale procedura non permette di caricare quei valori, tipo i flag di compatibilità OpenGL, per cui non è prevista la modifica nel pannello (ma che sono comunque presenti in nvapps.xml).

Per ovviare a questa discutibile gestione del pannello, si può ricorrere all'ottimo nhancer, scaricabile qua:
http://www.nhancer.com

Questo programma è un gestore dei profili più semplice del pannello Nvidia, che permette di settare alcune opzioni normalmente inaccessibili. Inoltre, è decisamente più razionale in quanto modifica direttamente il registry, e succesivamente sincronizza nvapps.xml . E' consigliato anche per chi non utilizza l'SLI. Potete visualizzare il percorso dei profili nel registry in nHancer con il comando "show GPU info".

Nel menu dedicato all'SLI avrete la possibilità di settare i flag di compatibilità. Questo vi permetterà di definire i profili per le nuove applicazioni esattamente come fanno i programmatori Nvidia. Si tratta soltanto di provare con un po' di pazienza le varie combinazioni.

Ad esempio, nel caso del benchmark Unigine ho trovato che la configurazione ottimale si ottiene attivando i flag 10-14-22-25, ottenendo il valore 2404401.
Il risultato è il seguente:



Si noti l'efficienza di un SLI ben configurato quando l'applicazione non è CPU limited.

Win XP - OpenGL

Anche in questo caso sono presenti dei flag di compatibilità specifici. Purtroppo il pannello di controllo Nvidia non prevede di caricare tali flag, quindi dovete per forza di cosa utilizzare nHancer.

Win XP X64 - Direct3D - Applicazioni a 64bit

Ad oggi conosco solo due giochi di cui esiste anche la versione a 64bit: UT2004 e Crysis. In entrambi i casi, ho notato ciò che sembra essere un baco dei driver Nvidia su questo sistema operativo: il driver non riesce a rilevare il lancio dell'applicazione e ad attivare il profilo dedicato. Il profilo deve quindi essere attivato manualmente a livello globale. Per far questo è sufficiente, da nHancer, settare il flag "profile can be activated manually". Dopodiche impartire il comando "activate profile" <nome del profilo>. per ripristinare la situazione, basta impartire "activate profile" driver defaults.

Vista x64 non sembra affetto da questo problema.

Vista - Nota sulla versione dei driver e di nHancer
Importante: tutto ciò che verrà descritto di seguito si applica a versioni di driver a partire dalla 163.67. Si sconsiglia caldamente di utilizzare versioni precedenti in quanto, prima di stabilizzare la situazione, la Nvidia ha combinato un pastrocchio
Su Vista nvapps.xml verrà installato in 2 (3 su Vista x64) percorsi:
Programdata/NVIDIA
windows/system32
windows/syswow64 su Vista x64

Il file nvapps.xml operativamente attivo è quello in Programdata/NVIDIA

Importante: nhancer è compatibile con questo cambio di percorso solo dalla versione 2.3.1, si raccomanda di aggiornare il tool a tale versione

Vista - DX9

Fermo restando il cambio di percorso di nvapps.xml, la gestione è esattamente come in windows XP


Vista - DX10

La gestione dei profili in DX10 è completamente diversa rispetto a quella in DX9
Potrete avere più dettagli nel thread originale sul forum di Guru3D:
http://www.nvnews.net/vbulletin/show...t=96604&page=3

In pratica, i profili in DX10 non vengono letti dal registry, ma direttamente da nvapps.xml in Programdata/NVIDIA. Il problema è che il driver effettua una verifica del checksum del file, e lo confronta con il valore memorizzato nell'header del file:
Quote:
<?xml version="1.0" encoding="utf-8"?>
<FILE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<INFO Number="1966474456" />
dove <INFO Number="1966474456" /> è appunto il checksum. Se il file nvapps.xml dovesse essere modificato, il controllo del checksum darebbe esito negativo e il driver ignorerebbe i profili. Ciò ha quasi portati Martin, autore di nHancer, ad abbandonare lo sviluppo del tool in quanto non era a conoscenza dell'algoritmo di generazione del checksum.

A questo punto io ho scoperto una cosa interessantissima: dalla versione 163.67 in poi, ai fini del calcolo del checksum solo le linee che contenevano i valori predefiniti (contraddistinte da itemtype="predefined") venivano conteggiate. Ciò era importantissimo, in quanto permetteva di gestire i profili DX10 senza sapere l'algoritmo di generazione del checksum, bastava semplicemente non modificare le linee con itemtype="predefined", ed il gioco era fatto. Ho comunicato la mia scoperta a Martin, e questo ha permesso lo sviluppo della versione 2.3.1.

In questa versione non viene più permesso modificare i valori predefiniti. Nel caso si volesse cambiare comunque uno dei valori predefiniti, tramite il comando duplicate è possibile disattivare (rimuovendo qualsiasi riferimento a file eseguibili) il profilo predefinito ed effettuarne una copia (che contiene invece i riferimenti agli eseguibili). Eventuali modifiche verranno applicate alla copia, senza modificare le linee interessate dal checksum


Vista - OpenGL

Con il benchmark Unigine non ho trovato una configurazione valida, ma non ho speso molto tempo. Allo stato attuale l'OpenGL in Vista è poco performante di per sè.

Profili ottimizzati

I seguenti profili sono stati da me testati, e laddove sostituiscono quelli Nvidia dovrebbero portare un miglioramento. Per importarli con Nhancer, copiate il contenuto in file di testo, e salvatelo con l'estensione .nhprofile. Dopodichè utilizzate l'opzione di import del tool o effettuate il doppio click sul file così generato, e mette la spunta sull'opzione per sovrascrivere i profili predefiniti.

The witcher EE

Fino alla patch 1.3 di The Witcher non c'erano problemi di sorta . Con la patch 1.4 (Enhanced Edition), sono comparsi due glitch grafici:

- uno strano e fastidioso bagliore visibile nelle ore notturne
- le luci delle torce sono visibili attraverso i muri

Osservate le immagini di seguito. Nella prima colonna sono ottenute con l'SLI disattivato, nella seconda attivato, nella terza attivato ma con l'impostazione del profilo su GPU singola.


Si noti come questo dimostra che impostare GPU singola nel profilo non equivale a disattivare l'SLI, ed eventuali problemi permangono

La soluzione è semplice: basta rimuovere il Flag 9 (quello marchiato Prince of Persia:SoT) e il problemi scompaiono.

Codice:
<?xml version="1.0" encoding="utf-8"?>
<FILE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<INFO Number="0" Version="3" />
	<PROFILESET>
		<PROFILE Label="The Witcher">
			<APPLICATION Label="witcher.exe" />
			<PROPERTY Label="multichip_rendering_mode" Value="0x02400005" Default="0x00000004" />
			<Manual>False</Manual>
			<Customized>True</Customized>
			<Shadowed>True</Shadowed>
		</PROFILE>
	</PROFILESET>
</FILE>
Vampire the Masquerade: Bloodlines, unofficial patch

In questo titolo, con la unofficial patch, si notano strane luci intermittenti visibili attraverso i muri. La soluzione è la stessa del caso precedente: rimuovere il Falg 9. Si noti che alcune luci sono comunque visibili attraverso i muri anche in modalità singola, è un difetto dell'engine.

Codice:
<?xml version="1.0" encoding="utf-8"?>
<FILE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<INFO Number="0" Version="3" />
	<PROFILESET>
		<PROFILE Label="Vampire The Masquerade - Bloodlines">
			<APPLICATION Label="vampire.exe" />
			<PROPERTY Label="multichip_rendering_mode" Value="0x02400001" Default="0x00000004" />
			<Manual>False</Manual>
			<Customized>True</Customized>
			<Shadowed>True</Shadowed>
		</PROFILE>
	</PROFILESET>
</FILE>
Unigine Tropics - Sanctuary nuova versione


Il seguente profilo contiene anche la modalità SLI DX10. Per il benchmark Sanctuary, è compatibile con la nuova versione con installer, non quella vecchia in .zip, ed in cui l'eseguibile si chiamava main. exe.

Codice:
<?xml version="1.0" encoding="utf-8"?>
<FILE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<INFO Number="0" Version="3" />
	<PROFILESET>
		<PROFILE Label="Unigine">
			<APPLICATION Label="Tropics/Launcher.exe" />
			<APPLICATION Label="Sanctuary/Launcher.exe" />
			<APPLICATION Label="Sanctuary.exe" />
			<APPLICATION Label="Tropics.exe" />
			<PROPERTY Label="multichip_rendering_mode" Value="0x02404405" Default="0x00000004" />
			<PROPERTY Label="multichip_ogl_options" Value="0x00000000" Default="0x0000FFFF" />
			<PROPERTY Label="multichip_dx10_rendering_mode" Value="0x00000055" Default="0x00000001" />
			<Manual>False</Manual>
			<Customized>True</Customized>
			<Shadowed>False</Shadowed>
		</PROFILE>
	</PROFILESET>
</FILE>
Necrovision
Manca il profilo SLI in DX10, quello di Cryostasis funziona egregiamente

Codice:
<?xml version="1.0" encoding="utf-8"?>
<FILE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<INFO Number="0" Version="3" />
	<PROFILESET>
		<PROFILE Label="Necrovision">
			<APPLICATION Label="necrovision.exe" />
			<PROPERTY Label="multichip_rendering_mode" Value="0x02550005" Default="0x00000004" />
			<PROPERTY Label="multichip_dx10_rendering_mode" Value="0x000010F5" Default="0x00000001" />
			<PROPERTY Label="hybrid_rendering_mode" Value="0x00000001" Itemtype="predefined" Default="0x00000000" />
			<Manual>False</Manual>
			<Customized>True</Customized>
			<Shadowed>False</Shadowed>
		</PROFILE>
	</PROFILESET>
</FILE>
Bioshock 2 DX10 + SLI + 3D Vision fix

Ho notato che in Bioshock 2, attivando sia l'SLI che il 3D Vision, ci sono degli improvvisi blocchi nell'erogazione dei frame. Si risolve togliendo il flag 5, cioè cambiando la penultima lettera da F a D nel profilo corrispondente:
Codice:
Profile "Bioshock 2: Sea of Dreams"
    ShowOn GeForce
    ProfileType Application
    Executable "bioshock2.exe"
    Setting ID_0x002c7f45 = 0x00020000
    Setting ID_0x00664339 = 0x00000001
    Setting ID_0x0076e164 = 0x00000001
    Setting ID_0x00a06946 = 0x002121D5
    Setting ID_0x00d55f7d = 0x00000145
    Setting ID_0x00e32f8a = 0x80000f71
    Setting ID_0x1033cec1 = 0x00000003
    Setting ID_0x1033cec2 = 0x00000002
    Setting ID_0x1033dcd2 = 0x00000004
    Setting ID_0x1033dcd3 = 0x00000004
    Setting ID_0x10930f46 = 0x00000001
    Setting ID_0x1095def8 = 0x02c00005
EndProfile
per chi non usa il 3D Vision, non è necessario nessuno intervento.

Aggiornamento: purtroppo con tale fix, le prestazioni calano paurosamente, e scendono al di sotto della scheda singola. Ora come ora, per chi ha il 3D vision, consiglio di disattivare l'SLI prima di giocare a questo titolo

Invito chiunque abbia sperimentato un profilo migliore di quello Nvidia a pubblicarlo in questo thread


Importante: cambiamenti radicali con dalla release 256.xx dei driver

Dalla versione 256.xx in poi, Nvidia a rivisto completamente la struttura dei driver. Ora non utilizzano più il file nvapps.xml, ma scrivono i settaggi direttamente nel registri. L'attuale versione di nHancer (2.5.9) non parte, in attesa che esca una versione aggiornata si posso utilizzare questi tool:

Geforce SLI profile

Nvidia inspector tool

Purtroppo però non c'è molta documentazione a riguardo, quindi bisogna fare un po' di reverse engineering per capire come modificarli.

Per modificare i profili, occorre esportarli con il tool Nvidia, alterare il file di testo con un editor, e reimportarli. Da una comparazione con il vecchio nvapps.xml, la corrispondenza dovrebbe essere:

multichip_rendering_mode = Setting ID_0x1095def8 (profilo SLI in DX9)
hybrid_rendering_mode = Setting ID_0x10930f46
multichip_dx10_rendering_mode = Setting ID_0x00a06946 (profilo SLI in DX10)
hybrid_dx10_rendering_mode = Setting ID_0x0076e164
multichip_ogl_options = Setting ID_0x209746c1 (profilo SLI in OpenGL)
hybrid_ogl_rendering_mode = Setting ID_0x202d45e7

il profilo contiene anche altri fix, ho indicato solo quelli relativi all'SLI.

Con queste premesse, la fix del profilo di the Witcher dovrebbe risultare:
Codice:
Profile "The Witcher"
    ShowOn GeForce
    ProfileType Application
    Executable "witcher.exe"
    Setting ID_0x1033cec1 = 0x00000003
    Setting ID_0x1033dcd2 = 0x00000004
    Setting ID_0x1095def8 = 0x02400005
EndProfile
Per quanto riguarda la codifica, il registro di configurazione SLI è formato da 32 bit. Quelli meno significativi, chiioè 2,1,0 determinano la modalità multi-GPU secondo quanto indicato all'inizio (5=4-wayAFR, etc.) I restanti bit, da 31 a 3, identificano i flag di compatibilità. La stringa è tradotta in otto cifre esadecimali, ogni cifra codifica quattro bit del registro. Ad esempio, volendo porre ad 1 i flag 31, 29,18,16,15,14,8,4 in modalità 4-way AFR, il registro diventa:

Codice:
    1010 0000 0000 0101 1100 0001 0001 0101
0x   A    0    0    5    C    1    1    5
__________________
Case:Chieftec BA-01B-B-B MB: E-VGA 122-M2-NF59-TR CPU:Athlon64 X2 (Windsor) 6400+ PSU1:Corsair HX 520WPSU2:Thermaltake PurePower Express W0099R VGA: 9800GX2@680/1700/1040 MHz Audio: SB X-fi Gamer HDD 2x320GB RAID-Link alla guida SLI - CPU gaming test

Ultima modifica di blade9722 : 12-09-2010 alle 09:42.
blade9722 è offline   Rispondi citando il messaggio o parte di esso