Il pranzo gratuito è finito? [chiuso]

12

Nel suo famoso articolo The Lunch gratuito è finita del 2005, Herb Sutter ha predetto una rivoluzione di programmazione simultanea grande come rivoluzione orientata agli oggetti. Questa rivoluzione è davvero arrivata negli anni 2005 - 2013?

Punti chiave nell'articolo:

  • I produttori di processori hanno esaurito la stanza con la maggior parte dei loro approcci tradizionali per aumentare le prestazioni della CPU. Invece di aumentare le velocità di clock sempre più elevate, si rivolgono invece alle architetture hyperthreading e multicore.

  • Le applicazioni avranno sempre più bisogno di essere concomitanti se vogliono sfruttare appieno i guadagni del throughput della CPU.

  • "Oh, le prestazioni non contano molto, i computer continuano a essere più veloci", l'affermazione sarà sbagliata.

  • L'efficienza e l'ottimizzazione delle prestazioni otterranno di più, non di meno, importanti. Quelle lingue che si prestano già a un'ottimizzazione pesante troveranno nuova vita; quelli che non avranno bisogno di trovare modi per competere e diventare più efficienti e ottimizzabili. Aspettatevi una maggiore domanda a lungo termine di linguaggi e sistemi orientati alla prestazione.

  • I linguaggi e i sistemi di programmazione saranno sempre più costretti ad affrontare bene la concorrenza. Abbiamo un disperato bisogno di un modello di programmazione di livello superiore per la concorrenza rispetto alle lingue disponibili oggi.

posta cpp 30.09.2013 - 07:03
fonte

2 risposte

23

Sì, ma dipende.

Non ci si può aspettare di scrivere software non banale , ad alte prestazioni senza sfruttare l'hardware parallelo e utilizzare la concorrenza come tecnica di strutturazione del programma. Ma il più software è allo stesso tempo banale e non critico per le prestazioni. Un'app Web non sta eseguendo molte operazioni di numerazione e le app CRUD non hanno nulla a che vedere con i limiti temporali di alcuni software di simulazione e medici.

In particolare, gli sviluppatori di giochi devono prendersene cura, perché i giochi sono il tipo più comune di applicazione con requisiti soft in tempo reale. Il problema è saliente su un telefono cellulare, in cui si desidera spremere il più possibile potenza di calcolo e rendering da un chip integrato con due core CPU e una GPU a bassa potenza. Questa è un'altra ragione per cui molti sviluppatori stanno guardando Haskell e aspettano che le lingue come Rust maturino, vogliamo prestazioni di sicurezza e sull'hardware moderno.

Dal 2005 abbiamo acquisito strumenti nuovi e migliorati come OpenCL, CUDA, OpenMP e set di istruzioni vettoriali per lavorare con la concorrenza e il parallelismo dei dati nelle lingue stabilite. Tuttavia, i nuovi arrivati relativi sono progettati sin dall'inizio per fare molte altre cose interessanti con la concorrenza.

Il runtime simultaneo di Haskell consente al linguaggio di fornire un supporto completo per il parallelismo leggero (scintille) e le astrazioni di concorrenza (discussioni, canali e riferimenti mutabili condivisi). Go e Rust offrono anche attività leggere, vai usando i canali e Rust usando il passaggio dei messaggi.

Questi sistemi offrono sicurezza della memoria, runtime efficienti e protezione statica contro determinati tipi di gare. L'immutabilità di default di Haskell e Rust rende la concorrenza molto più facile da gestire per gli umani. Erlang ci stava già negli anni '80, ma anche le esigenze del software e le nostre conoscenze su come progettare i sistemi di programmazione sono migliorate, grazie al cielo.

Infine, molte lingue esistenti, non nominerò nomi, sono pronte a declinare come scelte credibili per scrivere nuovi software. Il loro fardello di complessità e le scarse astrazioni di concorrenza li rendono inadatti alle considerazioni sulle applicazioni moderne. Stiamo semplicemente aspettando alternative mature.

    
risposta data 30.09.2013 - 07:55
fonte
6

Ecco alcuni punti dati; decidi tu stesso se conta come una rivoluzione.

Hardware Parallelizzato

Verso il 2005, sia Intel che AMD iniziano a produrre CPU desktop x86 a 2 core (Pentium D e Athlon 64), con velocità di clock intorno ai 3 GHz.

Nel 2006 è stata rilasciata PlayStation 3, con processore Cell con 8 + 1 core a 3.2 GHz.

Nel 2006 è stata rilasciata la serie GeForce 8. Consiste di grandi numeri (~ 100) di 'stream processors' di uso generale, al contrario di unità specifiche della grafica. Intorno al 2007, viene rilasciata la specifica CUDA 1.0, che consente di eseguire calcoli generici su hardware NVidia in parallelo.

Da allora, le tendenze continuarono.

Ora, nel 2013, sia Intel che AMD offrono CPU a 4, 8 e 16 core, con velocità di clock leggermente superiori a soli 4 GHz. I design dual-core e quad-core sono comuni per i dispositivi a bassa potenza, come laptop e smartphone.

Tutto questo è hardware per computer di tutti i giorni prodotto in serie.

Software

CUDA è stato rilasciato nel 2007, poi OpenCL nel 2008, consentendo di utilizzare GPU massicciamente parallele nel calcolo generale (non grafico). Il modello diventa popolare; molte società di hosting (ad esempio Amazon) offrono GPU per attività di calcolo generali.

Vai è stato rilasciato nel 2009, con discussioni preventive molto economiche ("goroutines") e permettendo di esprimere in modo efficiente algoritmi concomitanti.

Akka toolkit è rilasciato per Java e Scala nel 2009, consentendo la concorrenza basata sugli attori.

Erlang (un linguaggio altamente concorrente) vede un aumento nell'utilizzo.

Concorrenza vs Parallelismo

Si noti che per utilizzare l'hardware parallelo, non è necessaria necessariamente la concorrenza del software, cioè, la giocoleria con i thread di esecuzione all'interno di un calcolo. Molti problemi sono risolti da processi paralleli , non interagenti, in cui ogni processo è un programma sequenziale tradizionale.

L'elaborazione parallela può utilizzare linguaggi più tradizionali e quadri paralleli, come map-reduce o MPC o OpenMP. Per tali framework, la presenza di più core sullo stesso cristallo della CPU non è concettualmente molto diversa dall'avere più CPU nel cluster; la differenza è principalmente la velocità.

Nessun pranzo gratuito fino ad ora

Le velocità della CPU permangono ancora a circa 5 GHz all'estremità superiore. Con tecnologie migliori in vista, come i transistor di grafene, le frequenze potrebbero di nuovo aumentare in futuro, ma non molto presto probabilmente.

    
risposta data 30.09.2013 - 14:36
fonte

Leggi altre domande sui tag