Domanda

Sono un esperto di affari, a due terzi del mio corso di laurea, con una piccola esperienza in PHP, dopo aver preso una lezione introduttiva in C ++ e ora rimpiangendo la mia scelta di affari rispetto alla programmazione / informatica.

Sono interessato a imparare una programmazione più avanzata; in particolare C, e infine il passaggio all'utilizzo dell'architettura CUDA per l'analisi dei dati di reti neurali artificiali (non per AI, visione o elaborazione del parlato, ma per trovare correlazioni tra punti di dati in grandi serie di dati e dati generali / analisi statistiche).

Qualche consiglio su come dovrei iniziare a studiare C? Oltre alla tecnologia ANN / bayesiana per l'analisi dei dati? Ci sono così tanti libri là fuori, non so cosa scegliere.

Dal momento che CUDA è abbastanza nuovo, non sembra esserci molto materiale per gli studenti (cioè scemo). Esistono risorse di apprendimento per CUDA oltre alla documentazione NVIDIA?

Inoltre, quali risorse mi consiglieresti di parlare di elaborazione GPGPU e programmazione massicciamente parallela che mi aiuterebbero?

È stato utile?

Soluzione

Non consiglio di provare a imparare prima CUDA poiché è una nuova tecnologia e non hai molto background nella programmazione.

Dal momento che non hai molta esperienza in C (o C ++), CUDA sarà un problema da imparare poiché manca di maturità, librerie, bei messaggi di errore, ecc.

