2012-06-12 17 views
16

So che la domanda è solo parzialmente correlata alla programmazione perché la risposta che vorrei ottenere è originariamente da queste due domande:Perché non utilizzare le GPU come CPU?

Perché il numero di core CPU è così basso (rispetto alla GPU)? e perché non stiamo usando GPU invece di CPU, solo GPU o solo CPU? (So ​​che le GPU sono specializzate mentre le CPU sono più per multi-task, ecc.). So anche che ci sono limitazioni di memoria (Host vs GPU) insieme a precisione e capacità di cache. In termini di confronto hardware, le GPU di confronto tra CPU e GPU di fascia alta e high-end sono molto più performanti.

Quindi la mia domanda è: Potremmo usare le GPU, invece di CPU per il sistema operativo, applicazioni, ecc

La ragione per cui mi sto chiedendo questa domanda è perché vorrei sapere il motivo per cui i computer attuali sono ancora utilizzando 2 unità di elaborazione principali (CPU/GPU) con due sistemi di memoria e caching principali (CPU/GPU) anche se non è qualcosa che un programmatore vorrebbe.

+2

Risposta breve: CPU generale rispetto a CPU specializzata. – asawyer

+1

Sono d'accordo, ma allora perché non creare "GPU generici"? I programmatori devono imparare sia i linguaggi CPU (C++, Matlab, Python ecc.) Che le GPU (OpenGL, OpenCL, DirectX, ecc.) Per scopi specializzati o generici, mentre un sistema di elaborazione di uso generale farebbe entrambi. – Maiss

+1

Ho fatto una domanda correlata per un po 'di tempo che ha alcune buone risposte ... http://stackoverflow.com/questions/1126989/what-future-does-the-gpu-have-in-computing –

risposta

10

Le GPU sono progettate per l'elaborazione grafica (ovviamente), che è intrinsecamente qualcosa che beneficia dell'elaborazione parallela (esecuzione di più attività/calcoli contemporaneamente). Ciò significa che a differenza delle moderne CPU, che come probabilmente sapete di solito hanno 2-8 core, le GPU hanno centinaia di core. Ciò significa che sono particolarmente adatti per l'elaborazione di cose come ray tracing o qualsiasi altra cosa che potresti incontrare in un gioco 3D o in altre attività di grafica intensiva.

Le CPU invece hanno un numero relativamente limitato di core poiché le attività che una CPU affronta in genere non traggono vantaggio dall'elaborazione parallela tanto quanto il rendering di una scena 3D. In effetti, avere troppi core in una CPU potrebbe effettivamente degradare le prestazioni di una macchina, a causa della natura delle attività che una CPU di solito fa e del fatto che molti programmi non verrebbero scritti per trarre vantaggio dalla moltitudine di core . Ciò significa che per la navigazione su Internet o la maggior parte delle altre attività desktop, una CPU con pochi potenti core sarebbe più adatta per il lavoro di una GPU con molti, molti più piccoli core.

Un'altra cosa da notare è che più core di solito significa più potenza necessaria.Ciò significa che un telefono o un laptop a 256 core sarebbe piuttosto poco pratico dal punto di vista dell'alimentazione e del calore, per non parlare delle sfide e dei costi di produzione.

+1

Se più core nella CPU sono vantaggiosi dipende dal calcolo e quanto è gestibile dalla parallelizzazione – Attila

+0

Grazie AUAnonymous. Potresti comunque elaborare come una CPU multi-core (>> 10 core) degraderebbe le prestazioni? Sono curioso su questo a causa di ciò che ho imparato dalla programmazione OpenCL. L'unica limitazione è l'accesso alla memoria (velocità e # di ricerca), ma avere 4 livelli di memorizzazione nella cache/memoria risolverebbe il problema, no? – Maiss

+1

Per provare a rispondere alla tua domanda, potrebbe solo peggiorare le prestazioni, a seconda dell'attività, ma generalmente, assumendo un costo uguale, una CPU con più core avrà una velocità di clock più bassa di una con meno. Ciò significa che se un task non trae grandi benefici dall'elaborazione parallela, la CPU con meno core sarà in grado di eseguire l'attività più velocemente grazie alle sue più elevate velocità di clock. Un'altra cosa da notare è che un programma non è stato scritto per trarre vantaggio da molti core, quindi i core aggiuntivi saranno quasi "sprecati" perché non vengono utilizzati in modo efficiente. – lyallcooper

12

Le GPU attuali mancano di molte delle funzionalità di una CPU moderna che sono generalmente considerate importanti (fondamentali, in realtà) per cose come un sistema operativo.

Ad esempio, un sistema operativo utilizzava normalmente la memoria virtuale e il paging per gestire i processi. Il paging consente al sistema operativo di assegnare a ogni processo il proprio spazio di indirizzamento, (quasi) completamente isolato da ogni altro processo. Almeno basandosi su informazioni pubblicamente disponibili, la maggior parte delle GPU non supporta affatto il paging (o almeno non nel modo in cui un SO ha bisogno).

Le GPU funzionano anche a velocità di clock molto più basse rispetto alle CPU. Pertanto, solo solo forniscono prestazioni elevate per problemi di imbarazzo parallelo. Le CPU generalmente offrono prestazioni molto più elevate per il codice a thread singolo. La maggior parte del codice in un sistema operativo non è molto parallela - in effetti, molto è abbastanza difficile fare parallelamente (per esempio, per anni Linux ha avuto un blocco gigante per garantire che solo un thread eseguisse la maggior parte del codice del kernel in ogni volta). Per questo tipo di attività, è improbabile che una GPU possa fornire alcun vantaggio.

Da un punto di vista di programmazione, una GPU è una benedizione mista (nella migliore delle ipotesi). Le persone hanno passato anni a lavorare sulla programmazione dei modelli per rendere la programmazione di una GPU ancora a metà strada, e anche così è molto più difficile (in generale) della programmazione della CPU. Data la difficoltà di ottenere che anche le cose relativamente banali funzionino bene su una GPU, non posso immaginare di provare a scrivere qualcosa di simile a un sistema operativo tanto grande quanto complesso da poter essere eseguito su uno.

+0

Grazie Jerry, entrambe le risposte: AUAnonymous e il tuo aggiornato erano quelli che stavo cercando. Lo apprezzo. – Maiss

0

In genere i sistemi operativi sono piuttosto semplici, se si guarda alla loro struttura. Ma parallelizzarli non miglioreranno molto le velocità, ma solo la velocità di clock grezza.

Le GPU semplicemente mancano delle parti e un sacco di istruzioni dai loro set di istruzioni che un sistema operativo ha bisogno, è una questione di raffinatezza. Basti pensare alle funzioni di virtualizzazione (Intel VT-x o AMD AMD-v).

I nuclei GPU sono come stupidi, mentre una CPU è come un uomo complesso, per così dire. Entrambi hanno un diverso consumo di energia a causa di ciò e producono quantità di calore molto diverse.

Vedere questa risposta di superutente completo here per ulteriori informazioni.

Problemi correlati