2009-10-06 30 views
12

Quindi sembra multicore e tutte le sue complicazioni associate sono qui per rimanere. Sto pianificando un progetto software che trarrà sicuramente vantaggio dal parallelismo. Il problema è che ho pochissima esperienza nella scrittura di software concorrenti. L'ho studiato all'università e ho capito molto bene i concetti e la teoria, ma non ho le mani su esperienze utili per costruire software da utilizzare su più processori sin dalla scuola.Iniziare con la programmazione parallela

Quindi la mia domanda è, qual è il modo migliore per iniziare con la programmazione multiprocessore? Conosco principalmente lo sviluppo di Linux in C/C++ e Obj-C su Mac OS X con un'esperienza Windows quasi zero. Anche il mio progetto software pianificato richiederà FFT e probabilmente confronti a virgola mobile di molti dati.

Esistono i thread OpenCL, OpenMP, MPI, POSIX, ecc. Quali tecnologie dovrei iniziare?

Qui ci sono un paio di opzioni pila sto considerando, ma non sono sicuro se mi lasceranno esperimento di lavoro verso il mio obiettivo:

  • Dovrei avere Snow Leopard e cercare di ottenere i programmi OpenCL Obj-C per eseguire l'esecuzione sulla GPU ATI X1600 sul mio laptop ? oppure
  • Devo procurarmi una Playstation e provare a scrivere il codice C su attraverso i suoi sei core Cell SPE disponibili? o
  • Devo compilare una scatola Linux con una scheda Nvidia e provare a lavorare con con CUDA?

Grazie in anticipo per il vostro aiuto.

+1

Installare VS2010 o 2012 sotto Windows, avviarlo, passare a F # interattivo e digitare 'Array.map ((+) 3) [| 1..10 |]'. Hai scritto un programma F # seriale. Quindi digitare 'Array.Parallel.map ((+) 3) [| 1..10 |]'. Sei in programmazione parallela. –

risposta

3

Se sei interessato al parallelismo in OS X, assicurati di dare un'occhiata allo Grand Central Dispatch, soprattutto perché la tecnologia è stata open source e potrebbe presto vedere un'adozione molto più ampia.

+0

Sai se GCD mi consentirà di eseguire FFT su una GPU X1600? – Talesh

+0

Si vuole guardare OpenCL in quel caso, non GCD. GCD è per CPU, OpenCL è per GPU. –

2

Non è necessario hardware speciale come schede grafiche e celle per la programmazione parallela. La tua semplice CPU multi-core beneficerà anche della programmazione parallela. Se hai esperienza con C/C++ e objective-c, inizia con uno di questi e impara a usare i thread. Inizia con semplici esempi come la moltiplicazione di matrici o la risoluzione di labirinti e imparerai a conoscere quei fastidiosi problemi (il software parallelo è non deterministico e pieno di Heisenbug).

Se vuoi entrare nel vasto multiparallelismo, sceglierei openCL perché è il più portatile. Cuda ha ancora una comunità più ampia, più documentazione ed esempi ed è un po 'più facile, ma tu avresti una scheda nvidia.

+0

Penso che CUDA potrebbe essere la mia scommessa migliore dato che la community è un po 'più sviluppata, Nvidia sembra essere impegnata per HPC e beh ... è C e Linux. Non so ancora se le GPU saranno in grado di eseguire cose come la FFT, o anche se questa domanda ha senso! – Talesh

+0

FFT ha molto senso. Vedi per esempio http://www.macresearch.org/cuda-quick-look-and-comparison-fft-performance –

4

Inizialmente suggerirei di aprire OpenMP e MPI, non sono sicuro che sia importante per te, ma devi assolutamente (a mio avviso :-)) imparare approcci di memoria condivisa e distribuita al calcolo parallelo.

Suggerisco di evitare i thread OpenCL, CUDA, POSIX, in un primo momento: ottenere una buona base sulle basi delle applicazioni parallele prima di iniziare a lottare con la sottostruttura. Ad esempio, è molto più facile imparare a utilizzare le comunicazioni broadcast in MPI piuttosto che programmarle in thread.

Mi piacerebbe rimanere con C/C++ sul tuo Mac dato che le conosci già, e ci sono buone librerie OpenMP e MPI open-source per quella piattaforma e quelle lingue.

E, e per alcuni di noi è un grande vantaggio, qualunque cosa si impari su C/C++ e MPI (in misura minore è vero anche per OpenMP) ti sarà utile quando ti sarai diplomato in veri supercomputer.

Tutto soggettivo e polemico, quindi ignoralo se lo desideri.

+0

Hi Mark, Hai qualche link che mi puoi inviare per iniziare con OpenMP e MPI? -Talesh -Talesh – Talesh

3

Il tradizionale e imperativo "stato condiviso con serrature" non è la vostra unica scelta. Rich Hickey, il creatore di Clojure, un Lisp 1 per la JVM, rende un argomento molto convincente contro lo stato condiviso. Sostanzialmente sostiene che è quasi impossibile avere ragione. Potresti voler leggere il messaggio che passa agli attori di Erlang o alle librerie STM.

0

Forse il tuo problema è adatto per il paradigma MapReduce. Si occupa automaticamente del bilanciamento del carico e dei problemi di concorrenza, il documento di ricerca di Google è già un classico. Hai un'implementazione a macchina singola chiamata Mars che funziona su GPU, questo potrebbe funzionare bene per te. C'è anche Phoenix che esegue map-reduce su multiprocessore multicore e simmetrico.

0

Vorrei iniziare con MPI mentre si impara a gestire la memoria distribuita. Pacheco's book è un vecchio gioco, ma è un piacere, e MPI funziona bene su OS X e ora offre prestazioni multicore piuttosto buone.

Problemi correlati