2009-03-11 10 views
4

Je suis une majeure en affaires, aux deux tiers de mon programme d'études, avec une petite expérience en PHP, ayant suivi un cours d'introduction au C++, et maintenant regrettant mon choix d'affaires en programmation/informatique.Conseils pour un débutant C, CUDA, & ANN?

Je suis intéressé à apprendre plus de programmation avancée; spécifiquement C, et éventuellement progresser vers l'utilisation de l'architecture CUDA pour l'analyse de données de réseaux neuronaux artificiels (pas pour IA, vision, ou traitement de la parole, mais pour trouver des corrélations entre points de données dans de grands ensembles de données).

Un conseil sur la façon dont je devrais commencer à apprendre C? Ainsi que la technologie ANN/Bayesian pour l'analyse des données? Il y a tellement de livres là-bas, je ne sais pas quoi choisir.

Comme CUDA est assez récent, il ne semble pas y avoir beaucoup de matériel adapté aux apprenants (c'est-à-dire édulcoré) pour cela. Existe-t-il des ressources d'apprentissage pour CUDA au-delà de la documentation NVIDIA? En outre, quelles ressources me recommanderiez-vous pour parler de l'informatique GPGPU et de la programmation massivement parallèle qui pourraient m'aider?

Répondre

5

Je ne recommande pas d'essayer d'apprendre CUDA d'abord car c'est une nouvelle technologie et vous n'avez pas beaucoup de connaissances en programmation.

Puisque vous n'avez pas beaucoup d'expérience en C (ou C++), CUDA sera une douleur à apprendre car il manque de maturité, libs, beaux messages d'erreur, etc.

CUDA est destiné aux personnes qui sont familier avec C (expérience C++ aide aussi) et avoir un problème qui nécessite une amélioration des performances en recodant ou en repensant la solution d'un problème bien connu.

Si vous essayez de résoudre des problèmes "ANN/Bayesian", je vous recommande de créer votre solution en C++ ou C, votre choix. Ne vous occupez pas de créer des threads ou du multithreading. Ensuite, après évaluation, les temps de réponse de votre solution série essayent de la rendre parallèle en utilisant OpenMP, Boost threads, w/e. Après cela, si vous avez encore besoin de plus de performance, alors je vous recommande d'apprendre CUDA.

Je pense que ce sont des points valides parce que CUDA a quelques erreurs assez cryptiques, difficile à déboguer, architecture totalement différente, etc.

Si vous êtes toujours intéressé, ce sont des liens pour en savoir CUDA:

Cours en ligne:

Forum (le meilleure source d'information):

Outils:

Problèmes résolus dans CUDA:

+0

Merci pour vos conseils. Je sais que l'apprentissage CUDA est une grande entreprise pour quelqu'un qui n'a pas beaucoup (ou dans mon cas, presque aucune) d'expérience en C/C++, et je vais probablement commencer avec d'autres choses, plus novices, que vous avez recommandé. –

0

Si vous recherchez une introduction amicale à la programmation parallèle, pensez plutôt à Open MPI ou Posix Threading sur un cluster de processeurs. Tout ce dont vous avez besoin pour commencer est un seul processeur multi-core.

Le consensus général est que la multiprogrammation sur ces nouvelles architectures (gpu, cell, etc.) a encore du chemin à faire en termes de maturité de leurs modèles de programmation et d'API. À l'inverse, Open MPI et PThreads existent depuis longtemps et il existe de nombreuses ressources pour les apprendre. Une fois que vous êtes à l'aise avec ceux-ci, alors envisager d'essayer les nouvelles technologies. Bien qu'il y ait certainement des interfaces de programmation pour beaucoup d'autres langages, C est probablement le langage moderne le plus répandu (Fortran et Pascal sont encore en train de se déplacer dans ce domaine) utilisé dans le calcul haute performance. C++ est également assez populaire, plusieurs paquets Bioinformatics l'utilisent. Dans tous les cas, C est certainement un bon point de départ, et vous pouvez passer au C++ si vous voulez plus de fonctionnalités de langage ou de bibliothèques (ce sera probablement au détriment des performances).

+0

Le livre de Michael J Quinn sur la programmation parallèle est également un bon début – nairdaen

0

Si vous êtes intéressé par l'exploration de données, vous pouvez également regarder le système open source appelé Orange. Il est implémenté en C++ mais supporte également la programmation en Python ou dans un langage de liens et de nœuds.

Je ne sais pas si elle supporte les NN mais je sais que les gens l'utilisent pour apprendre des techniques de datamining. Il supporte des choses comme les règles de clustering et d'association.

(De plus, si vous ne le saviez pas, vous voudrez peut-être trouver quelqu'un dans votre B-school qui s'occupe de la gestion des opérations Si vous êtes intéressé par CS et datamining, vous y trouverez peut-être des gens .)

3

Vous avez exprimé 3 buts différents:

  • Apprendre à programmer en C
  • Apprendre à écrire du code pour la CU DA plateforme
  • Apprendre à utiliser les filets de Bayes et/ou des filets neuraux pour l'analyse des données

Premièrement: ces choses ne sont pas faciles pour les personnes qui ont déjà plusieurs degrés sur le terrain. Si vous n'en faites qu'une, assurez-vous de connaître l'inférence bayésienne. C'est de loin le cadre le plus puissant pour raisonner sur les données, et vous devez le savoir. Consultez le livre de MacKay (mentionné en bas). Vous vous êtes certainement fixé une tâche difficile - je vous souhaite tout le meilleur!

Vos objectifs sont tous assez différentes bouilloires de poisson. Apprendre à programmer en C n'est pas trop difficile. Je voudrais si possible de prendre le "Intro to Algorithms & Data Structures" (habituellement le premier cours pour les majors CS) à votre université (il est probablement enseigné en Java).Cela sera extrêmement utile pour vous, et le codage de base en C sera simplement une question de syntaxe d'apprentissage.

Apprendre à écrire du code pour la plate-forme CUDA est nettement plus difficile. Comme recommandé ci-dessus, veuillez d'abord consulter OpenMPI. En général, vous serez bien servi pour lire quelque chose sur l'architecture informatique (Patterson & Hennessy est agréable), ainsi qu'un livre sur les algorithmes parallèles. Si vous n'avez jamais vu la simultanéité (si vous n'avez pas entendu parler d'un sémaphore), il serait utile de le consulter (les notes de cours d'un cours sur les systèmes d'exploitation le couvriront probablement - voir MIT Open Courseware). Enfin, comme mentionné, il existe peu de bonnes références disponibles pour la programmation GPU car il s'agit d'un nouveau champ. Donc, votre meilleur pari sera de lire un exemple de code source pour apprendre comment c'est fait.

Enfin, des filets bayésiens et des réseaux de neurones. Tout d'abord, s'il vous plaît soyez conscient que ceux-ci sont assez différents. Les réseaux bayésiens sont des moyens graphiques (nœuds & bords) de représenter une distribution de probabilité conjointe sur un nombre (généralement important) de variables. Le terme "réseau de neurones" est quelque peu plus vague, mais fait généralement référence à l'utilisation d'éléments de traitement simples pour apprendre une fonction non linéaire pour classer des points de données. Les algorithmes de théorie de l'information, d'inférence et d'apprentissage de David J.C. MacKay sont un livre qui donne une très bonne introduction aux réseaux de Bayes et aux réseaux de neurones. Le livre est disponible gratuitement en ligne au http://www.inference.phy.cam.ac.uk/mackay/itila/. Ce livre est de loin mon préféré sur le sujet. L'exposition est extrêmement claire, et les exercices sont éclairants (la plupart ont des solutions).

+0

Merci pour votre réponse. Je suis toujours prêt à relever un défi. :) –

0

Les dernières versions de CUDA (3.1, 3.2) disposent d'un ensemble complet de fonctions appelé CuBLAS qui gère les opérations matricielles multi-cores pour les configurations à carte unique. Paralléliser le backproagation sera un peu plus un défi, mais je travaille dessus.

0

j'ai pu trouver quelques grands cours vidéo gratuits de Stanford sur iTunesU

Méthodologie de programmation (CS106A) de Abstractions Programmation (CS106B) Paradigmes de programmation (CS107) machine apprentissage (CS229) Programmation Processeurs Massively Parallel avec CUDA

Chacun de ces cours a une vingtaine de conférences, alors c'est un investissement de les regarder tous, mais ça vaut le coup.