PhysX e CPU: vecchi comandi
David Kanter, in un interessante articolo su Real World Technologies - di cui vi avevamo dato notizia (PhysX a marce ridotte con la CPU, Nvidia bara?) - era entrato nel merito della questione usando VTune di Intel per analizzare il comportamento di PhysX con la CPU. Osservando i risultati aveva rilevato carichi di istruzioni x87 e micro-operation x87.
- x87 è una piccola parte del set di istruzioni di un'architettura x86 usata per i calcoli in virgola mobile. Si tratta di un cosiddetto set di estensioni, un'implementazione hardware che offre elementi essenziali per risolvere comuni operazioni numeriche più rapidamente (calcoli di seno e coseno, per esempio). Dall'introduzione delle istruzioni SSE2 l'estensione x87 ha perso molta della precedente importanza. Per i calcoli che richiedono una mantissa (parte decimale di un numero reale qualsiasi, ottenuta facendo la differenza tra il numero e la sua parte intera) di 64 bit, possibile solamente con registri x87 a 80 bit, l'x87 rimane importante.
David ha scritto che ottimizzando il codice PhysX con il più moderno e veloce set di istruzioni SSE2 anziché l'x87 si potrebbe ottenere un funzionamento molto più efficiente. Secondo la sua valutazione si parla di prestazioni da 1,3 a 2 volte superiori. Aveva anche fatto notare che Nvidia non avrebbe nulla da guadagnare da queste ottimizzazioni, considerando l'attenzione dell'azienda verso chi acquista una propria GPU.
Abbiamo ricostruito le sue ricerche usando Mafia II anziché Cryostasis e passando al nostro precedente sistema di prova Intel, poiché VTune sfortunatamente non può/vuole funzionare con la nostra CPU AMD.
Valutazione
Le nostre rilevazioni confermano completamente i risultati di Kanter. L'incremento prestazionale previsto con il cambiamento delle opzioni del compilatore però è più piccolo di quanto indicato dal sito SemiAccurate. I test con il benchmark Bullet hanno mostrato una differenza tra il 10 e il 20 percento tra file compilati con x87 e quelli con SSE2. Sulla carta questo potrebbe sembrare un grande incremento, ma in pratica è piuttosto marginale specialmente se PhysX sfrutta un solo core della CPU. Se il gioco non era giocabile prima, il piccolo incremento prestazionale che abbiamo visto non cambia molto le cose.
Nvidia vuole comunque dare una buona impressione, e nell'SDK 3.0 consente di abilitare di default l'impostazione SSE2. Sta agli sviluppatori decidere come e quali estensioni SSE2 usare. Quanto vi abbiamo mostrato sopra evidenzia anzitutto che c'è ancora del potenziale per aumentare le prestazioni, ma anche che alcune notizie erano un po' sensazionalistiche. Anche dopo aver messo le cose in prospettiva, è chiaro che in questo caso c'è alla base una decisione di mercato di Nvidia, che preferisce spingere PhysX sulle GPU anziché fare ciò che sarebbe meglio per le prestazioni generali.