Videogiochi: arriva la generazione multicore

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 pubblicata il , alle 13:38 nel canale Videogames
 
42 Commenti
Gli autori dei commenti, e non la redazione, sono responsabili dei contenuti da loro inseriti - info
ErminioF12 Aprile 2007, 18:58 #21
Originariamente inviato da: ZiP!
il comando per abilitare il supporto multicore in doom 3 e quake 4 mi pare sia r_usesmp 1, ma almeno su q4 spesso causa crash vari del gioco...

A 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
credo che ti stia sbagliando, q3 ha sempre supportato un unico core

Io sapevo che sin dall'uscita sopportasse anche i sistemi multi cpu, ma non ho mai provato
Willy_Pinguino12 Aprile 2007, 19:31 #22
forse il problema dell'ottimizzazione dual-multi core è un problema di compilatori-linguaggio da una parte e istruzioni dall'altra...

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à?
ErFiaschi12 Aprile 2007, 21:23 #23
Scusa willy mi sembri molto preparato io sono un profano:

-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!
mjordan12 Aprile 2007, 22:18 #24
Originariamente inviato da: psychok9
Già... nonostante i primi multicore sono usciti nel 2005 ancora nel 2007 ne parliamo...
Un pò lentucci direi!


Come possono essere lentucci se oggi come oggi sviluppare un titolo per PC ci vogliono mediamente 5 anni?
mjordan12 Aprile 2007, 22:23 #25
Originariamente inviato da: ZiP!
credo che ti stia sbagliando, q3 ha sempre supportato un unico core


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.
bist12 Aprile 2007, 22:29 #26
Originariamente inviato da: Willy_Pinguino
forse il problema dell'ottimizzazione dual-multi core è un problema di compilatori-linguaggio da una parte e istruzioni dall'altra...

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.

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)


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".

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


Questo sicuramente.
mjordan12 Aprile 2007, 22:39 #27
Originariamente inviato da: Willy_Pinguino
forse il problema dell'ottimizzazione dual-multi core è un problema di compilatori-linguaggio da una parte e istruzioni dall'altra...

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/

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à...


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€.

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


Magari fosse cosi semplice. Il monopolio mica ce l'hanno perchè hanno il miglior SO. Già da adesso.

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...


OpenMP, MPI... Questi cosa sono?

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)


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.

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 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.
mjordan12 Aprile 2007, 22:49 #28
Originariamente inviato da: ErFiaschi
Scusa willy mi sembri molto preparato io sono un profano:

-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.?

-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)


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.

-SE si, oltre ai vecchi MAC e alle PS3 con linux, un plebeo come me dove può trovare powerPC a buon prezzo?


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.
^TiGeRShArK^13 Aprile 2007, 00:19 #29
Originariamente inviato da: Lud von Pipper
Fate conto che Falcon 4 (1999) ai suoi tempi sfruttava i multiprocessori al 100%, con prestazioni aumentate di quasi il 50%!

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
^TiGeRShArK^13 Aprile 2007, 00:22 #30
Originariamente inviato da: zanardi84
La soluzione vincente sarebbe un reverse hyperthreading, una implementazione in grado di fondere n cpu fisiche in 1 o più cpu logiche che sono la somma delle cpu fisiche.. il tutto secondo le necessità.

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".

La discussione è consultabile anche qui, sul forum.
 
^