CUDA è pensato per le persone che hanno familiarità con C (anche l'esperienza C ++ aiuta) e hanno un problema che necessita di miglioramenti delle prestazioni ricodificando o ripensando la soluzione di un problema ben noto.

Se stai cercando di risolvere " ANN / bayesiano " problemi consiglierei di creare la tua soluzione in C ++ o C, a tua scelta. Non preoccuparti di creare thread o multithreading. Quindi, dopo la valutazione, i tempi di risposta della soluzione seriale cercano di renderla parallela utilizzando OpenMP, Boost thread, w / e. Dopo questo, se hai ancora bisogno di più prestazioni, allora consiglierei di imparare CUDA.

Penso che questi siano punti validi perché CUDA ha alcuni errori piuttosto criptici, difficili da eseguire il debug, architettura totalmente diversa, ecc.

Se sei ancora interessato, questi sono alcuni link per imparare CUDA:

Corsi online:

Forum (la migliore fonte di informazioni):

Strumenti:

Problemi risolti in CUDA:

Altri suggerimenti

Hai espresso 3 obiettivi diversi:

  • Imparare a programmare in C
  • Imparare a scrivere codice per la piattaforma CUDA
  • Imparare a usare le reti di Bayes e / o le reti neurali per l'analisi dei dati

In primo luogo: queste cose non sono facili per le persone che hanno già diversi gradi nel campo. Se ne fai solo uno, assicurati di conoscere l'inferenza bayesiana. È di gran lunga il framework più potente disponibile per il ragionamento sui dati e devi conoscerlo. Dai un'occhiata al libro di MacKay (menzionato in fondo). Sicuramente ti sei posto un compito impegnativo: ti auguro tutto il meglio!

I tuoi obiettivi sono tutti bollitori di pesci abbastanza diversi. Imparare a programmare in C non è troppo difficile. Se possibile, prenderei l'Intro to Algorithms & amp; Strutture dati " (di solito il primo corso per laureati in CS) presso la tua università (probabilmente è tenuto in Java). Questo sarà estremamente utile per te e la codifica di base in C sarà semplicemente una questione di apprendimento della sintassi.

Imparare a scrivere codice per la piattaforma CUDA è sostanzialmente più impegnativo. Come raccomandato sopra, controlla prima OpenMPI. In generale, sarai ben servito a leggere qualcosa sull'architettura del computer (Patterson & Hennessy è carino), così come un libro sugli algoritmi paralleli. Se non hai mai visto la concorrenza (vale a dire se non hai sentito parlare di un semaforo), sarebbe utile cercarlo (le lezioni frontali di un corso di sistemi operativi probabilmente lo copriranno - vedi MIT Open Courseware). Infine, come detto, ci sono alcuni buoni riferimenti disponibili per la programmazione GPU poiché è un nuovo campo. Quindi la tua scommessa migliore sarà leggere il codice sorgente di esempio per sapere come è fatto.

Infine, reti bayesiane e reti neurali. Innanzitutto, tieni presente che questi sono abbastanza diversi. Le reti bayesiane sono un modo grafico (nodi e bordi) di rappresentare una distribuzione di probabilità congiunta su un numero (generalmente elevato) di variabili. Il termine "rete neurale" è un po 'più vago, ma generalmente si riferisce all'utilizzo di semplici elementi di elaborazione per apprendere una funzione non lineare per la classificazione dei punti dati. Un libro che offre un'introduzione davvero piacevole sia alle reti di Bayes sia alle reti neurali è l'algoritmo di David J.C. MacKay sulla teoria dell'informazione, inferenza e apprendimento. Il libro è disponibile gratuitamente online all'indirizzo http: //www.inference.phy .cam.ac.uk / Mackay / itila / . Questo libro è di gran lunga il mio preferito sull'argomento. L'esposizione è estremamente chiara e gli esercizi sono illuminanti (la maggior parte ha soluzioni).

Se stai cercando un'introduzione amichevole alla programmazione parallela, considera invece Apri MPI o Posix Threading su un cluster di CPU. Tutto ciò di cui hai bisogno per iniziare è un singolo processore multi-core.

Il consenso generale è che la multi-programmazione su queste nuove architetture (gpu, cell, ecc.) ha una strada da percorrere in termini di maturità dei loro modelli di programmazione e API. Al contrario, Open MPI e PThreads sono in circolazione da un po 'di tempo e ci sono molte risorse per apprenderli. Una volta che hai preso confidenza con questi, quindi considera di provare le nuove tecnologie.

Sebbene ci siano sicuramente interfacce di programmazione per molti altri linguaggi, C è probabilmente il linguaggio moderno più comune (Fortran e Pascal stanno ancora lavorando in quest'area) in uso nel calcolo ad alte prestazioni. Anche il C ++ è abbastanza popolare, molti pacchetti di Bioinformatica lo usano. In ogni caso, C è sicuramente un buon punto di partenza e puoi passare a C ++ se vuoi più funzionalità di linguaggio o librerie (probabilmente sarà a scapito delle prestazioni).

Se sei interessato al data mining, potresti anche voler esaminare il sistema open source chiamato Orange. È implementato in C ++ ma supporta anche la programmazione per l'utente finale in Python o in un linguaggio visivo di collegamento e nodo.

Non so se supporta le NN ma so che le persone lo usano per l'apprendimento delle tecniche di datamining. Supporta cose come le regole di clustering e associazione.

(Inoltre, nel caso in cui non lo sapessi, potresti voler rintracciare qualcuno nella tua scuola B che gestisce le operazioni. Se sei interessato a CS e datamining, potresti trovare persone simili. )

Link: gpgpu.org Ha qualche discussione interessante

Le ultime versioni di CUDA (3.1, 3.2) dispongono di un set completo di funzioni chiamato CuBLAS che gestirà le operazioni della matrice multi-core su configurazioni a scheda singola. Parallelizzare la backproagation sarà un po 'più una sfida, ma ci sto lavorando.

Sono stato in grado di trovare alcuni fantastici corsi video gratuiti da Stanford su iTunesU

Metodologia di programmazione (CS106A) Astrazioni di programmazione (CS106B) Paradigmi di programmazione (CS107) Apprendimento automatico (CS229) Programmazione di processori paralleli massicci con CUDA

Ognuno di questi corsi ha circa 20 lezioni, quindi è un investimento guardarli tutti ma ne vale la pena.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top