Videogiochi: arriva la generazione multicore
Con l'avvento delle CPU multicore gli sviluppatori hanno dovuto rivedere seriamente i propri processi di sviluppo, ma adesso sembrano intravvedersi i risultati di questa transizione.
di Rosario Grasso pubblicata il 12 Aprile 2007, alle 13:38 nel canale Videogames
42 Commenti
Gli autori dei commenti, e non la redazione, sono responsabili dei contenuti da loro inseriti - infoA me q4 col comando per il multicore vola, da 100fps son passato a 136, un bel 36% in più, considerando che è uno dei pochi titoli a supportarlo non è male (magari con una sv diversa dalla 6600gt non avrei colli di bottiglia
Al contrario cod2, altro gioco che tramite patch dovrebbe ottenere ottimizzazioni, gira meglio se la setto su off
Io sapevo che sin dall'uscita sopportasse anche i sistemi multi cpu, ma non ho mai provato
mi spiego... le i386 sono un genere di istruzione pensato per l'esecuzione in sequenza con l'ausilio eventuale di una FPU per i calcoli in virgola mobile... anche in anni e secoli di sviluppo informatico, il nostro codice si basa su quelle istruzioni. con le pipeline multiple, le istruzioni dedicate (sse, mmx e quant'altro) e con tecniche hardware come la previsione di salto o simili, i produttori di cpu han tentato di metterci una pezza ma gli attuali compilatori devon combattere proprio con questo tipo di problema, cioè una serie di istruzioni pensate per essere eseguite in sequenza.
il PPC e altri processori RISC come gli Alpha e altri ormai morti e sepolti partivano da un concetto diverso, le istruzioni erano più semplici e potevano esser eseguite anche in un "quasi" parallelismo ma ovviamente essendo soluzioni di nicchia non hanno avuto un seguito...
se pensate che una vecchia Silicon degli anni 90 in elaborazione video ancora adesso darebbe il fumo a una bella serie di processori moderni, potete avere un'idea di come l'hardware attuale potrebbe rendere se venisse cambiata mentalità...
ma il mondo è di microsoft e a microsoft non interessa riscrivere un compilatore e poi un nuovo sistema operativo... potrebbe succedere che qualcuno ci riesca meglio di loro e loro perdano il monopolio
per l'ottimizzazione dei giochi invece il discorso di programmazione è ancora diverso anche se legato:
il processore ha dei limiti, ma il vero anello mancante è una generazione di compilatori e un linguaggio di programmazione che possano rappresentare facilmente il multiprocessing... provate in C o in C++ o in C# a convincere la cpu a eseguire contemporaneamente 2 o + tread... in molti casi è quasi impossibile (dipende sopratutto dalle estensioni supportate dal compilatore e da come sono implementate)
ma è anche un fattore mentale dei programmatori... noi umani siamo portati a pensare sequenzialmente non in parallelo e quindi non riusciamo a "vedere" la strada multitread
per il resto quoto a pieno chi parla di giocabilità, AI, fisica ecc... a che serve una physis se ho un quadcore che lavora al 20-30% delle sue possibilità?
-Ma non si potrebbe davvero "unire" i vari core per farli lavorare come uno solo in sequenza inveece che in parallelo?
-Ma i PowerPC possono "spalmare" automaticamente sui vari core anche un calcolo derivato da C nato per essere in sequenza? (vedi kernel SMP di unix e linux)
-SE si, oltre ai vecchi MAC e alle PS3 con linux, un plebeo come me dove può trovare powerPC a buon prezzo?
Grazie mille!
Un pò lentucci direi!
Come possono essere lentucci se oggi come oggi sviluppare un titolo per PC ci vogliono mediamente 5 anni?
Quake 3 invece ha sempre supportato l'SMP. E visto ciò, mi meraviglio di come oggi non abbiano fatto gli ultimi titoli "pronti" per i multicore.
mi spiego... le i386 sono un genere di istruzione pensato per l'esecuzione in sequenza con l'ausilio eventuale di una FPU per i calcoli in virgola mobile... anche in anni e secoli di sviluppo informatico, il nostro codice si basa su quelle istruzioni. con le pipeline multiple, le istruzioni dedicate (sse, mmx e quant'altro) e con tecniche hardware come la previsione di salto o simili, i produttori di cpu han tentato di metterci una pezza ma gli attuali compilatori devon combattere proprio con questo tipo di problema, cioè una serie di istruzioni pensate per essere eseguite in sequenza.
il PPC e altri processori RISC come gli Alpha e altri ormai morti e sepolti partivano da un concetto diverso, le istruzioni erano più semplici e potevano esser eseguite anche in un "quasi" parallelismo ma ovviamente essendo soluzioni di nicchia non hanno avuto un seguito...
se pensate che una vecchia Silicon degli anni 90 in elaborazione video ancora adesso darebbe il fumo a una bella serie di processori moderni, potete avere un'idea di come l'hardware attuale potrebbe rendere se venisse cambiata mentalità...
ma il mondo è di microsoft e a microsoft non interessa riscrivere un compilatore e poi un nuovo sistema operativo... potrebbe succedere che qualcuno ci riesca meglio di loro e loro perdano il monopolio
Non si tratta di un problema di compilatori... il compilatore da solo non può capire se l'algoritmo si presta bene al multithreading e riscriverlo di conseguenza, è l'algoritmo stesso che deve essere scritto fin dall'inizio col multithreading in testa. Poi lasciamo stare la Microsoft, ci sono tonnellate di aziende che offrono compilatori, Intel inclusa.
Che sia difficile o impossibile esprimere certi problemi con una soluzione "parallela" è un conto (ed è verissimo), ma non diamo la colpa ai linguaggi di programmazione moderni (o ai compilatori) che offrono tutti gli strumenti necessari. Ovvio che per il programmatore è un lavoraccio ma non direi "quasi impossibile".
Questo sicuramente.
mi spiego... le i386 sono un genere di istruzione pensato per l'esecuzione in sequenza con l'ausilio eventuale di una FPU per i calcoli in virgola mobile... anche in anni e secoli di sviluppo informatico, il nostro codice si basa su quelle istruzioni. con le pipeline multiple, le istruzioni dedicate (sse, mmx e quant'altro) e con tecniche hardware come la previsione di salto o simili, i produttori di cpu han tentato di metterci una pezza ma gli attuali compilatori devon combattere proprio con questo tipo di problema, cioè una serie di istruzioni pensate per essere eseguite in sequenza.
il PPC e altri processori RISC come gli Alpha e altri ormai morti e sepolti partivano da un concetto diverso, le istruzioni erano più semplici e potevano esser eseguite anche in un "quasi" parallelismo ma ovviamente essendo soluzioni di nicchia non hanno avuto un seguito...
Mi sembra sei rimasto parecchi anni indietro:
http://www.openmp.org
http://www-unix.mcs.anl.gov/mpi/
E questo chi te l'ha detto? Negli anni 90 non ci stavano nemmeno i formati video che ci sono adesso. I super computer di allora oggi sono una frazione di potenza dei comuni PC da supermercato da 900€.
Magari fosse cosi semplice. Il monopolio mica ce l'hanno perchè hanno il miglior SO. Già da adesso.
il processore ha dei limiti, ma il vero anello mancante è una generazione di compilatori e un linguaggio di programmazione che possano rappresentare facilmente il multiprocessing...
OpenMP, MPI... Questi cosa sono?
Presto fatto:
[code]
#include <openmp.h>
int main(int argc, char ** argv)
{
#pragma omp parallel for
for (; {}
return 0;
}
[/code]
Che bello, un pezzo di codice C/OpenMP che non fa nulla in un numero di thread equivalente al numero di core disponibili.
E funziona sotto Windows / Linux alla stessa maniera, nativamente e con Microsoft C++ Compiler, Intel C++ Compiler e GCC 4.2
Pezzi di codice serilalizzato con banali direttive pragma. In C# è ancora piu' banale, visto che i thread fanno parte delle API standard del linguaggio e vengono gestiti per la maggior parte dal framework senza troppi complimenti.
Ma chi ha mai detto che ste CPU servono per i giochi?
Questi discorsi sono banali. Io non ho mai visto nessuno comprare una Lamborghini Gallardo e lamentarsi di aver preso una macchina non adatta per fare gite in campagna.
-Ma non si potrebbe davvero "unire" i vari core per farli lavorare come uno solo in sequenza inveece che in parallelo?
E perchè mai dovremmo tornare al passato quando invece l'elaborazione parallela l'abbiamo sempre cercata di ottenere anche quando non avevamo l'hardware (thread, processi, preemption, hyper-threading, ecc. ecc.?
Un kernel SMP non fa quello che dici, semplicemente è in grado di schedulare risorse su piu' CPU in caso di necessità. Questo non significa che codice non SMP si comporti come se lo fosse. Un kernel SMP su una macchina SMP in presenza di codice seriale, lo esegue comunque su una sola CPU. Inoltre i PowerPC non possono fare quello che dici, la sincronizzazione tra compiti paralleli dipende troppo dalla logica che si porta dietro e richiede programmazione manuale. Nulla che sia appannaggio di "semplici" CPU.
Su ebay, per esempio. Sono ferraglia come altri, nulla di trascendentale. Il buon prezzo è dato dal fatto che non sono altro che pezzi di rottami.
Bei tempi, quando i programmatori ancora sapevano "osare"
I programmatori veri osano e sperimentano sempre.
Il problema sono le leggi di mercato che imbrigliano il loro spirito creativo limitandolo per fare profitto a qualunque costo.
E cmq programmare in multi-threading in maniera decente richiede imho un cambio di mentalità quasi pari al passaggio procedurale/OO.
Servono degli strumenti che aiutino i programmatori, ma soprattutto i programmatori devono iniziare a ragionare in un altro modo.
E non parliamo del debugging con gli strumenti oggi a disposizione per i programmi multi-threaded ke è meglio...vah
Per esempio: cpu con 4 core disponibili.
Ho un software, mettiamo un gioco, che richiede una grande capacità di calcolo per la fisica ma che non prevede montagne di calcoli in parallelo, e una buona capacità per l'intelligenza artificiale.
Le risorse si potrebbero assegnare così: 1 core per gestire sistema operativo e coordinazione di tutti gli aspetti che riguardano il gioco e l'interazione con le risorse del compurer. 1 core per la gestione dell'intelligenza artificiale, e 2 core uniti con il reverse HT per la gestione della fisica.
Oppure, sempre il solito gioco, ma con la fisica in cui si prevede un ampio uso del calcolo parallelo. I primi 2 core verrebbero gestiti in maniera identica a prima, mentre gli altri 2 invece di essere uniti, verrebbero sfruttati per il calcolo parallelo e quindi fatti lavorare indipendenti.
Assolutamente impossibile.
E cmq strumenti che automaticamente e totalmente sgravino i programmatori dai casini del multi-threadingnon esisteranno per un bel pezzo...
A meno che i famosi cervelli positronici di asimov prendano luce..
ma mi pare un eventualità...km dire... piuttosto remota
E questo per un semplicissimo, ma incredibilmente pericoloso concetto: le dipendenze
Devi effettuare il login per poter commentare
Se non sei ancora registrato, puoi farlo attraverso questo form.
Se sei già registrato e loggato nel sito, puoi inserire il tuo commento.
Si tenga presente quanto letto nel regolamento, nel rispetto del "quieto vivere".