2009-02-08 9 views
10

Mi stanco un po 'di dover codificare esplicitamente per multicore se voglio maggiore velocità, in particolare quando sto scrivendo uno script unico. La mia casella di sviluppo ha già 8 core e quel numero sta aumentando molto più velocemente della velocità di clock. I linguaggi funzionali sembrano offrire un potenziale portello di fuga, ma non ho ancora provato a padroneggiarne uno.Quali sono alcuni esempi impressionanti di codice funzionale?

Mi piacerebbe vedere alcuni frammenti di codice del mondo reale che sono molto meglio e/o più parallelizzabili rispetto alle alternative non funzionali. Non sono schizzinoso per la lingua - sono più interessato ai concetti.

Grazie!

+0

cosa stai facendo come box di sviluppo che ha 8 core? –

+0

La mia ipotesi è dual quad core –

+0

Sì, si tratta di un doppio server Dell quad core. – twk

risposta

4

Questo (lungo, ma molto buono) il video dà sia un intro a F# e una demo convincente di quanto sia facile per parallelizzare il codice nel linguaggio:

http://channel9.msdn.com/pdc2008/TL11/

+0

Questo è stato un grande video - grazie. – twk

6

Che ne dici di MapReduce? È incredibilmente parallelizzabile e sebbene non sia implementato nei linguaggi funzionali per quanto riguarda la carta, è ispirato da Lisp map e reduce.

+0

E Hadoop, l'alternativa open source di MapReduce. –

2

La tua domanda è chiedere materiale allo stato dell'arte. Penso che la tua migliore introduzione a questo campo, con esempi, sia il libro Implicit Parallel Programming in pH di Nikhil e Arvind.

1

C'è un esempio esteso di un indicizzatore/ricercatore di testo che utilizza mapreduce nel capitolo 20 ("Programmazione di CPU multi-core") di Programming Erlang. Non so quanto sia impressionante, ma sembra che i mortali del codice possano scrivere.

1

LINQ è un bel esempio di programmazione funzionale nelle lingue tradizionali. Codice e monadi reificati? In MY C#? :) Ad ogni modo, w.r.t. threading, c'è menzione di Parallel LINQ. Usando l'immutabilità e le funzioni di ordine superiore (ed Espressione, forse), le librerie possono parallelizzare le cose per noi.

E un altro collegamento a F # con async workflows. Ciò che impressiona è la possibilità di prendere il codice di sincronizzazione e, con alcune piccole annotazioni, trasformarlo in codice asincrono. Il codice conserva molte delle qualità imperative che potresti usare. Non devi cambiare completamente le cose per approfittare di questo; il compilatore via gestisce tutto.

0

Un mio insegnante aveva l'abitudine di scherzare sul fatto che il più grande esempio di codice funzionale sia il codice che non è scritto.

Problemi correlati